MFRC522 Не получается обработать.
- Войдите на сайт для отправки комментариев
Приветствую.
Купил модуль. Подключил, экспериментирую. Настроил, что если карту или брелок постоянно держать на считывателе, то обрабатывался только первый вызов, остальные побоку. Но подумал, что бывают всякие случаи. Например, прикладываю брелок, код считывается, если брелок продолждает находиться в зоне действия считывателя, то последующие вызовы мимо кассы. Если прикладывается другой брелок, то опять же первый вызов проходит, последующие блокируются, НО если последний брелок отвести от считывателя и поднести в течении 5 секунд, вызовы снова блокируются, но если поднести через 5 секунд, то первый вызов проходит, остальные блокируются. Вроде все предельно просто и понятно, но что то не догоняю как это переложить в код.
для начала попробуйте написать это по русски в стиле "если - то". А то пока не понятно
В библиотеке есть функция PICC_IsNewCardPresent() которая возвращает true если поднести карту к считывателю, а затем блокирует все обращения к карте пока карту не уберешь и не поднесешь заново. Карту поднесли, проверка сработала, читаем серийный номер карты (PICC_ReadCardSerial()) и запоминаем его на необходимое время. Если за это время произошло повторное считывание - игнорируем его. Если время прошло - "забываем" номер карты. Если поднесли другую за это время - записываем другую в эту же переменную.
Я именно так и описал. Если вам не понятно - не стоит пытаться "помогать".
Да, есть такое. В оригинальном коде есть следующее:
В итоге, если карту держать - каждую секунду она выводится в лог. Но ничего не блокируется и вообще не понятен код - isNewCardPresent - это не то, что поднесена именно НОВАЯ карта, а просто если что то поднесено.
Я именно так и описал. Если вам не понятно - не стоит пытаться "помогать".
Тогда опишите по-нормальному что требуется, я раза на три прочитал абзац и ничонепонял.
В исходниках библиотеки написано, что перед PICC_ReadCardSerial() нужно вызвать одну из функций: PICC_IsNewCardPresent(), PICC_RequestA() или PICC_WakeupA(). Если вызвать PICC_IsNewCardPresent() или PICC_RequestA() - то считывание происходит только один раз. Для повторного считывания надо убрать карту и поднести заново. А если вызвать PICC_WakeupA() - то считывание не блокируется и поднесенная карта считывается каждый раз при вызове этих двух функций. В чем проблема считывать постоянно серийник и в зависимости от того старый он или новый производить действия: запоминать его, забывать через 5 секунд или проверять новая карта пришла или старая?
Если вызвать PICC_IsNewCardPresent() или PICC_RequestA() - то считывание происходит только один раз. Для повторного считывания надо убрать карту и поднести заново.
Я привел выше код и чтение происходит через каждую секунду!
В чем проблема считывать постоянно серийник и в зависимости от того старый он или новый производить действия: запоминать его, забывать через 5 секунд или проверять новая карта пришла или старая?
Я и сделал, постоянно проверяю старая или новая и оно работает, а вот как прикрутить к этому те самые 5 секунд что бы забыть - не догоняю.
Отбой, кое как сделал, что хотел:
Отбой, кое как сделал, что хотел:
либо потеряли половину кода при копировании на форум, либо выложенный код абсолютно ничего не делает. Зачем, например, проверка интервала в строке 8, если единственное, что при этой проверке делается - очищаются старый и новый коды карт. которые и так (судя по коду) - всегда пустые?