Непрерывное считывание RFID-метки RDM6300

У меня есть RDM6300, подключенный к Arduino Mega, и код, который отлично считывает тег:

// Прототипы функций
void setup(void);
void loop(void);

// Детали пакета RDM6300
#define RDM6300_PACKET_SIZE  14
#define RDM6300_PACKET_BEGIN 0x02
#define RDM6300_PACKET_END   0x03

// Globack для чтения данных RFID
char buff[RDM6300_PACKET_SIZE];
uint32_t tag_id;
uint8_t checksum;

void setup(void) {
  Serial.begin(9600);
  Serial.println("Setting up...");

  // Настройка платы RFID
  Serial1.begin(9600);

  Serial.println("READY. Scanning tags...");
}

void loop(void) {
  while (Serial1.available() > 0) {
    if (Serial1.peek() == RDM6300_PACKET_BEGIN || Serial1.read()) {
      Serial1.readBytes(buff, RDM6300_PACKET_SIZE);
      if (buff[13] != RDM6300_PACKET_END) {
        Serial.println("Bad1");
      }
      else {
        buff[13] = 0;
        checksum = strtol(buff + 11, NULL, 16);
        buff[11] = 0;
        tag_id = strtol(buff + 3, NULL, 16);
        buff[3] = 0;
        checksum ^= strtol(buff + 1, NULL, 16);
        for (uint8_t i = 0; i < 32; i += 8) checksum ^= ((tag_id >> i) & 0xFF);
        if (checksum) {
          Serial.println("Bad2");
        }
        else {
          Serial.println(tag_id);
        }
      }
    }
    else {
      Serial.println("Bad3");
      Serial.println(Serial1.peek(), HEX);
    }
    Serial.println("END");
  }
}

Однако вывод останавливается после чтения тега примерно 28 раз (иногда больше, иногда меньше...) . Если я удалю тег из области «чтение» и поставлю его обратно, он снова начнет читать несколько раз, а затем остановится.

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

Поскольку RDM6300 должен быть непрерывным считывателем RFID, я ожидал получать данные в течение всего времени, пока я держал метку над антенной.

Кто-нибудь сталкивался с такой же проблемой и нашел решение?

Спасибо за любые подсказки.

, 👍-1

Обсуждение

только предположение ...... это может быть нормальным поведением для меток RFID ..... возможно, повторное считывание истощает энергию метки быстрее, чем она может быть восполнена ..... что произойдет, если вы введете 1 секунду задержка между сканированиями??, @jsotola

@jsotola К сожалению, триггера «чтения» нет. Модуль (https://www.seeedstudio.com/125Khz-RFID-module-UART.html) просто начинает выдавать данные, как только метка оказывается в пределах досягаемости антенны., @Andre Courchesne


1 ответ


0

Хорошо, похоже, это связано с тегами. «Стандартные» карты для ключей и кредитных карт при использовании с RDM360 выдают свой идентификатор только один раз.

Одни и те же метки при использовании с модулем RDM3600 будут излучать свои метки несколько раз, но в какой-то момент антенна не сможет обеспечить достаточную мощность для повторной передачи метки, и поток остановится.

К счастью, в этом проекте я использую очень маленькие бирки, сделанные для птиц (https://eccel.co.uk/product/3-3mm-em4102-pit-bird-tag-grey/) и при использовании с RDM360 будет постоянно ретранслировать. Я предполагаю, что им нужно меньше энергии, и антенна способна обеспечить достаточно.

Если вы хотите использовать непрерывное чтение с использованием обычных тегов, я считаю, что еще есть способ... Если вы «сбросите» RDM360 или RDM3600, он принудительно «повторно активирует» тег, и передача возобновится. Таким образом, можно было бы использовать простой транзистор для включения и выключения питания модуля RFID с помощью ввода/вывода Arduino.

,

Можно принять свой собственный ответ как решение проблемы. Я думаю, вы получите 15 повторений за это., @VE7JRO