MFRC522 работает только иногда

 /*
* -------------------------------------------------- -------------------------------------------------- -----------------
* Пример эскиза/программы, показывающий, как считывать данные из PICC в последовательный порт.
* -------------------------------------------------- -------------------------------------------------- -----------------
* Это пример библиотеки MFRC522; дополнительную информацию и другие примеры см.: https://github.com/miguelbalboa/rfid.
*
* Пример эскиза/программы, показывающий, как считывать данные с PICC (то есть: RFID-метки или карты) с использованием RFID на основе MFRC522.
* Ридер на интерфейсе Arduino SPI.
*
* Когда Arduino и модуль MFRC522 подключены (см. расположение контактов ниже), загрузите этот скетч в Arduino IDE.
* затем проверьте/скомпилируйте и загрузите его. Чтобы увидеть результат: используйте «Инструменты», «Последовательный монитор» IDE (нажмите Ctrl+Shft+M). Когда
* вы подносите PICC (то есть: RFID-метку или карту) на расстоянии считывания считывателя/PCD MFRC522, последовательного выхода
* покажет ID/UID, тип и любые блоки данных, которые он может прочитать. Примечание. Вы можете увидеть сообщения «Тайм-аут связи»
* при слишком раннем удалении PICC с расстояния считывания.
*
* Если ваш ридер поддерживает это, этот эскиз/программа будет читать все представленные PICC (то есть: чтение нескольких тегов).
* Таким образом, если вы поставите две или более PICC друг на друга и представите их читателю, он сначала выведет все
* подробности первого, а затем следующего PICC. Обратите внимание, что это может занять некоторое время, поскольку все блоки данных будут удалены, поэтому
* держите PICC на расстоянии считывания до завершения.
*
* @license выпущен в общественное достояние.
*
* Типичное расположение контактов:
 * -----------------------------------------------------------------------------------------
 *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
 *             Reader/PCD   Uno           Mega      Nano v3    Leonardo/Micro   Pro Micro
 * Signal      Pin          Pin           Pin       Pin        Pin              Pin
 * -----------------------------------------------------------------------------------------
 * RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST
 * SPI SS      SDA(SS)      10            53        D10        10               10
 * SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16
 * SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14
 * SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15
 */

#include <SPI.h>
#include <MFRC522.h>

#define RST_PIN         9          // Настраивается, см. типичное расположение контактов выше
#define SS_PIN          10       // Настраивается, см. типичное расположение контактов выше

MFRC522 MFRC522(SS_PIN, RST_PIN);  // Создаём экземпляр MFRC522

void setup() {
    Serial.begin(9600);     // Инициализируем последовательную связь с ПК
    while (!Serial);        // Ничего не делать, если последовательный порт не открыт (добавлено для Arduino на базе ATMEGA32U4)
    SPI.begin();            // Инициализация шины SPI
    MFRC522.PCD_Init();     // Инициализируем MFRC522
    MFRC522.PCD_DumpVersionToSerial();  // Показать подробную информацию о PCD - сведения о устройстве чтения карт MFRC522
    Serial.println(F("Scan PICC to see UID, type, and data blocks..."));
  Serial.print("...");
}

void loop() {
    // Ищем новые карты
    if ( ! MFRC522.PICC_IsNewCardPresent()) {
    Serial.print("IsNewCardPresent");
        return;
    }

    // Выбираем одну из карт
    if ( ! MFRC522.PICC_ReadCardSerial()) {
    Serial.print("ReadCardSerial");
        return;
    }

    // Дамп отладочной информации о карте; PICC_HaltA() вызывается автоматически
    MFRC522.PICC_DumpToSerial(&(MFRC522.uid));
}

Недавно я приобрел RFID-модуль RC522 для своего Arduino UNO. Я все подключил, запустил IDE, скачал нужную библиотеку и запустил пример программы DumpInfo. При первом запуске все прошло хорошо, и когда я вставил карту, я получил правильный дамп данных.

Однако сегодня я запустил его, все сбросил, запустил новую программу для очистки Arduino, перезагрузил компьютер, и он все равно не работал. В последовательном мониторе пишет, что все в порядке, никаких сообщений об ошибках или чего-то еще. Но когда я кладу перед ним карту, абсолютно ничего не происходит.

