как считать rdm6300 только один раз?

Тема в разделе "Arduino & Shields", создана пользователем jtag, 3 мар 2019.

  1. jtag

    jtag Нерд

    1. Имеется картридер rdm6300. Когда подносишь карту приходит много повторных данных. имеется такой алгоритм: после считвания карты, идет отправка на сервер по ethernet, сервер фиксирует событие, но так как считывается карта за секунду много раз, то сервер фиксирует много событий. Пробовал использовать флаг. После того как один раз приходит номер карты, ставится флаг и код считывания карты пропускается, отправляются данные на сервер, сервер обратно отвечает "ok", потом флаг отключается и тут же приходит номер карты со считывателя, хотя карту не подносил
    2. Имеются антенны для 125 кгц раз в 5 больше чем у rdm6300 если их подпоять вместо родных антенн, смогут ли они работать?
    код считывания через uart:
    Код (C++):
    void read_tag(){
      if(Serial3.available() > 0){
        bool call_extract_tag = false;
        int ssvalue = Serial3.read(); // read
        if (ssvalue == -1) { // no data was read
          return;
        }
        if (ssvalue == 2) { //RDM6300 found a tag
          buffer_index = 0;
        } else if (ssvalue == 3) {
          call_extract_tag = true;
        }
        if (buffer_index >= BUFFER_SIZE) {
          Serial.println("Error: Buffer overflow detected!");
          return;
        }
       
        buffer[buffer_index++] = ssvalue;
        if (call_extract_tag == true) {
          if (buffer_index == BUFFER_SIZE) {
            unsigned long tag = extract_tag();
           
            Serial.println(tag);
            return;
          } else {
            buffer_index = 0;
            return;
          }
        }
      }  
    }
     
     
  2. Airbus

    Airbus Радиохулиган Модератор

    Сделать delay что читатель заткнулся на пару секунд.
     
  3. qwone

    qwone Гик

    Если millis() был отменен, то только так.
     
  4. b707

    b707 Гуру

    запоминать последний UID карты, переданный на сервер - и если снова прочитан этот же UID , на сервер его не передавать
     
  5. Airbus

    Airbus Радиохулиган Модератор

    А millis зачем?Я же по руссски написал
    Здесь ключевое слово заткнулся.И delay для этого как нельзя лучше
     
  6. jtag

    jtag Нерд

    все спасибо, запомнил последнюю карту, и с ней сравниваю, через 10 сек через millis равняю к нулю, и карта снова считывается.
     
    Daniil и b707 нравится это.
  7. b707

    b707 Гуру

    молодец. все правильно
     
  8. parovoZZ

    parovoZZ Гуру

    Нет. не правильно. Нужна считка, которая понимает, что карту убрали из поля. А так на первый раз что-то не считалось и стоишь как мудак возле запертой двери 10 секунд....ждешь, пока delay не отработает....
     
  9. Airbus

    Airbus Радиохулиган Модератор

    Если метка считана действие выполнено тогда делей.Иначе читаем снова.Как то так.
     
  10. KindMan

    KindMan Гуру

    Можно так - если считана метка, удаляем всё из uart пока не кончится прием символов, и передаем номер на сервер.