Система контроля доступа
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Имеется две ардуино уно, две 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); }
Может тут проблема, может нужно в цикл опрос прихода информации засунуть?