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); } }
ho poco da commentare non funziona
RispondiEliminaAvrò comesso qualche errore nel copia/incolla.
RispondiEliminaAppena ho un attimo di tempo controllo.
PS. Se hai due pulsanti già forniti di antirimbalzo il listato viene smagrito del 90% e ti sarà facile ricostruirlo.
RispondiElimina