Ciao a tutti.
Ho recuperato da internet e modificato uno sketch Arduino per poter creare un'interruttore RFID con un display LCD per la visualizzazione dei vari messaggi.
Sono riuscito a modificarlo per attivare e disattivare un pin (chiamato Rel, pin 8) sempre con la stessa tessera.
Ho aggiunto i comandi per stampare le informazioni sul display LCD, però c'è un problema :
Al primo passaggio tutto ok, si attiva il pin e vengono scritti i messaggi sul display. Al secondo passaggio, dato che deve essere disattivato il pin, viene ripetuto lo sketch, però il problema è che viene anche stampato sempre lo stesso messaggio sul display...
Faccio un piccolo esempio:
-passo la tessera-
Pin 8 attivo
Display: "Pin attivo"
-passo nuovamente la tessera-
Pin 8 disattivato
Display: "Pin disattivato"
Questo è quello che, in sintesi, dovrebbe fare, però in realtà fa:
-passo la tessera-
Pin 8 attivo
Display: "Pin attivo"
-passo nuovamente la tessera-
Pin 8 disattivato
Display: "Pin attivo"
L'errore sta nelle istruzioni che stampa sul display. Come posso risolvere? Grazie in anticipo.
Ecco lo sketch:
#include <LiquidCrystal.h>
/*
Questo programma permette effettuare la lettura di una tessera magnetica e stabilire se quest'ultima
è stata autorizzata.
PINOUT:
RC522 MODULE Uno/Nano
SDA D10
SCK D13
MOSI D11
MISO D12
IRQ N/A
GND GND
RST D9
3.3V 3.3V
*/
int Rel = 8;
#include <SPI.h>
#include <RFID.h>
/* Vengono definiti PIN del RFID reader*/
#define SDA_DIO 10 // 53 per Mega
#define RESET_DIO 9
#define delayRead 1000 // Time of delay
#define delayLed 2000
/* Viene creata una istanza della RFID libreria */
RFID RC522(SDA_DIO, RESET_DIO);
String codiceAutorizzato = "9692D94895";
const int rs = 7, en = 6, d4 =5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
unsigned char i;
boolean pinState;
void setup()
{
Serial.begin(9600);
/* Abilita SPI*/
SPI.begin();
/* Viene inizilizzato RFID reader */
RC522.init();
Serial.println("Setup");
pinMode(Rel, OUTPUT);
digitalWrite(Rel, LOW);
pinState = digitalRead(Rel);
lcd.begin(20, 4);
lcd.setCursor(5, 0);
lcd.print("Stato: ON");
lcd.setCursor(0, 1);
lcd.print("Allarme: ON");
lcd.setCursor(0, 3);
lcd.print("Serrature: Bloccate");
}
void loop()
{
/* Temporary loop counter */
byte i;
// Se viene letta una tessera
if (RC522.isCard())
{
// Viene letto il suo codice
RC522.readCardSerial();
String codiceLetto ="";
Serial.println("Codice delle tessera letto:");
// Viene caricato il codice della tessera, all'interno di una Stringa
for(i = 0; i <= 4; i++)
{
codiceLetto+= String (RC522.serNum[i],HEX);
codiceLetto.toUpperCase();
}
Serial.println(codiceLetto);
if(verificaCodice(codiceLetto)){
Serial.println("Tessera autorizzata");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("#######RFID########");
lcd.setCursor(0, 1);
lcd.print("Chiave Riconosciuta");
lcd.setCursor(0, 2);
lcd.print("Allarme: Disattivata");
lcd.setCursor(0, 3);
lcd.print("Serrature: Sbloccate");
delay(4000);
lcd.clear();
lcd.setCursor(3, 0);
lcd.print( "...Attivo...");
lcd.setCursor(0, 1);
lcd.print("Wait...");
delay(2000);
digitalWrite(Rel, !digitalRead(Rel));
pinState = digitalRead(Rel);
delay(1000);
lcd.clear();
lcd.print("#######RFID########");
lcd.setCursor(0, 1);
lcd.print("Chiave Riconosciuta");
lcd.setCursor(0, 2);
lcd.print("Allarme: Disattivata");
lcd.setCursor(0, 3);
lcd.print("Serrature: Sbloccate");
}else{
Serial.println("Tessera non autorizzata");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("########RFID########");
lcd.setCursor(0, 1);
lcd.print("Chiave errata");
lcd.setCursor(0, 2);
lcd.print("######BLOCCATO######");
}
delay(delayRead);
}
}
// Questa funzione verifica se il codice Letto è autorizzato
boolean verificaCodice(String codiceLetto){
if(codiceLetto.equals(codiceAutorizzato)){
return true;
}else{
return false;
}
}
Grazie in anticipo per gli aiuti