Система контроля доступа

Нет ответов
Trigun
Offline
Зарегистрирован: 09.06.2015

Имеется две ардуино уно, две 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); 


}

Может тут проблема, может нужно в цикл опрос прихода информации засунуть?