La serratura è composta da 12 pulsanti (non tastiera a matrice) normalmente aperti, un led che seganal l'avvenuta pressione del tasto ed un relè di uscita.
Si scelgono a caso tre pulsanti, ad esempio il n. 2, il n,5 ed il n.6 e si collegano rispettivamente al pin 2, 3 e 4 di Arduino.
Nello sketch che segue è previsto che per pilotare il relè si prema:
5 volte il pulsante n.2; 7 volte il pulsante n.5 e 3 volte il pulsante n.6 per concludere l'operazione premendo una volta il pulsante OK.Se si ritiene di aver sbagliato si premeil tasto CANC e si ricomincia.
I rimante pulsanti sono tutti in parallelo fra loro e l'incremento della variabile ad essi associato impedisce il pilotaggio dei relè.
Non è previsto che premendo per tre o quattro volte il tasto CANC scatti l'allarme ma è possibie inserire delle istruzioni ad hoc.
# define TASTO1 2
# define TASTO2 3
# define TASTO3 4
# define TASTOW 5
# define TASTOK 6
# define TASTOZ 7
# define LED1 13
# define RELE 8
int Value100 = 0;
int Value200 = 0;
int Value300 =0;
int ValueK = 0;
int ValueW = 0;
int ValueZ = 0;
long Tempo1 = 0;
long Tempo2 = 50;
int ValueComb1 = 5;
int ValueComb2 = 7;
int ValueComb3 = 3;
int ValueCombW = 1;
int ValueCombZ = 0;
void setup()
{ pinMode(TASTO1,INPUT );
pinMode(TASTO2,INPUT );
pinMode(TASTO3,INPUT );
pinMode(TASTOW,INPUT );
pinMode(TASTOK,INPUT );
pinMode(TASTOZ,INPUT );
pinMode(LED1, OUTPUT);
pinMode(RELE, OUTPUT);
Serial.begin(9600); }
void loop() {
//********** TASTO K (Cancella) *****************
int StatoTastoK;
int StatoTastoKa = LOW;
int valoreTastoK = digitalRead(TASTOK);
//-------- ANTIRIMBALZO-----------
if (valoreTastoK != StatoTastoKa)
{Tempo1 = millis();}
if ((millis() - Tempo1) > Tempo2)
{StatoTastoK = valoreTastoK;}
//--------INIZIO ESECUZIONE ------------
if (valoreTastoK == HIGH)
{digitalWrite(LED1, HIGH);
delay (75);
digitalWrite(LED1, LOW);
ValueK = (ValueK + 1);
Value100 = 0;
Value200 = 0;
Value300 = 0;
ValueW = 0;
ValueZ = 0;
Serial.print("CANCELLATO");
Serial.println(ValueK);
delay (350); }
//----------FINE ESECUZIONE--------
StatoTastoKa = valoreTastoK;
//********* FINE SOTTOPROGRAMMA TASTO k (CANCELLA) **************
//********** TASTOZ (Civetta) *****************
int StatoTastoZ;
int StatoTastoZa = LOW;
int valoreTastoZ = digitalRead(TASTOZ);
//-------- ANTIRIMBALZO-----------
if (valoreTastoZ != StatoTastoZa)
{Tempo1 = millis();}
if ((millis() - Tempo1) > Tempo2)
{StatoTastoZ = valoreTastoZ;}
//--------INIZIO ESECUZIONE ------------
if (valoreTastoZ == HIGH)
{digitalWrite(LED1, HIGH);
delay (75);
digitalWrite(LED1, LOW);
ValueZ = (ValueZ + 1);
Serial.print("CIVETTA");
Serial.println(ValueZ);
delay (350); }
//--------------------FINE ESECUZIONE--------
StatoTastoZa = valoreTastoZ;
//********** TASTO 1 *****************
int StatoTasto1;
int StatoTasto1a = LOW;
int valoreTasto1 = digitalRead(TASTO1);
//-------- ANTIRIMBALZO-----------
if (valoreTasto1 != StatoTasto1a)
{Tempo1 = millis();}
if ((millis() - Tempo1) > Tempo2)
{StatoTasto1 = valoreTasto1;}
//--------INIZIO ESECUZIONE ------------
if (valoreTasto1 == HIGH)
{ digitalWrite(LED1, HIGH);
delay (75);
digitalWrite(LED1, LOW);
Value100 = (Value100 + 1);
Serial.print("1a cifra ");
Serial.println(Value100);
delay (350); }
//--------------------FINE ESECUZIONE--------
StatoTasto1a = valoreTasto1;
//********* FINE SOTTOPROGRAMMA TASTO 1 **************
//********** TASTO 2 *****************
int StatoTasto2;
int StatoTasto2a = LOW;
int valoreTasto2 = digitalRead(TASTO2);
//-------- ANTIRIMBALZO-----------
if (valoreTasto2 != StatoTasto2a)
{Tempo1 = millis();}
if ((millis() - Tempo1) > Tempo2)
{StatoTasto2 = valoreTasto2;}
//--------INIZIO ESECUZIONE ------------
if (valoreTasto2 == HIGH)
{ digitalWrite(LED1, HIGH);
delay (75);
digitalWrite(LED1, LOW);
Value200 = (Value200 + 1);
Serial.print("2a cifra ");
Serial.println(Value200);
delay (350); }
//----------FINE ESECUZIONE--------
StatoTasto2a = valoreTasto2;
//********* FINE SOTTOPROGRAMMA TASTO 2 **************
//********** TASTO 3 *****************
int StatoTasto3;
int StatoTasto3a = LOW;
int valoreTasto3 = digitalRead(TASTO3);
//-------- ANTIRIMBALZO-----------
if (valoreTasto3 != StatoTasto3a)
{Tempo1 = millis();}
if ((millis() - Tempo1) > Tempo2)
{StatoTasto3 = valoreTasto3;}
//--------INIZIO ESECUZIONE ------------
if (valoreTasto3 == HIGH)
{digitalWrite(LED1, HIGH);
delay (75);
digitalWrite(LED1, LOW);
Value300 = (Value300 + 1);
Serial.print("3a cifra ");
Serial.println(Value300);
delay (350); }
//----------FINE ESECUZIONE--------
StatoTasto3a = valoreTasto3;
//********* FINE SOTTOPROGRAMMA TASTO 3 **************
//********** TASTO W (Apri) *****************
int StatoTastoW;
int StatoTastoWa = LOW;
int valoreTastoW = digitalRead(TASTOW);
//-------- ANTIRIMBALZO-----------
if (valoreTastoW != StatoTastoWa)
{Tempo1 = millis();}
if ((millis() - Tempo1) > Tempo2)
{StatoTastoW = valoreTastoW;}
//--------INIZIO ESECUZIONE ------------
if (valoreTastoW == HIGH)
{digitalWrite(LED1, HIGH);
delay (75);
digitalWrite(LED1, LOW);
ValueW = (ValueW + 1);
Serial.print("APRI ");
Serial.println(ValueW);
delay (350); }
//----------FINE ESECUZIONE--------
StatoTastoWa = valoreTastoW;
//********* FINE SOTTOPROGRAMMA TASTO W (Apri) **************
//*************** SOTTOPROGRAMMA COMBINAZIONE*************
if (Value100 == ValueComb1 && Value200 == ValueComb2 && Value300 ==
ValueComb3 && ValueZ == ValueCombZ && ValueW == ValueCombW)
{ digitalWrite(RELE, HIGH);
//delay (350);
//digitalWrite(RELE, LOW);
Serial.print("PORTA APERTA ");
Serial.println(ValueW);
delay (350); }
else {delay (350); }
}