Vai al contenuto
PLC Forum


Arduino e il codice tastiera


del_user_174544

Messaggi consigliati

del_user_174544

Essendo un poco a digiuno di nozioni del linguaggio "c" di arduino e avendo la necessità di realizzare in tempo utile questo progetto chiedo una mano per completare uno sketch per il quale sto perdendo tempo da um po.

Per l'accesso di casa ho necessità di controllare più servizi tramite una tastiera la quale, dopo la digitazione di un codice (perché posizionata all'esterno) dovrebbe darmi la possibilità di

comandare 4 uscite a relé alcune in modo impulsivo altre bistabili ognuna associata ad un tasto diverso, eseguite una o più azioni il codice si deve azzerare

In sostanza con il codice si abilita la tastiera fatte la o le selezioni la tastiera torna a bloccarsi.

Di seguito inserisco il codice che ho scritto aiutandomi trovando qualcosa online e testato, ma fin qui mi permette di identificare il codice e fare al massimo una sola attivazione.

Da qui in avanti mi sono perso. 

Grazie

 

 

#include <Keypad.h>

#define LED 13

const byte ROWS = 3; //quattro righe

const byte COLS = 3; //tre colonne

char keyInsert[6];

// Queste variabili servono come verifica del corretto inserimento del codice

int i = 0;

int j = 0;

int s = 0;

int x = 0;

// Codice segreto

char code[7]= "112233";

char keys[ROWS][COLS] = {

  {'1','2','3'},

  {'4','5','6'},

  {'*','0','#'},

  

};

byte rowPins[ROWS] = {7,6,5}; //i Pin a cui sono connesse le righe del KeyPad

byte colPins[COLS] = {4,3,2}; // i Pin a cui sono connesse le colonne del KeyPad

 

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

 

void setup(){

  Serial.begin(9600);

  pinMode(LED,OUTPUT);

}

 

void loop(){

  char key = keypad.getKey();

  if (i==0){

    Serial.println("Insert PIN to verify...");

    i++;

  }

  if (key != NO_KEY && j<6){

    Serial.print("*");

    //Serial.println(key);

    keyInsert[j]=key;

    j++;

  }

   if(key == '*') {

      Serial.println();

      Serial.println("Verifyng the code...");

      delay(1000);

      for(s=0; s<6;s++){

        if(keyInsert==code){

          x++;

      }

    }

      if(x==6){

      Serial.println("The code is correct"); //da qui in avanti non scorsa fare

      digitalWrite(LED,HIGH);

      delay(1000);

      digitalWrite(LED,LOW);

      

      }else{

         Serial.println("The code is incorrect, please retry");

         delay(2000);

         x=0;

         i=0;

         j=0;

       }

 

      }

    if(key == '#'){

        x=0;

        i=0;

        j=0;

        

 

Link al commento
Condividi su altri siti


Quando posti del codice devi usare gli appositi tag (nella barra dell'editor sono indicati da "<>", perlomeno su pc), altrimenti diventa una cosa illeggibile.

 

 

Ciao, Ale.

Link al commento
Condividi su altri siti

del_user_174544

Grazie Ale, ogni volta imparo qualcosa.

Riposto meglio il codice:

 

#include <Keypad.h>
#define LED1 28
#define LED2 29
const byte ROWS = 3; //tre righe
const byte COLS = 3; //tre colonne
char keyInsert[6];
// Queste variabili servono come verifica del corretto inserimento del codice
int i = 0;
int j = 0;
int s = 0;
int x = 0;
// Codice segreto
//char code[7]= "112233";
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'*','0','#'},
  
};
byte rowPins[ROWS] = {22,24,26}; //i Pin a cui sono connesse le righe del KeyPad
byte colPins[COLS] = {23,25,27}; // i Pin a cui sono connesse le colonne del KeyPad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
  Serial.begin(9600);
  pinMode(LED1,OUTPUT);
  pinMode(LED2,OUTPUT);
}

void loop(){
  char code[7]= "112233";
  char key = keypad.getKey();
  if (i==0){
    Serial.println("Insert PIN to verify...");
    i++;
  }
  if (key != NO_KEY && j<6){
    Serial.print("*");
    //Serial.println(key);
    keyInsert[j]=key;
    j++;
  }
   if(key == '*') {
      Serial.println();
      Serial.println("Verifyng the code...");
      delay(1000);
      for(s=0; s<6;s++){
        if(keyInsert[s]==code[s]){
          x++;
      }
    } 
      if(x==6){
      Serial.println("The code is correct"); 
      digitalWrite(LED1,HIGH);
      delay(1000);
      digitalWrite(LED1,LOW); 
      //TODO possibili ulteriori implementazioni
      }else{
         Serial.println("The code is incorrect, please retry");
         delay(2000);
         x=0;
         i=0;
         j=0;
       }

      }  
    if(key == '#'){
        x=0;
        i=0;
        j=0;
        digitalWrite(LED1,LOW); 
        
    }    
}
  char code[7]= "112233";
  char key = keypad.getKey();
  if (i==0){
    Serial.println("Insert PIN to verify...");
    i++;
  }
  if (key != NO_KEY && j<6){
    Serial.print("*");
    //Serial.println(key);
    keyInsert[j]=key;
    j++;
  }
   if(key == '*') {
      Serial.println();
      Serial.println("Verifyng the code...");
      delay(1000);
      for(s=0; s<6;s++){
        if(keyInsert[s]==code[s]){
          x++;
      }
    } 
      if(x==6){
      Serial.println("The code is correct"); 
      digitalWrite(LED1,HIGH);
      delay(1000);
      digitalWrite(LED1,LOW); 
      //TODO possibili ulteriori implementazioni
      }else{
         Serial.println("The code is incorrect, please retry");
         delay(2000);
         x=0;
         i=0;
         j=0;
       }

      }  
    if(key == '#'){
        x=0;
        i=0;
        j=0;
        //digitalWrite(LED1,LOW);
        
    }    
}

 

Come dicevo la funzione if(x==6){ restituisce il risultato del confronto tra codice impostato e digitato, lo sketch prosegue attivando e disattivando una sola out.

Da qui in avanti vorrei avere la possibilità di attivare o disattivare una o più delle quattro uscite collegate a un relè.

Poi la tastiera dovrebbe di nuovo bloccarsi fino alla prossima digitazione del codice.

Ciao grazie

Link al commento
Condividi su altri siti

del_user_174544

Notate che il codice è ripetuto due volte per una prova che stavo facendo.

Quindi il codice termina a metà testo.

Scusate ma ho letto le prime righe per verificare che fosse il codice giusto senza ricordare che ci stavo smacchiando.

Ciao

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...