Interfacing Arduino with Parallax RFID reader using SoftwareSerial
April 13th, 2008 by TheKidd
So I’ve been playing around with the Arduino now for a month or two and trying to interface it with a few of the Parallax accessories I have lying around. I’ve been meaning to post stuff here the whole time but was lazy. Anyway, here is some modified Wiring code for Arduino to use the Parallax RFID reader for those that might find it useful.
// RFID reader for Arduino
// Wiring version by BARRAGAN <http://people.interaction-ivrea.it/h.barragan>
// Modified for Arudino by djmatic
// And pieces from Arduino Playground <http://www.arduino.cc/playground/Learning/PRFID>
// And then modified again by thekidd
#include <SoftwareSerial.h>
#define rxPin 2
#define txPin 3
#define ledPin 13
// set up a soft serial port
SoftwareSerial mySerial(rxPin, txPin);
int val = 0;
char code[10];
int bytesread = 0;
void setup() {
// define pin modes for tx, rx, led pins:
pinMode(rxPin, INPUT); // Set rxPin as INPUT to accept SOUT from RFID pin
pinMode(txPin, OUTPUT); // Set txPin as OUTPUT to connect it to the RFID /ENABLE pin
pinMode(ledPin, OUTPUT); // Let the user know whats up
// set the data rate for the serial ports
mySerial.begin(2400); // RFID reader SOUT pin connected to Serial RX pin at 2400bps
Serial.begin(9600); // Serial feedback for debugging in Wiring
// say something
Serial.println("Hello World!");
}
void loop() {
digitalWrite(txPin, LOW); // Activate the RFID reader
digitalWrite(ledPin, LOW); // Turn off debug LED
if((val = mySerial.read()) == 10) { // check for header
bytesread = 0;
while(bytesread<10) { // read 10 digit code
val = mySerial.read();
if((val == 10)||(val == 13)) { // if header or stop bytes before the 10 digit reading
break; // stop reading
}
code[bytesread] = val; // add the digit
bytesread++; // ready to read next digit
}
if(bytesread == 10) { // If 10 digit read is complete
digitalWrite(txPin, HIGH); // deactivate RFID reader
digitalWrite(ledPin, HIGH); // activate LED to show an RFID card was read
Serial.print("TAG code is: "); // possibly a good TAG
Serial.println(code); // print the TAG code
}
bytesread = 0;
delay(2000); // wait for a second to read next tag
}
}
Some pics of it all in action:
Next on the agenda is to use SoftwareSerial to communicate with the Parallax GPS unit via NEMA. Once that is done, I want to integrate the GPS with RFID reader and my Purdy LCD (4×40 - I know, its huge).
References:
Arduino Playground: Parallax RFID reader: http://www.arduino.cc/playground/Learning/PRFID
Arduino Forums: SoftwareSerial + RFID: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1176181152/30
ukgsxs3j7e02jlxr