Hi I'm trying to set up an arduino uno with a Parallax RFID reader and a NRF24L01+ 2.4 GHz Transceiver I'm using the RF24 Library.
My goal is to replace serial with the NRF24L01+ to make the connection wireless. The RFID portion works perfectly over serial.
I'm using an older version of the arduino ide version 22.
Any help getting this to work will be greatly appreciated.
I will be making a custom PCB in eagle cad for this when it is all working and i will put up a link for the board here when it is done
Here is my code
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
// RFID Settings
#include <NewSoftSerial.h>
// NewSoftSerial needs pin in and out, but RFID Reader only has IN
RF24 radio(8,9); //CE and CSN Pins for the nRF24L01
int pinUnused = 13;
int pinRfidEnable = 6;
int pinRfidSerialIn = 7;
#define ledr 3
#define ledg 4
#define ledb 5
#define door 2
int baudRateRfid = 2400;
NewSoftSerial rfidSerial(pinRfidSerialIn, pinUnused);
const uint64_t pipes[2] = {0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
// These are used for serial communication
int val = 0;
char rfid[10];
int bytesRead = 0;
void emptySerialBuffers() {
// This empties the serial buffers to prevent repeat reads
while(rfidSerial.available() > 0) {
rfidSerial.read();
}
while(Serial.available() > 0) {
Serial.read();
}
}
void setup() {
radio.begin();
// optionally, increase the delay between retries & # of retries
radio.setDataRate(RF24_250KBPS);
radio.setRetries(15,15);
radio.setPayloadSize(32);
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1,pipes[0]);
radio.startListening();
radio.printDetails();
// Serial to computer
Serial.begin(57600);
pinMode(ledr, OUTPUT);
pinMode(ledg, OUTPUT);
pinMode(ledb, OUTPUT);
pinMode(door, OUTPUT);
digitalWrite(door, LOW);
// Set up RFID Reader
rfidSerial.begin(baudRateRfid);
pinMode(pinRfidEnable, OUTPUT);
digitalWrite(pinRfidEnable, LOW);
}
void loop() {
digitalWrite(ledb, HIGH);
// Read serial from RFID reader
if(rfidSerial.available() > 0) {
val = rfidSerial.read();
// Got signal from RFID Reader
if(val == 10) {
bytesRead = 0;
while(bytesRead < 10) {
if(rfidSerial.available() > 0) {
val = rfidSerial.read();
// Line endings mean end of message
if(val == 10 || val == 13) {
break;
}
rfid[bytesRead] = val;
bytesRead++;
}
}
if(bytesRead == 10) {
emptySerialBuffers();
// Send RFID tag to computer
Serial.println(rfid);
digitalWrite(pinRfidEnable, HIGH);
radio.write(rfid);
radio.stopListening();
// Wait for response from computer
while(Serial.available() == 0) {
delay(10);
}
}
bytesRead = 0;
}
}
// Read serial from computer
if(Serial.available() > 0) {
// Got signal from computer
// Disable RFID reader so we don't get repeats
digitalWrite(pinRfidEnable, HIGH);
val = Serial.read();
if(val == 'G') {
radio.startListening();
radio.read(val);
radio.stopListening();
// Access Granted
digitalWrite(door, HIGH);
digitalWrite(ledg, HIGH);
digitalWrite(ledb, LOW);
digitalWrite(ledg, LOW);
} else if(val == 'D') {
radio.startListening();
radio.read(val);
radio.stopListening();
// Access Denied
// Wait a moment so we can't brute force crack
digitalWrite(door, LOW);
digitalWrite(ledr, HIGH);
digitalWrite(ledb, LOW);
delay(5000);
digitalWrite(ledr, LOW);
}
emptySerialBuffers();
}
// Reactivate RFID antenna
digitalWrite(pinRfidEnable, LOW);
}