Software Serial и чтение множества меток сразу с UHF Rfid Reader

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

  1. sazanof

    sazanof Нуб

    Доброе утро, товарищи. Сразу к делу. Постараюсь описать как можно понятнее. Есть: Arduino UNO и считыватель rfid дальнего действия с возможностью одновременного считывания до 64 меток.

    К считывателю идет ПО, китайское, в котором можно настроить практически все: мощность, выбор антенн (из четырех), типы (Wiegand26\34,rs232,rs485 и тд),длину "какбэ паузы между сканированиями", когда карта приложена и интервал повторного считывания карты с тем же ID. Вообщем, вот эти 2 параметра, особенно "пауза" очень важна. Объясню почему, но сначала простой код, который успешно считывает данные с софтверного сериал порта:
    Код (C++):
    #include <SoftwareSerial.h>

    SoftwareSerial mySerial(2, 3);
    int c = 0;
    void setup()
    {
      Serial.begin(9600);
      Serial.println("serial activated");
      mySerial.begin(9600);

    }

    void loop()
    {

      if (mySerial.available())
      {
        c++;
        byte data = mySerial.read();
         Serial.print(data);
         Serial.print(" ");
      }
    }
    Можно выводить Serial.print(data,HEX);Serial.print(data,BIN); - не важно

    Так вот в чем вся соль:

    Учитывая то, что карт в диапазоне считывания может быть несколько, соответственно длина считывания за раз байт будет разная. ПРИНТ выводит вот это:
    Если в мульти режиме сканить по одной карте

    карты в комплекте
    70 0 119 179 227 253 59 255 211 215 207 255 141 213 31 19 187 125
    70 0 119 179 227 253 59 255 211 215 207 255 55 213 31 19 105 39
    70 0 119 179 227 253 59 255 209 219 223 253 17 221 255 173 130 8
    70 0 119 179 227 253 59 255 209 219 223 253 59 221 255 171 112 44

    наклейки покупные
    70 0 119 179 227 253 59 255 209 249 238 151 215 191 233 39 28
    70 0 119 179 227 253 59 255 209 249 238 153 215 191 233 43 1
    70 0 119 179 227 253 59 255 209 249 238 205 215 191 233 157 15
    70 0 119 179 227 253 59 255 209 249 238 149 215 191 233 149 6

    Если поднести несколько, то:

    70 0 119 179 190 188 59 255 209 249 238 205 215 191 233 157 175 59 255 209 249 238 149 215 191 233 149 70 59 255 209 249 238 151 215 191 233 39 28 127 135 255 209 249 238 153 215 191 233 43 209 59 255 211 215 207 255 55 213 31 19 105 39 127 135 255 209 219 223 253 17 221 255 173 130 8

    ИЛИ

    70 0 119 179 223 253 59 255 209 249 238 205 215 191 233 157 175 59 255 209 249 238 153 215 191 233 43 209 59 255 209 249 238 149 215 191 233 149 70 59 255 209 249 238 151 215 191 233 39 28

    Отформатировал уже я. Как видно, есть какая-то закономерность, но разные карты и наклейки дают разное количество байт (если я правильно выразился) - отмечены курсивом. жирным отмечены части одинаковые.
    В этой строке передается не только номер карты, но и тип считывателя и номер антенны, с которой передается сигнал.
    Итак, что мне необходимо: помогите понять алгоритм, по которому можно разобрать строку по номерам карт и каждый номер записать в лог (это уже вторая задача, думаю, что я с ней справлюсь)

    Спасибо!
     
  2. parovoZZ

    parovoZZ Гуру

    Булевой "и" сравниваешь побитно строку со всеми номерами карт в памяти. Потом сдвигаешь строку и опять сравниваешь.
     
    sazanof нравится это.