venerdì 1 febbraio 2013

Serratura a combinazione


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);  } 

}

3 commenti:

  1. ho poco da commentare non funziona

    RispondiElimina
  2. Avrò comesso qualche errore nel copia/incolla.
    Appena ho un attimo di tempo controllo.

    RispondiElimina
  3. PS. Se hai due pulsanti già forniti di antirimbalzo il listato viene smagrito del 90% e ti sarà facile ricostruirlo.

    RispondiElimina