RFID Mifare RC522 и mfrc522.PICC_IsNewCardPresent()

pix_l
Offline
Зарегистрирован: 19.02.2017

Добрый вечер.

Приобрел комплект с брелоком и картой. Все зацепил, подключил библиотеку rfid-master.zip, залил скетч. Вроде все читается (мне запись не нужна), но не пойму следующего. В скетче есть следующее:

void loop()
{
if ( ! mfrc522.PICC_IsNewCardPresent())
return;
// чтение карты
if ( ! mfrc522.PICC_ReadCardSerial())
return;
// показать результат чтения UID и тип метки
//Serial.print(F("Card UID:"));
dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
Serial.println();
/*
Serial.print(F("PICC type: "));
byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
Serial.println(mfrc522.PICC_GetTypeName(piccType));
*/
delay(2000);
...

и не пойму смысл этих строк


if ( ! mfrc522.PICC_IsNewCardPresent())
return;

Как по мне, если присутствует НЕ новая карта, значит все побоку. Но у меня если держать одну и ту же карту через 2 секунды она снова в монитор выводится. В связи с чем вопрос, а нафига вообще эта функция??? Мне надо, если карта держится постоянно -  первый раз обрабатывается, все последующие блокируются. Нафига мне постоянно обрабатывать одну и ту же карту???

 

negavoid
Offline
Зарегистрирован: 09.07.2016

Такой вот принцип работы у этого примера. Эти строки нужны для того, чтобы не производить никаких последующих действий, в случае, если карта не обнаружена. IsNewCardPresent? - true - идём дальше, читаем серийник и что-то делаем, false? - выходим из цикла loop(), но сразу же попадаем в него снова, и снова ждём появления карты.

pix_l пишет:
Мне надо, если карта держится постоянно -  первый раз обрабатывается, все последующие блокируются. Нафига мне постоянно обрабатывать одну и ту же карту???

Если так надо - то и сделайте именно так.

pix_l
Offline
Зарегистрирован: 19.02.2017

Так и пытался, но все думал, может функция битая и есть возиожность ее поправить. А с моим алгоритмом - не шарю я в С и в итоге, что не находил, не то. Т.е. в цикле в массив из 4 ячеек заносится серийник карты/брелка, но не могу найти как из массива в лонг загнать. То что нашел - муть какая то, исходный номер отличается от получаемого.

negavoid
Offline
Зарегистрирован: 09.07.2016

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

pix_l
Offline
Зарегистрирован: 19.02.2017

Обойдусь без исполнителей. Поищу дальше.

negavoid
Offline
Зарегистрирован: 09.07.2016

Aye aye, sir, принято! Вы можете даже информировать нас в этой теме о ходе дальнейших поисков, и мы даже, возможно, почитаем!

pix_l
Offline
Зарегистрирован: 19.02.2017

от вашего ника большего ожидать и не следовало.

negavoid
Offline
Зарегистрирован: 09.07.2016

Даже плюсанул ваш коммент про ник, за три года вы первый, кто обратил на него внимание! nega - лень, void - пустота, я и есть - ленивая пустота! Теперь есть база, и мы сможем расширить теорию никнеймов и на всех остальных, если кому будет не лень отписаться в этой теме, и точно так же ничем не помочь.