Любая помощь будет полезна!

, 👍4

Обсуждение

Ослабленное соединение?, @Majenko

Определенно нет, я убедился, что все они хорошо связаны, и это привело бы к ошибке в Мониторе, если бы кто-то не общался., @Devon Freeland

Вы видите номер прошивки и тд при запуске скетча?, @SoreDakeNoKoto

Да. Там написано Версия прошивки: 0x92 = v2.0 Сканируйте PICC, чтобы увидеть UID, тип и блоки данных..., @Devon Freeland

И вы вообще не внесли никаких изменений в свой код с тех пор, как в последний раз получали результаты? Вы используете ту же карту, что и раньше? Также проводить/размахивать им в пределах 5 см от RC522?, @SoreDakeNoKoto

Никаких изменений в коде нет. Я использую те же карты и нахожусь в пределах 5 см от считывателя., @Devon Freeland

Должен ли я вместо этого попробовать использовать соединения ICSP?, @Devon Freeland

Вы можете попробовать, хотя это странно. Судя по всему, установлена двусторонняя связь, так как вы можете прочитать версию. Кроме того, этот код уже работал у вас раньше (не один раз?). Возможно, вам следует попробовать подключить его к какому-то другому источнику. Также попробуйте поместить операторы Serial.print в каждый блок IF в цикле(), чтобы увидеть, являются ли эти условия ответственными., @SoreDakeNoKoto

Я попытался добавить строки Serial.print, и он просто рассылает последовательный монитор с помощью isnewcardpresent, что означает, что он проходит через этот цикл. Я пытался провести карту впереди во время, но она не вышла из цикла., @Devon Freeland

На самом деле у меня нет возможности подключить его из какого-либо другого места, и я не уверен, к чему вы это клонили., @Devon Freeland

запустил новую программу для очистки Arduino - можете ли вы объяснить это?, @Nick Gammon

Просто нажмите новую кнопку в IDE и запустите ее, пока она подключена к Arduino, чтобы очистить ее., @Devon Freeland

Итак, я считаю, что это некая форма состояния, в которую входит RFID-модуль, когда я выключаю свой компьютер. Как мне перезагрузить модуль?, @Devon Freeland

«Просто нажал новую кнопку в IDE и запустил ее, пока она была подключена к Arduino, чтобы очистить ее». - и после этого вы загрузили другую программу? RFID-то? Я не вижу смысла загружать другой код «чтобы его очистить». С таким же успехом вы можете вставить DVD со «Звездными войнами» в свой DVD-плеер, «чтобы очистить его», прежде чем смотреть что-то совсем другое., @Nick Gammon

Да, после этого я загрузил другую программу. Спасибо за язвительное замечание. Нет, проблема не в программировании, а в том, что модуль не сбрасывается правильно после перезагрузки компьютера или перехода в спящий режим. Так как питание модуля отключается, а потом восстанавливается. Я знаю, что дело не в программе, потому что мне обратно от модуля приходит версия прошивки., @Devon Freeland


3 ответа


1

Проверьте источник питания. Я видел так много странных результатов от непостоянных/недопитанных цепей. Это стоит посмотреть.

Как выглядит ваша схема? Вы питаете RFID-считыватель от Arduino или от собственного источника? Заземления соединены?

,

Я подключаю его от Arduino, и он получает достаточно энергии, поскольку отправляет и получает данные. Территория в порядке., @Devon Freeland


1

Если я прав, то контакты модуля вы припаяли сами, и я рекомендую вам отпаять контакты и припаять их заново.

Я также использовал RFID-модуль RC522 с Arduino и столкнулся с такой же проблемой с модулем. Мне этот способ помог.

,

1

Первое, что вы можете попробовать, это увеличить скорость передачи данных до 115200 бод. Я использую другую библиотеку, и в auth_read_write.ino нарисуйте Serial.begin()< В комментариях /code> говорится: «Читайте как можно быстрее. Существует ограничение на то, как долго нам разрешено читать теги».

Если изменение скорости передачи данных не помогло, прочтите ответ: RFID-RC522 не работает, горит красный светодиод. Там есть ссылка на другую библиотеку, которая мне помогла.

,