воскресенье, 20 февраля 2011 г.

Arduino + Parallax RFID READ/WRITE module

Первая тема в блоге и она посвящается модулю что завалялся у меня. Это считыватель проксимити карт от компании Параллакс. Очень долго не мог разобраться с кодом, но спустя 4 месяца после поднятия проблемы на форуме, один хороший человек прислал мне свой вариант кода. После адаптации по мою плату (Arduino Mega 1280) наконец-то получил позитивный результат, ни что иное как ид карты! Заказал я с небезызвестного сайта ebay 5 карт 125 kHZ и такое же количество брелоков на той же частоте! Для вывода результата я решил использовать LCD Keypad Shield. Коммуникация осуществляется через "Serial2" (только в Arduino Mega). Пины "SIN" и "SOUT"на модуле подключаются к пинам 16 и 17 (Serial2) на ардуино соответственно.  Далее приводятся пару фото и видео (HD) для наглядного примера. Ну и в конце концов исходный код!





// more info at: http://prototypeit.blogspot.com/
// (c) DIXIS  [Arduino Mega 1280]
#include <LCD4Bit_mod.h>
LCD4Bit_mod lcd = LCD4Bit_mod(2);
int  val = 0;
char code[12];
int bytesread = 0;
char tag1[12] = {'1', 'C', '0', '0', 'A', '8', '8', 'E', '7', '9'};   //the tags id
char tag2[12] = {'1', 'B', '0', '0', 'F', '0', '7', 'F', '2', 'F'};
char tag3[12] = {'1', 'B', '0', '0', 'E', 'B', '4', '1', 'C' ,'3'};
char tag4[12] = {'1', 'C', '0', '0', 'A', '5', '4', 'F', '5', '3'};
char tag5[12] = {'3', 'F', '0', '0', '3', 'E', '3', 'E', '7', '6'};
char tag6[12] = {'3', 'F', '0', '0', '3', 'F', '0', 'A', 'C', '6'};
char tag7[12] = {'3', 'F', '0', '0', '3', 'E', '8', '6', '1', 'C'};
char tag8[12] = {'3', 'F', '0', '0', '3', 'F', '2', '0', '2', '3'};


void establishContact() {
 while (Serial2.available() <= 0) {
   Serial2.print("!RW");   // send an initial string
   Serial2.print(0x0F,BYTE);   
   Serial2.flush();
   delay(300);
 }
}


void setup(){
 Serial.begin(9600);
 Serial2.begin(9600);
 Serial.println("RFID Read/Write Test");
 establishContact();
 lcd.init();
     lcd.clear();
  lcd.printIn("   PrototypeIt");
   lcd.cursorTo(2, 2); lcd.printIn(".blogspot.com");
}

void loop(){
   char statusCode;
   //Read RFID Tag data
  
   boolean startByte=false;
   boolean endByte=false;
   bytesread=0;
   if (Serial2.available()>0) {
        while (Serial2.available()>0 && bytesread<10) {
          val=Serial2.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++;}
  
      
       if (bytesread == 10 ) {        
      Serial.println(code);       }    
       
   } else {
       establishContact();
   }
  {   
            if(strcmp(code,tag1) == 0) {lcd.clear(); lcd.cursorTo(1, 2); lcd.printIn("PrototypeIt");
          lcd.cursorTo(2, 5); lcd.printIn("CARD 1");}

        if(strcmp(code,tag2) == 0) {lcd.clear(); lcd.cursorTo(1, 2); lcd.printIn("PrototypeIt");
              lcd.cursorTo(2, 5); lcd.printIn("CARD 2");  }
             
              if(strcmp(code,tag3) == 0) {lcd.clear(); lcd.cursorTo(1, 2); lcd.printIn("PrototypeIt");
              lcd.cursorTo(2, 5); lcd.printIn("CARD 3");  }
             
              if(strcmp(code,tag4) == 0) {lcd.clear(); lcd.cursorTo(1, 2); lcd.printIn("PrototypeIt");
              lcd.cursorTo(2, 5); lcd.printIn("CARD 4");  }
             
              if(strcmp(code,tag5) == 0) {lcd.clear(); lcd.cursorTo(1, 2); lcd.printIn("PrototypeIt");
              lcd.cursorTo(2, 0); lcd.printIn("Key = 0004079222");  }
             
              if(strcmp(code,tag6) == 0) {lcd.clear(); lcd.cursorTo(1, 2); lcd.printIn("PrototypeIt");
              lcd.cursorTo(2, 0); lcd.printIn("Key = 0004131526");  }
             
              if(strcmp(code,tag7) == 0) {lcd.clear(); lcd.cursorTo(1, 2); lcd.printIn("PrototypeIt");
              lcd.cursorTo(2, 0); lcd.printIn("Key = 0004097564");  }
             
              if(strcmp(code,tag8) == 0) {lcd.clear(); lcd.cursorTo(1, 2); lcd.printIn("PrototypeIt");
              lcd.cursorTo(2, 0); lcd.printIn("Key = 0004136995"); }
       
     }
}