del_user_174544 Inserito: 8 ottobre 2020 Segnala Inserito: 8 ottobre 2020 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;
ilguargua Inserita: 8 ottobre 2020 Segnala Inserita: 8 ottobre 2020 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.
del_user_174544 Inserita: 8 ottobre 2020 Autore Segnala Inserita: 8 ottobre 2020 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
del_user_174544 Inserita: 8 ottobre 2020 Autore Segnala Inserita: 8 ottobre 2020 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
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora