написал программу доступа по rfid на ардуино нано, но программа виснет, причем по разному, бывает чуть поработает, бывает нажмешь кнопку для выхода и карты больше не считывет но при этом кнопка остается работать, проблема заключается как раз таки в том что перестает считывать карты доступа, как записанные так и те которые не прописаны. `// карта - 02 187 203 27
// брелок - 133 193 216 101
// КАРТА - 242 166 122 26
#include <SPI.h>
#include <MFRC522.h>
const int SS_PIN = 10; // SS вывод модуля RC522
const int RST_PIN = 9; // RST вывод модуля RC522
const int BUZZER = 2; //Пин для Пищалки
const int LED_R = 3; //Пин для Красного цвета
const int LED_G = 4; //Пин для Зелёного цвета
const int LED_B = 5; //Пин для Голубого цвета
const int LOCK = 6; // подключаем электрозамок
const int buttonPin = 7;
char* keys={“133 193 216 101”,“148 159 247 173”}; // ,“242 166 122 26”,“02 187 203 27”
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
void setup()
{
Serial.begin(9600); // Initiate a serial communication
SPI.begin(); // Initiate SPI bus
mfrc522.PCD_Init(); // Initiate MFRC522
pinMode(LED_G, OUTPUT); //объявляем пин как выход.
pinMode(LED_R, OUTPUT); //объявляем пин как выход.
pinMode(LED_B, OUTPUT); //объявляем пин как выход.
pinMode(BUZZER, OUTPUT); //объявляем пин как выход.
pinMode(LOCK, OUTPUT); //объявляем пин как выход.
pinMode(buttonPin, INPUT_PULLUP);
noTone(BUZZER);
digitalWrite(LOCK, HIGH); //Выключаем замок
Serial.println(“Поднесите карту к считывателю”);
}
void loop()
{
if ( ! mfrc522.PICC_IsNewCardPresent()){
if(!digitalRead(buttonPin)==1){
Serial.println(“выходите”);
digitalWrite(LOCK, LOW);
delay(500);
digitalWrite(LOCK, HIGH);
return;
}
}
if ( ! mfrc522.PICC_ReadCardSerial()){
return;
}
Serial.print(“UID:”);
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], DEC);
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0” : " "));
content.concat(String(mfrc522.uid.uidByte[i], DEC));
}
Serial.println();
content.toUpperCase();
int x=1;
for (int i = 0; i < sizeof(keys) / sizeof(char *); i++){
if (content.substring(1) == keys[i]){
Serial.println(“Доступ разрешён”);
digitalWrite(LOCK, LOW); // Включаем Замок
digitalWrite(LED_G, HIGH); // Зажигаем Зелёный светодиод
digitalWrite(LED_R, LOW);
digitalWrite(LED_B, LOW);
delay(3000);
digitalWrite(LED_G, LOW); // Гасим Зелёный светодиод
digitalWrite(LOCK, HIGH); // Выключаем Замок
return;
}
else x=0;
}
if(x==0){
Serial.println(“Доступ запрещён”);
digitalWrite(LED_R, HIGH);
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, LOW);
tone(BUZZER, 100);
delay(500);
digitalWrite(LED_R, LOW);
} noTone(BUZZER);
}
`