Система контроля доступа
- Войдите на сайт для отправки комментариев
Имеется две ардуино уно, две nRF24L01+, один rfid rc522, один oled lcd display.
К первому ардуино подключаем nRF24L01+ко второму всё остальное.
Считываю с карточки UID отправляю его первому ардуино и если такой есть в базе отправляю назад подтверждение или оправержение. При первом включение ардуино связывается друг с другом что бы было понятно что соединение установленно а вот отправить UID никак не получается или принять не уверен что именно не так.
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>
#include <MFRC522.h>
#include <OLED_I2C.h>
#define SS_PIN 7 //пин rfid
#define RST_PIN 6 //пин rfid
MFRC522 rfid(SS_PIN, RST_PIN);
RF24 radio(9,10);//пины rf24
const uint64_t pipe = 123456789;// труба
uint32_t message;
int connectServer[1];//для проверки коннекта с сервером
OLED myOLED(SDA, SCL, 8);//пины OLED экрана
extern uint8_t SmallFont[];//размер шрифта
uint32_t answServer=0;
byte nuidPICC[4];//для записи UID
void setup() {
Serial.begin(9600); //скорость ком порта
SPI.begin(); // SPI интерфейс
rfid.PCD_Init(); // Инициализация mfrc522
pinMode(10,OUTPUT);
pinMode(7,OUTPUT);
radio.begin();
radio.enableAckPayload();
radio.setDataRate(RF24_250KBPS); // скорость обмена данными RF24_1MBPS или RF24_2MBPS
radio.openWritingPipe(pipe);
myOLED.begin();
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print("HELLO!", CENTER, 20);
myOLED.update();
delay(3000);
myOLED.print("Connecting server", CENTER, 20);
myOLED.update();
connectServer[0] = 1;
radio.write(connectServer, 1);
delay(3000);
if ( radio.isAckPayloadAvailable()){
radio.read(&answServer,sizeof(answServer));
if (answServer==1){
myOLED.clrScr();
myOLED.print("Connection ready", CENTER, 20);
myOLED.update();
delay(3000);
myOLED.clrScr();
myOLED.print("Waiting for a card", CENTER, 20);
myOLED.update();
}
}
if(answServer==0){
myOLED.clrScr();
myOLED.print("ERROR Connection", CENTER, 20);
myOLED.update();
delay(3000);
}
digitalWrite(10,LOW);
digitalWrite(7,HIGH);
}
void loop() {
//ждём новую карту
if ( ! rfid.PICC_IsNewCardPresent()){
return;
}//uidDec=3671577829;
//считываем карту
if ( ! rfid.PICC_ReadCardSerial())return;
if (rfid.uid.uidByte[0] != nuidPICC[0] ||
rfid.uid.uidByte[1] != nuidPICC[1] ||
rfid.uid.uidByte[2] != nuidPICC[2] ||
rfid.uid.uidByte[3] != nuidPICC[3] )
{
for (byte i = 0; i < 4; i++) {
nuidPICC[i] = rfid.uid.uidByte[i];
}
}
digitalWrite(10,LOW);
digitalWrite(7,HIGH);
Serial.println(nuidPICC[1]);
radio.write(nuidPICC[1], 1);
}
Тут пытаюсь отправить хотя бы один эллемент массива но никак. Хотя переменная для подтверждения коннекта с вторым ардуино отправляется и возвращяется подтверждение. Может я не верно полюзуюсь SPI интерфейсом может ещё что?
Код для приёмника
void loop()
{
uint32_t message = 1;
uint32_t UIDansw = 1;
if(radio.available())
{
radio.read(massiv, 1);
if(massiv[0] == 215)
{
Serial.println(massiv[0]);
digitalWrite(6, HIGH);
radio.writeAckPayload( 1, &message, sizeof(message));
delay(3000);
digitalWrite(6, LOW);
}
else if(massiv[0] == 215)
{
Serial.println(massiv[0]);
digitalWrite(6, HIGH);
}
Может тут проблема, может нужно в цикл опрос прихода информации засунуть?