Lettore tag rfid rc522
Salve a tutti. Sono a chiedere il vostro aiuto dopo numerosissimi tentativi andati a vuoto dal momento che la mia conoscenza di programmazione arriva fino ad un certo punto. Ho acquistato un lettore tag rfid rc522 che mi è arrivato assieme a due tag. Girovagando in rete ho trovato un programma di controllo accessi che ho installato e caricato nella mia scheda arduino, che funziona regolarmente e che allego a seguire:
Il programma in questione controlla gli id dei due tag nella stringa:String users[] = (letti con un altro software solo per la lettura del codice) e fa accendere un led verde se il tag è riconosciuto nella stringa e un rosso se non lo è.
Il mio problema è quello di riuscire a far accendere un secondo led verde passando il secondo tag corretto.
Cerco di spiegarmi meglio: nella stringa di riconoscimento non vorrei mettere i tag tutti assieme ma ognuno in una stringa che mi fa accendere un led separato relativamente ad ogni tag letto correttamente. Ovviamente il led rosso dovrebbe rimanere sempre solo uno per l'allarme di tag non riconosciuto come è già adesso.
Credo che dovremmo avere un uid per ogni tag letto; ho provato in tutti i modi ma senza risultato. Se qualcuno riuscisse a darmi una base di lavoro potrei provare ad arrivarci da solo. Grazie infinite a chi vorrà darmi un aiuto.
- Codice: Seleziona tutto
#include <MFRC522.h>
#define GREEN_LED_PIN 3
#define RED_LED_PIN 2
MFRC522 rfid(10, 9);
String users[] = {"232f1892","d34a22ac"};
int usersSize = sizeof(users)/sizeof(String);
void setup(){
SPI.begin();
rfid.PCD_Init();
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(RED_LED_PIN, OUTPUT);
}
void loop(){
if(rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()){
String uid = getUID();
if(checkUID(uid)){
blinkLed(GREEN_LED_PIN, 2000, 1);
}else{
blinkLed(RED_LED_PIN, 400, 2);
}
}
delay(10);
}
String getUID(){
String uid = "";
for(int i = 0; i < rfid.uid.size; i++){
uid += rfid.uid.uidByte[i] < 0x10 ? "0" : "";
uid += String(rfid.uid.uidByte[i], HEX);
}
rfid.PICC_HaltA();
return uid;
}
bool checkUID(String uid){
for(int i = 0; i < usersSize; i++){
if(users[i] == uid){
return true;
}
}
return false;
}
void blinkLed(int led, int duration, int repeat){
for(int i = 0; i < repeat; i++){
digitalWrite(led, HIGH);
delay(1000/2);
digitalWrite(led, LOW);
delay(1000/2);
}
}
Il programma in questione controlla gli id dei due tag nella stringa:String users[] = (letti con un altro software solo per la lettura del codice) e fa accendere un led verde se il tag è riconosciuto nella stringa e un rosso se non lo è.
Il mio problema è quello di riuscire a far accendere un secondo led verde passando il secondo tag corretto.
Cerco di spiegarmi meglio: nella stringa di riconoscimento non vorrei mettere i tag tutti assieme ma ognuno in una stringa che mi fa accendere un led separato relativamente ad ogni tag letto correttamente. Ovviamente il led rosso dovrebbe rimanere sempre solo uno per l'allarme di tag non riconosciuto come è già adesso.
Credo che dovremmo avere un uid per ogni tag letto; ho provato in tutti i modi ma senza risultato. Se qualcuno riuscisse a darmi una base di lavoro potrei provare ad arrivarci da solo. Grazie infinite a chi vorrà darmi un aiuto.