Grove - 125KHz RFID Reader + Aduino Uno, реально?

Тема в разделе "Arduino & Shields", создана пользователем Navi1393, 25 июл 2015.

  1. Navi1393

    Navi1393 Нуб

    Вопрос такой,купил эти две вещи что делать,чтобы карты считывались?
    Код (Text):
    // link between the computer and the SoftSerial Shield
    //at 9600 bps 8-N-1
    //Computer is connected to Hardware UART
    //SoftSerial Shield is connected to the Software UART:D2&D3
    #include <SoftwareSerial.h>
    SoftwareSerial SoftSerial(2, 3);
    unsigned char buffer[64]; // buffer array for data receive over serial port
    int count=0;    // counter for buffer array
    void setup()
    {
      SoftSerial.begin(9600);              // the SoftSerial baud rate
      Serial.begin(9600);            // the Serial port of Arduino baud rate.
    }
    void loop()
    {
      if (SoftSerial.available())              // if date is coming from software serial port ==> data is coming from SoftSerial shield
      {
        while(SoftSerial.available())          // reading data into char array
        {
          buffer[count++]=SoftSerial.read();    // writing data into array
          if(count == 64)break;
      }
        Serial.write(buffer,count);            // if no data transmission ends, write buffer to hardware serial port
        clearBufferArray();              // call clearBufferArray function to clear the stored data from the array
        count = 0;                      // set counter of while loop to zero
      }
      if (Serial.available())            // if data is available on hardware serial port ==> data is coming from PC or notebook
        SoftSerial.write(Serial.read());      // write it to the SoftSerial shield
    }
    void clearBufferArray()              // function to clear buffer array
    {
      for (int i=0; i<count;i++)
        { buffer[i]=NULL;}                  // clear all index of array with command NULL
    }
    Вот этот скетч залил в ардуино, а толку - нуль(
    Кто может подсказать что не так?
     
  2. monsieur_cher

    monsieur_cher Нерд

    Когда подносите карту к антенне, светодиоды мигают?
     
  3. Navi1393

    Navi1393 Нуб

    нет
     
  4. monsieur_cher

    monsieur_cher Нерд

    у включенного сенсора постоянно должен гореть красный светодиод. Когда подносится карточка должен моргнуть зеленый светодиод.

    Возможно, у Вас карточка "не той системы".
     
  5. Navi1393

    Navi1393 Нуб

    Я покупал на амперке карточки. А они там только 125кГц
     
    Последнее редактирование: 26 июл 2015
  6. monsieur_cher

    monsieur_cher Нерд

    А диоды горят?
     
  7. Navi1393

    Navi1393 Нуб

    На плате rfid горит красный и при включении моргает зелёный
     
  8. Navi1393

    Navi1393 Нуб

    ПРОБЛЕМА РЕШЕНА!
    Выкладываю рабочий код. Из электронного архива к книге Петина В.А. "Проекты с использованием контроллера Arduino. 2 изд."
    И на будущее, проверяйте антенну)

    Код (Text):
    byte RFIDcardNum[4];
    byte evenBit = 0;
    byte oddBit = 0;
    byte isData0Low = 0;
    byte isData1Low = 0;
    int recvBitCount = 0;
    byte isCardReadOver = 0;

    void setup()
    {
      Serial.begin(9600);
      attachInterrupt(0, ISRreceiveData0, FALLING );  //data0/rx is connected to pin 2,

    // which results in INT 0

      attachInterrupt(1, ISRreceiveData1, FALLING );  //data1/tx is connected to pin 3,

    // which results in INT 1
    }

    void loop()
    {
      //read card number bit
      if(isData0Low||isData1Low){
        if(1 == recvBitCount){//even bit
          evenBit = (1-isData0Low)&isData1Low;
        }
        else if( recvBitCount >= 26){//odd bit
          oddBit = (1-isData0Low)&isData1Low;
          isCardReadOver = 1;
          delay(10);
        }
        else{
          //only if isData1Low = 1, card bit could be 1
          RFIDcardNum[2-(recvBitCount-2)/8] |= (isData1Low << (7-(recvBitCount-2)%8));
        }
        //reset data0 and data1
        isData0Low = 0;
        isData1Low = 0;
      }

      //print the card id number
      if(isCardReadOver){
        if(checkParity()){
        //Serial.println();
        //Serial.print(RFIDcardNum[2],HEX);//High byte
        //Serial.print(RFIDcardNum[1],HEX);//Midle byte
        //Serial.println(RFIDcardNum[0],HEX);//Low byte
          Serial.println(*((long *)RFIDcardNum));
        }
        resetData();
      }

    }

    byte checkParity(){
      int i = 0;
      int evenCount = 0;
      int oddCount = 0;
      for(i = 0; i < 8; i++){
        if(RFIDcardNum[2]&(0x80>>i)){
          evenCount++;
        }
      }
      for(i = 0; i < 4; i++){
        if(RFIDcardNum[1]&(0x80>>i)){
          evenCount++;
        }
      }
      for(i = 4; i < 8; i++){
        if(RFIDcardNum[1]&(0x80>>i)){
          oddCount++;
        }
      }
      for(i = 0; i < 8; i++){
        if(RFIDcardNum[0]&(0x80>>i)){
          oddCount++;
        }
      }

      if(evenCount%2 == evenBit && oddCount%2 != oddBit){
        return 1;
      }
      else{
        return 0;
      }
    }
    void resetData(){
      RFIDcardNum[0] = 0;
      RFIDcardNum[1] = 0;
      RFIDcardNum[2] = 0;
      RFIDcardNum[3] = 0;
      evenBit = 0;
      oddBit = 0;
      recvBitCount = 0;
      isData0Low = 0;
      isData1Low = 0;
      isCardReadOver = 0;
    }
    // handle interrupt0
    void ISRreceiveData0(){
      recvBitCount++;
      isData0Low = 1;
    }

    // handle interrupt1
    void ISRreceiveData1(){
      recvBitCount++;
      isData1Low = 1;
    }
     
    Последнее редактирование: 27 июл 2015
  9. monsieur_cher

    monsieur_cher Нерд

    А, у Вас в wiegand режиме он работал?

    Вы сделали это: "You would need to select the jumper to "U" to enter this mode, and the setting is: 9600bps, N, 8, 1, TTL output", перед тем, как по UART с ним работать?
     
  10. Navi1393

    Navi1393 Нуб

    конечно!