RFID-RC522 не работает с клоном Arduino Uno

Я использую эту библиотеку https://github.com/miguelbalboa/rfid и использую DumpInfo.ino. оттуда:

/*
 * --------------------------------------------------------------------------------------------------------------------
 * Example sketch/program showing how to read data from a PICC to serial.
 * --------------------------------------------------------------------------------------------------------------------
 * This is a MFRC522 library example; for further details and other examples see: https://github.com/miguelbalboa/rfid
 * 
 * Example sketch/program showing how to read data from a PICC (that is: a RFID Tag or Card) using a MFRC522 based RFID
 * Reader on the Arduino SPI interface.
 * 
 * When the Arduino and the MFRC522 module are connected (see the pin layout below), load this sketch into Arduino IDE
 * then verify/compile and upload it. To see the output: use Tools, Serial Monitor of the IDE (hit Ctrl+Shft+M). When
 * you present a PICC (that is: a RFID Tag or Card) at reading distance of the MFRC522 Reader/PCD, the serial output
 * will show the ID/UID, type and any data blocks it can read. Note: you may see "Timeout in communication" messages
 * when removing the PICC from reading distance too early.
 * 
 * If your reader supports it, this sketch/program will read all the PICCs presented (that is: multiple tag reading).
 * So if you stack two or more PICCs on top of each other and present them to the reader, it will first output all
 * details of the first and then the next PICC. Note that this may take some time as all data blocks are dumped, so
 * keep the PICCs at reading distance until complete.
 * 
 * @license Released into the public domain.
 * 
 * Typical pin layout used:
 * -----------------------------------------------------------------------------------------
 *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
 *             Reader/PCD   Uno/101       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, SAK, type, and data blocks..."));
}

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

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

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

Когда я все правильно подключаю и загружаю этот скетч, в моем последовательном мониторе отображается следующее: ">

Я попробовал это с другим дешевым Arduino Uno, я подключил его точно так же и отсканировал одну карту, все работает отлично: последовательный монитор работающий RFID

Поэтому я предполагаю, что модуль RC522 работает нормально, и, вероятно, есть проблема с этой платой Arduino Uno.

Что я пробовал дальше, но безуспешно:

  • Скопируйте загрузчик с работающей Arduino Uno на неработающую Arduino Uno.
  • Переключите ATMEGA328P с работающего Arduino Uno на этот Arduino Uno, который не работает.

Я протестировал все контакты (на плате, которые не работают) на функциональность ШИМ и цифрового выхода с помощью Firmata Test, и в этом тесте все нормально.

Вы можете посмотреть изображения этой платы Arduino Uno здесь.

Итак, мой вопрос: что-то не так с самой платой или я что-то делаю не так?

Спасибо!

, 👍-1

Обсуждение

уменьшите свой скетч до минимального кода, необходимого для демонстрации сбоя, и опубликуйте скетч, @jsotola

@jsotola Я опубликовал код, который использую. Я думаю, что я не могу уменьшить его, его пример кода из библиотеки RC522. Что меня больше всего смущает, так это то, почему код не работает на этом Arduino Uno, но прекрасно работает на другом очень идентичном Arduino Uno., @fireover

спасибо за включение кода .... на самом деле, вы можете уменьшить код .... удалить все в блоке loop () .... сбой уже существует в setup () ........... .. перепроверьте проводку ...... если вы используете макетную плату, перестройте схему на другой части макетной платы, @jsotola

@jsotola Я уменьшил код, как вы говорите, и проверил проводку (я использую прямое соединение от модуля к считывателю с помощью кабеля «мама-папа»), результаты все те же., @fireover


1 ответ


0

Попробуйте использовать этот код:

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


#define SS_PIN 10
#define RST_PIN 9

#define SERVO_PIN 3
Servo myservo;

#define ACCESS_DELAY 2000
#define DENIED_DELAY 1000
MFRC522 mfrc522(SS_PIN, RST_PIN);   // Создать экземпляр MFRC522.

void setup() 
{
  Serial.begin(9600);   // Инициируем последовательную связь
  SPI.begin();          // Инициируем шину SPI
  mfrc522.PCD_Init();   // Инициировать MFRC522

  myservo.attach(SERVO_PIN);
  myservo.write( 70 );
  delay(7500);
  myservo.write( 0 );
  Serial.println("Put your card to the reader...");
  Serial.println();

}
void loop() 
{
  // Ищем новые карты
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return;
  }
  // Выбираем одну из карт
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  // Показать UID на последовательном мониторе
  Serial.print("UID tag :");
  String content= "";
  byte letter;
  for (byte i = 0; i < mfrc522.uid.size; i++) 
  {
     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte[i], HEX);
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  Serial.println();
  Serial.print("Message : ");
  content.toUpperCase();
  if (content.substring(1) == "69 C8 E2 2A") // меняем здесь UID карты
  {
    Serial.println("Authorized access");
    Serial.println();
   myservo.write( 70 );
 delay(7500);
  myservo.write( 0 );

  }

 else   {
    Serial.println(" Access denied");


    delay(DENIED_DELAY);


  }
}
,