Официальный сайт компании Arduino по адресу arduino.cc
MFRC522 контроль наличия карты
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Добрый день!
Собираю устройство, которое использует считыватель RFID-карт RC522. Использую довольно распространенную библиотеку
Мне необходимо, чтобы замок был открыт пока карточка поднесена к считывателю, как только карту убираем - замок должен закрыться (не обязательно мгновенно, но в пределах 1-2 секунд).
В библиотеке для организации логики работы с картами я нашел всего две функции: PICC_IsNewCardPresent() - возвращает true если к считывателю поднесли карту и PICC_ReadCardSerial() - которая читает серийный номер карты. В описании последней указано, что перед ее вызовом надо обязательно сделать вызов PICC_IsNewCardPresent(), PICC_RequestA() или PICC_WakeupA(). Но дажже если соблюдать это условие - серийник карты читается только если ее убрать от считывателя и снова поднести. Если карта постоянно лежжит на считывателе - серийник не считывается. Мне жн адо отследить именно момент убирания карты от считывателя, чтобы в этот момент закрыть замок.
Поэтому прошу совета у знающих людей: каким образом (программным или даже аппаратным) отследить, что карта находится у считывателя? Может есть другая православная библиотека, которую я не заметил на просторах гуглопоиска?
Ну, а если не спрашивать PICC_IsNewCardPresent, а просто читать серийный номер. Разве не будет читать пока карта там столько раз, сколько надо, пока её не уберут?
В том то и дело, что нет. Я попробовал просто читать серийник, вырезал из примера проверку PICC_IsNewCardPresent - в ответ тишина. Полез в библиотеку - а там в описании написано... Попробовал другие методы из описания - тоже работает только при поднесении карты заново.
Я извиняюсь, проблему решил сегодня с утра. Я вызвал два (PICC_IsNewCardPresent(), PICC_RequestA()) из трех предложенных методов перед чтением карты. Думал что везде результат одинаковый будет. Сегодня с утра попробовал вызвать PICC_WakeupA() перед чтением - и все заработало. То есть надо делать так:
Тогда начинается постоянное считывание.
У меня остался только аппаратный вопрос: с картой ведь ничего не должно приключиться, если у нее серийник считывать непрерывно по нескольку часов?
Соц. карты, когда они на майфер классике были, атакуя читал их от 4х до 7ми часов непрерывно.
Нагреваются они немножко, но ни одна карти не пострадала.
Читать серийник, ни чем не защищенный по определению, для проверки валидности карты - это как ключик от замка под коврик прятать :)
Понял, спасибо. Теперь я спокоен.
Это будет задание для игры, поэтому такой уровень безопасности меня вполне устроит.
Я извиняюсь, проблему решил сегодня с утра. Я вызвал два (PICC_IsNewCardPresent(), PICC_RequestA()) из трех предложенных методов перед чтением карты. Думал что везде результат одинаковый будет. Сегодня с утра попробовал вызвать PICC_WakeupA() перед чтением - и все заработало. То есть надо делать так:
Тогда начинается постоянное считывание.
Спасибо большое, решал подобную задачу.