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; } } } }
запоминать последний UID карты, переданный на сервер - и если снова прочитан этот же UID , на сервер его не передавать
А millis зачем?Я же по руссски написал Здесь ключевое слово заткнулся.И delay для этого как нельзя лучше
все спасибо, запомнил последнюю карту, и с ней сравниваю, через 10 сек через millis равняю к нулю, и карта снова считывается.
Нет. не правильно. Нужна считка, которая понимает, что карту убрали из поля. А так на первый раз что-то не считалось и стоишь как мудак возле запертой двери 10 секунд....ждешь, пока delay не отработает....
Можно так - если считана метка, удаляем всё из uart пока не кончится прием символов, и передаем номер на сервер.