Нужна помощь в Grove RFID

Тема в разделе "Arduino & Shields", создана пользователем VockGaiM, 27 мар 2013.

  1. VockGaiM

    VockGaiM Нуб

    Я новичок в ардуино, пытаюсь разобраться что к чему, купил себе Grove RFID reader 125kHz,
    здесь (seeedstudio.com/wiki/Grove_-_125KHz_RFID_Reader) нашел код для демо, но никак не могу разобраться как мне из него вывести в Serial.println ID меток, помогите
    // 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 recieve 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 comming from softwareserial port ==> data is comming 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 storaged data from the array
    count = 0; // set counter of while loop to zero


    }
    if (Serial.available()) // if data is available on hardwareserial port ==> data is comming 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=NULL;} // clear all index of array with command NULL
    }
     
  2. nailxx

    nailxx Официальный Нерд Администратор

    Вот, держите:

    Код (Text):

    #include <SoftwareSerial.h>
     
    SoftwareSerial rfid = SoftwareSerial(5, 6);
     
    void setup()
    {
        rfid.begin(9600);
        Serial.begin(9600);
    }
     
    void loop()
    {
        if (rfid.available())
        {
            while (rfid.available())
                Serial.write(rfid.read());
        }
    }
     
     
  3. VockGaiM

    VockGaiM Нуб

    Спасибо большое, только это не совсем то, что я хочу(
    поясню:

    нужно собрать что-то "аля сигнализации", допустим есть 3 метки, одна известная и является ключом, остальные не являются таковыми, так вот нужно сделать переключатель: если поднесли метку известную, то сигнализация включена, если опять ее же поднесем, то сигнализация выключена, на остальные метки система не реагирует.
    нашел в интернете библиотеку для рфид и сделал с помощью примера вот такое:

    Код (Text):
    if(RFID.isIdAvailable())
      {
        tag = RFID.readId();
     
        if ((tag.mfr == 22528 ) && (tag.id == 9917223) && (tag.chk == 187))
        {
     
          AlarmSetOn = !AlarmSetOn;
          delay(10);
        }
    где
    tag.mfr, tag.id, tag.chk просто разбиение ID метки на части и перевод их в DEC (вытащил их из библиотеки)

    проблема возникает у меня и в дальнейшем:

    Код (Text):
     if (AlarmSetOn == false)
    если после этой строки прошу сделать что-нить - он делает это только 1 раз, а что делать и как быть, если я , допустим хочу, чтобы диодик мигал пока AlarmSetOn == false ? а как только AlarmSetOn == true, гас и начинал мигать другой ?
     
  4. Megakoteyka

    Megakoteyka Оракул Модератор

    Делайте это после чтения карты, а не внутри него.
     
    nailxx нравится это.
  5. VockGaiM

    VockGaiM Нуб

    Спасибо, все стало ок, сам до этого я не додумался )