lunedì 3 dicembre 2012

Serratura a codice


     /*
 Il led si accende dopo aver premuto i tasti
 5 - 7 - 3- A nella giusta sequenza
 Il tasto C resetta le variabili.

     KEYPAD R0  R1   R2   R3  C0  C1  C2  C3
     ARDUINO 8   7    6    5   12  11  10  9
     */
     #include <Keypad.h>

     # define LED1 3
      
     const byte RIGHE    = 4; 
     const byte COLONNE  = 4; 
     
     int valore1 = 0;
     int valore2 = 0;
     int valore3 = 0;
     int valoreA = 0;
     int valoreC = 0;
     int Combi1  = 5;
     int Combi2  = 7;
     int Combi3  = 3;
     int CombiA  = 1;
     int CombiC  = 1; 
     
     char Tasti[RIGHE][COLONNE] =
       {{'1','2','3','C'},
        {'4','5','6','D'},
        {'7','8','9','E'},
        {'A','0','B','F'}};
      
     byte righe[RIGHE] = {8, 7, 6, 5}; 
     byte colonne[COLONNE] = {12, 11, 10, 9}; 

     // Creazione della tastiera
     Keypad cKeypad = Keypad( makeKeymap(Tasti),
                 righe, colonne, RIGHE, COLONNE); 

     void setup() 
      { pinMode     (LED1, OUTPUT);
        Serial.begin(9600);         }
  
   void loop(){
        char Key = cKeypad.getKey();
        if (Key)
         {Serial.println(Key);}
        
         if (Key)
 // per i numeri dopo il case vedi tavola ASCII          
            {   switch (Key)
              { case 53: 
                   valore1 = (Combi1 + 1); 
                   break;
                case 55: 
                   valore2 = (Combi2 + 1); 
                   valore1 = (valore1 - 1);
                   break;
               case 51:  
                   valore3 = (Combi3+1);
                   valore2 = (valore2 - 1);
                   break;
              case 65: 
                   valoreA = CombiA;
                   valore3 =(valore3 - 1);
                   break; 
 // Se si preme il tasto C si azzera tutto.              
                case 67:
                   valoreC = CombiC;
                   break; 
 // Se si premono le altre cifre si azzera tutto.  
                case 48:
                   valoreC = CombiC;
                   break;
               case 49:
                   valoreC = CombiC;
                   break;
                  case 50:
                   valoreC = CombiC;
                   break;
               case 52:
                   valoreC = CombiC;
                   break;
                case 54:
                   valoreC = CombiC;
                   break;
                case 56:
                   valoreC = CombiC;
                   break;
               case 57:
                   valoreC = CombiC;
                   break; 
               case 66:
                   valoreC = CombiC;
                   break; 
               case 68:
                   valoreC = CombiC;
                   break;
               case 69:
                   valoreC = CombiC;
                   break;
                  case 70:
                   valoreC = CombiC;
                   break; }}
                                   
          if (valoreC == CombiC )
             { valore1 = 0;
               valore2 = 0; 
               valore3= 0;
               valoreA =0;
               valoreC= 0;
               digitalWrite(LED1,LOW);}
          
         if (valore1 == Combi1 && valore2 == Combi2 && 
              valore3 == Combi3 && valoreA == CombiA  )
          { digitalWrite(LED1,HIGH); }
          
 }




Struttura:
La pressione del tasto corretto incrementa la variabile di 1.(variabile1 = Combi1 +1 )
La corretta pressione del tasto successivo decrementa la variabile precedente.





3 commenti:

  1. non funziona come se mancasse qualche istruzione

    RispondiElimina
    Risposte
    1. Purtroppo ho perso lo sketch originale. L'errore è da ricercarsi nel "copia Incolla". Ho perso anche il diagramma di flusso che avrebbe molto aiutato.

      Elimina
  2. Funziona. Non avevo messo nella giusta sequenza i pin della tastiera.

    RispondiElimina