Go Down

Topic: Parallax RFID Card Reader Library (Contribution) (Read 1 time) previous topic - next topic


I wrote a library for the Parallax RFID Card Reader (http://www.parallax.com/StoreSearchResults/tabid/768/txtSearch/28140/List/0/SortField/4/ProductID/114/Default.aspx). I'm releasing it for all to benefit.

The library code is Creative Commons licensed and freely available at: git://github.com/wojnosystems/cw-rfid-reader.git.

I've provided examples in the .h file, reproduced here for convenience.

Code: [Select]

#include <CWRFID.h>

// Connect the RFID card reader's "VCC" pin to 5V on the Arduino board
// Connect the RFID card reader's "/ENABLE" pin to the Digital (PWM) 2 pin (digital 2)
// Connect the RFID card reader's "SOUT" pin to the RX1 pin under (Communication) (You MUST have an Arduino Mega)
// Connect the RFID card reader's "GND" pin to the "GND" pin on the Arduino

// Sets which pin we'll use to enable and disable our RFID device. In this case, it's digital pin #2
#define RFIDEN_PIN 2
// Helper function: enableds the RFID device using the helper defines given in CWRFID.h
// You do not have to use them, but it helps make the code below a bit more readable
void setup() {
  // Configure the Arduino IDE console (assumes Arduino 2560 Mega) so we can see IDs that are read
  // Configure the RFID enable output
  // Turn off the reader at start (no need to waste power until we're ready)

void loop() {
  // This is our storage location for the ID that we're going to read
  int buffer[10];
  // output of the RFID call: 0 = OK, -1 = read error (try again), -3 = timeout
  int rfid_status = 0;
  // Turn on the radio
  // Ask the user to present his/her RFID key
  Serial.println("Please present your RFID key");
  /// Read the RFID Key Reader's serial data. Store the ID (if available) in "buffer",
  ///  wait 10 seconds before timing out
  ///  use RX2 as the input
  rfid_status = cw_rfid_p28140_read( buffer, 10000, &Serial1 );
  switch( rfid_status ) {
    // Success!
    case 0:
      // Write the ID to the console, separate each integer with a colon (:)
      // The ID is exactly 10 integer digits
      for( int i = 0; i < 10; ++i ) {
        Serial.print( (unsigned int)buffer[i] );
        // Add a colon separator, except for the last character, add a newline.
        if( i != 9 ) { Serial.print( ":" ); } else { Serial.print("\n"); }
      // Turn off the radio
      // wait 5 seconds. You could, at this point, cross reference this ID
      // with a database of known keys to see if this person has access
      // If they do, let them in or do something. I'm just waiting here just because
      // Do stuff
    case -3:
      // This means they didn't hold up a key
      // Turn off the radio
      Serial.println( "Timeout reached" );
      // Do something else. The user is clearly not paying attention or doesn't want to present
      // an RFID key to us
    case -1:
      // Sometimes, the RFID reader will encounter noise. This will generate keys with spurious IDs
      // The library filters these out for you and will indicate a -1 when you should ignore the key
      // This is also caused by moving the RFID tag away from the reader before it's had a chance to read
      // the ID two times in a row. This takes about 1 second
      Serial.println( "Unable to read the key, please try again" );
      // Turn off the radio
      // Wait for the noise to dissipate
      // You shouldn't be able to read this state. Assume any values other than those
      // specified above are error conditions
      Serial.println("UNKNOWN ERROR");

If you have a working RFID reader and keys, you will see key ID's such as:


  • Open Terminal.app

  • cd ~/Documents/Arduino/libraries (you may need to create the libraries folder)

  • git clone git://github.com/wojnosystems/cw-rfid-reader.git CWRFID

  • Restart the Arduino IDE (if already running)

Happy DIY'ing.


Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Go Up