Отчет по учебной практике



бет10/11
Дата14.04.2023
өлшемі1,94 Mb.
#174480
түріОтчет
1   2   3   4   5   6   7   8   9   10   11
Байланысты:
Байзахан 2215 Магнитные карточки

Программа
Для работы с модулем RC522 можно использовать либо стандартную библиотеку, либо библиотеку MFRC522, написанную специально под данный модуль.
Давайте попробуем прочитать информацию с карты. Воспользуемся для этого скетчем DumpInfo из библиотеки RC522.
#include
#include
// Константы подключения контактов RST и SS
#define RST_PIN 9
#define SS_PIN 10
MFRC522 mfrc522(SS_PIN, RST_PIN);
void setup() {
Serial.begin(9600); // Инициализация монитора последовательного порта
while (!Serial); // Ожидание включения монитора последовательного порта
SPI.begin(); // Инициализация SPI шины
mfrc522.PCD_Init(); // Инициализация RC522
ShowReaderDetails(); // Вывод данных о модуле RC522
Serial.println(F("Scan PICC to see UID, type, and data blocks..."));
}

void loop() {


// Поиск новой метки
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}

// Выбор метки


if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
// Вывод данных с карты
mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}

void ShowReaderDetails() {


// Получение номера программной версии модуля RC522
byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg);
Serial.print(F("MFRC522 Software Version: 0x"));
Serial.print(v, HEX);
if (v == 0x91)
Serial.print(F(" = v1.0"));
else if (v == 0x92)
Serial.print(F(" = v2.0"));
else
Serial.print(F(" (unknown)"));
Serial.println("");
// Когда получено 0x00 или 0xFF, передача данных нарушена
if ((v == 0x00) || (v == 0xFF)) {
Serial.println(F("WARNING: Communication failure, is the MFRC522 properly connected?"));
}
}
Заливаем данный скетч из библиотеки на Ардуино, запускаем монитор последовательного порта и подносим к модулю RFID-метку (например, карту). В результате мы должны увидеть на мониторе следующее (Рисунок 15):

Рисунок 15. Результат программы
(https://robotclass.ru/tutorials/arduino-rfid-rc522/?ysclid=lg2bi1h7g6337710388)
Нас интересует Card UID — уникальный идентификационный номер метки. Напишем свою простейшую программу, используя стандартную библиотеку, которая определяет — является карта пропуском или нет. Возьмём две или более метки. ID одной из них будет кодом доступа, на другие метки должно выводиться сообщение «Wrong ID!» и гореть красный сигнал от светодиода.
#include
#include

// Константы подключения контактов RST и SS


#define SS_PIN 10
#define RST_PIN 9
RFID rfid(SS_PIN, RST_PIN);
int serNum[5];

// Подключение к контактам rgb-светодиода


const byte rPin = 6;
const byte gPin = 5;
const byte bPin = 3;
void setup()
{
Serial.begin(9600); // Инициализация монитора
SPI.begin(); // Инициализация SPI шины
rfid.init(); // Инициализация RC522

pinMode( rPin, OUTPUT );


pinMode( gPin, OUTPUT );
pinMode( bPin, OUTPUT );
}
void loop()
{
// Если обнаружена метка
if (rfid.isCard()) {
// Считываем данные
if (rfid.readCardSerial()) {
// Проверка данных
if ((rfid.serNum[0] == 0xE1)&&(rfid.serNum[1] == 0x54)&&(rfid.serNum[2] == 0x5A)&&(rfid.serNum[3] == 0x2D)&&(rfid.serNum[4] == 0xC2))
{
// Если ID карты совпал, вывести надпись "Access granted!", ID карты и подать зелёный сигнал на светодиод
Serial.println("Access granted!");
Serial.println("Card number:");
Serial.print(rfid.serNum[0],HEX);
Serial.print(" ");
Serial.print(rfid.serNum[1],HEX);
Serial.print(" ");
Serial.print(rfid.serNum[2],HEX);
Serial.print(" ");
Serial.print(rfid.serNum[3],HEX);
Serial.print(" ");
Serial.print(rfid.serNum[4],HEX);
Serial.println(" ");

digitalWrite( rPin, LOW );


digitalWrite( bPin, LOW );
digitalWrite( gPin, HIGH );
}
else
{
// Если ID карты не верен, вывести "Wrong ID!", ID карты и подать красный сигнал на светодиод
Serial.println("Wrong ID!");
Serial.println("Card number:");
Serial.print(rfid.serNum[0],HEX);
Serial.print(" ");
Serial.print(rfid.serNum[1],HEX);
Serial.print(" ");
Serial.print(rfid.serNum[2],HEX);
Serial.print(" ");
Serial.print(rfid.serNum[3],HEX);
Serial.print(" ");
Serial.print(rfid.serNum[4],HEX);
Serial.println(" ");

digitalWrite( bPin, LOW );


digitalWrite( gPin, LOW );
digitalWrite( rPin, HIGH );
}

delay(1000);


digitalWrite( bPin, LOW );
digitalWrite( gPin, LOW );
digitalWrite( rPin, LOW );
}
}
rfid.halt();
}
Результат работы нашей программы (Рисунок 16):

Рисунок 16. Результат работы
(https://robotclass.ru/tutorials/arduino-rfid-rc522/?ysclid=lg2bi1h7g6337710388)



Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   10   11




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет