Offline
Newbie
Karma: 0
Posts: 11
|
 |
« on: January 30, 2013, 10:18:39 am » |
Ciao a tutti, vorrei realizzare con il mio Arduino Uno una schermata di accesso con password, l'unico problema(forse) è che utilizzo dei pulsanti analogici, non possiedo un tastierino. Volevo sapere se era possibile creare una password di soli 4 numeri usando 4 pulsanti analogici. Vi sarei molto grato se mi aiutaste in questa piccola impresa. Grazie.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 47
|
 |
« Reply #1 on: January 30, 2013, 11:52:23 am » |
secondo me è possibile..basterebbe creare una variabile X..a ogni pulsante dai la possibilità di aumentare di n il valore di x e al raggiungimento di un valore predefinito Y permetti di visualizzare la schermata precedente..esemplificando x=0 se premi i pulsanti nella sequenza 1,3,4,2 ottieni il valore 5 se li premi 2,4,1,3 ottieni 6 se 5 è il valore corretto accedi al livello successivo...spiegato alla "carlona" ma potrebbe essere un punto di partenza..spero per te 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 11
|
 |
« Reply #2 on: January 30, 2013, 12:33:35 pm » |
Ciao, si sta pensando una cosa simile anche io.. vediamo cosa ne esce fuori  ! Nel frattempo se qualcuno ha realizzato qualcosa di simile in passato, gli sarei molto grato se potesse pubblicare la porzione di codice. Grazie
|
|
|
|
|
Logged
|
|
|
|
|
Italy
Offline
Newbie
Karma: 0
Posts: 35
|
 |
« Reply #3 on: January 30, 2013, 01:52:40 pm » |
Ciao. Anche io pochi giorni fa ho sbattuto la testa per cercare di realizzare un progetto simile. Il codice che ho scritto è questo: //PSW CON PULSANTI//
//VARIABILI int sequenza = 0; //int buttonState_aux = 0; //PULSANTI const int first_button = 2; const int second_button = 3; const int third_button = 4; const int fourth_button = 5; //LED const int first_led = 6; const int second_led = 7; const int third_led = 8; const int fourth_led = 9; //SEGNALE DI ABILITAZIONE const int enable_signal = 10; //LED DI FUNZIONAMENTO const int on_led = 13; //PIN COMUNICAZIONE SERIALE const int serial = 11; void setup () { pinMode (first_button, INPUT); //primo pulsante pinMode (second_button, INPUT); //secondo pulsante pinMode (third_button, INPUT); //terzo pulsante pinMode (fourth_button, INPUT); //quarto pulsante pinMode (first_led, OUTPUT); //primo pulsante ok pinMode (second_led, OUTPUT); //secondo pulsante ok nella giusta sequenza pinMode (third_led, OUTPUT); //terzo pulsante ok nella giusta sequenza pinMode (fourth_led, OUTPUT); //quarto pulsante ok nella giusta sequenza pinMode (enable_signal, OUTPUT); //segnale di abilitazione (sequenza ok) pinMode (on_led, OUTPUT); //led di funzionamento } void loop () { digitalWrite(on_led, HIGH);
//SE NON E' STATO PREMUTO ALCUN PULSANTE DELLA SEQUENZA if (sequenza == 0) { if (digitalRead(second_button) == HIGH) { sequenza = 1; digitalWrite(first_led, HIGH); delay(1000); //per evitare che si entri immediatamente nell'if succesivo nel caso in cui il pulsante è tenuto premuto per + di un secondo } } //SE E' GIA' STATO PREMUTO IL PRIMO PULSANTE DELLA SEQUENZA if (sequenza == 1 && !digitalRead(first_button) && !digitalRead(second_button) && !digitalRead(third_button)) { if (digitalRead(fourth_button) == HIGH) { sequenza = 2; digitalWrite(second_led, HIGH); delay(1000); } } //SE E' GIA' STATO PREMUTO IL PRIMO PULSANTE DELLA SEQUENZA E IL SECONDO E' ERRATO if (sequenza == 1 && (digitalRead(first_button) || digitalRead(second_button) || digitalRead(third_button))) { sequenza = 0; digitalWrite(first_led, LOW); } //SE E' GIA' STATO PREMUTO IL SECONDO PULSANTE DELLA SEQUENZA if (sequenza == 2 && !digitalRead(second_button) && !digitalRead(third_button) && !digitalRead(fourth_button)) { if (digitalRead(first_button) == HIGH) { sequenza = 3; digitalWrite(third_led, HIGH); delay(1000); } } //SE E' GIA' STATO PREMUTO IL SECONDO PULSANTE DELLA SEQUENZA E IL TERZO E' ERRATO if (sequenza == 2 && (digitalRead(second_button) || digitalRead(third_button) || digitalRead(fourth_button))) { sequenza = 0; digitalWrite(first_led, LOW); digitalWrite(second_led, LOW); } //SE E' GIA' STATO PREMUTO IL TERZO PULSANTE DELLA SEQUENZA if (sequenza == 3 && !digitalRead(first_button) && !digitalRead(second_button) && !digitalRead(fourth_button)) { if (digitalRead(third_button) == HIGH) { sequenza = 0; //RESETTO digitalWrite(fourth_led, HIGH); digitalWrite(enable_signal, HIGH); //ATTIVO IL SEGNALE DI ENABLE delay(1000); //LO TENGO ATTIVO PER 1 SECONDO digitalWrite(enable_signal, LOW); //LO DISATTIVO //RESETTO TUTTI I LED digitalWrite(first_led, LOW); digitalWrite(second_led, LOW); digitalWrite(third_led, LOW); digitalWrite(fourth_led, LOW); } } //SE E' GIA' STATO PREMUTO IL TERZO PULSANTE DELLA SEQUENZA E IL QUARTO E' ERRATO if (sequenza == 3 && (digitalRead(first_button) || digitalRead(second_button) || digitalRead(fourth_button))) { sequenza = 0; digitalWrite(first_led, LOW); digitalWrite(second_led, LOW); digitalWrite(third_led, LOW); } }
Ho preso il sorgente da questo sito: http://www.agostinopolizzano.info/home/content/riconoscitore-di-sequenza-microcontrolloreè lo ho successivamente modificato alle mie esigenze. In questo esempio alla pressione di un pulsante si accende un led, nel caso la sequenza non corrisponde si spengono tutti e riparte il programma. Nella seconda versione che ho scritto, invece dei led ho usato un display LCD che alla giusta sequenza stampa una stringa. ecco il codice: //PSW CON PULSANTI ED LCD 16*2// #include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //VARIABILI int sequenza = 0; //int buttonState_aux = 0; //PULSANTI const int first_button = 10; const int second_button = 9; const int third_button = 8; const int fourth_button = 7; //LED const int enable_signal = 6; //LED DI FUNZIONAMENTO const int on_led = 13;
void setup () { pinMode (first_button, INPUT); //primo pulsante pinMode (second_button, INPUT); //secondo pulsante pinMode (third_button, INPUT); //terzo pulsante pinMode (fourth_button, INPUT); //quarto pulsante pinMode (enable_signal, OUTPUT); //segnale di abilitazione (sequenza ok) pinMode (on_led, OUTPUT); //led di funzionamento lcd.begin(16, 2); } void loop () { digitalWrite(on_led, HIGH);
//SE NON E' STATO PREMUTO ALCUN PULSANTE DELLA SEQUENZA if (sequenza == 0) { if (digitalRead(second_button) == HIGH) { sequenza = 1; lcd.print("2"); delay(1000); //per evitare che si entri immediatamente nell'if succesivo nel caso in cui il pulsante è tenuto premuto per + di un secondo } } //SE E' GIA' STATO PREMUTO IL PRIMO PULSANTE DELLA SEQUENZA if (sequenza == 1 && !digitalRead(first_button) && !digitalRead(second_button) && !digitalRead(third_button)) { if (digitalRead(fourth_button) == HIGH) { sequenza = 2; lcd.print("4"); delay(1000); } } //SE E' GIA' STATO PREMUTO IL PRIMO PULSANTE DELLA SEQUENZA E IL SECONDO E' ERRATO if (sequenza == 1 && (digitalRead(first_button) || digitalRead(second_button) || digitalRead(third_button))) { sequenza = 0; lcd.clear(); } //SE E' GIA' STATO PREMUTO IL SECONDO PULSANTE DELLA SEQUENZA if (sequenza == 2 && !digitalRead(second_button) && !digitalRead(third_button) && !digitalRead(fourth_button)) { if (digitalRead(first_button) == HIGH) { sequenza = 3; lcd.print("1"); delay(1000); } } //SE E' GIA' STATO PREMUTO IL SECONDO PULSANTE DELLA SEQUENZA E IL TERZO E' ERRATO if (sequenza == 2 && (digitalRead(second_button) || digitalRead(third_button) || digitalRead(fourth_button))) { sequenza = 0; lcd.clear(); } //SE E' GIA' STATO PREMUTO IL TERZO PULSANTE DELLA SEQUENZA if (sequenza == 3 && !digitalRead(first_button) && !digitalRead(second_button) && !digitalRead(fourth_button)) { if (digitalRead(third_button) == HIGH) { sequenza = 0; //RESETTO lcd.print("3"); delay(1250); lcd.clear(); lcd.setCursor(2, 0); lcd.print("Psw Corretta"); digitalWrite(enable_signal, HIGH); //ATTIVO IL SEGNALE DI ENABLE delay(4000); //LO TENGO ATTIVO PER 5 SECONDI digitalWrite(enable_signal, LOW); //LO DISATTIVO lcd.clear(); } } //SE E' GIA' STATO PREMUTO IL TERZO PULSANTE DELLA SEQUENZA E IL QUARTO E' ERRATO if (sequenza == 3 && (digitalRead(first_button) || digitalRead(second_button) || digitalRead(fourth_button))) { sequenza = 0; lcd.clear(); } }
Spero di esserti stato di aiuto. Hertz.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 47
|
 |
« Reply #4 on: January 30, 2013, 02:04:51 pm » |
Ciao. Anche io pochi giorni fa ho sbattuto la testa per cercare di realizzare un progetto simile. Il codice che ho scritto è questo: //PSW CON PULSANTI//
//VARIABILI int sequenza = 0; //int buttonState_aux = 0; //PULSANTI const int first_button = 2; const int second_button = 3; const int third_button = 4; const int fourth_button = 5; //LED const int first_led = 6; const int second_led = 7; const int third_led = 8; const int fourth_led = 9; //SEGNALE DI ABILITAZIONE const int enable_signal = 10; //LED DI FUNZIONAMENTO const int on_led = 13; //PIN COMUNICAZIONE SERIALE const int serial = 11; void setup () { pinMode (first_button, INPUT); //primo pulsante pinMode (second_button, INPUT); //secondo pulsante pinMode (third_button, INPUT); //terzo pulsante pinMode (fourth_button, INPUT); //quarto pulsante pinMode (first_led, OUTPUT); //primo pulsante ok pinMode (second_led, OUTPUT); //secondo pulsante ok nella giusta sequenza pinMode (third_led, OUTPUT); //terzo pulsante ok nella giusta sequenza pinMode (fourth_led, OUTPUT); //quarto pulsante ok nella giusta sequenza pinMode (enable_signal, OUTPUT); //segnale di abilitazione (sequenza ok) pinMode (on_led, OUTPUT); //led di funzionamento } void loop () { digitalWrite(on_led, HIGH);
//SE NON E' STATO PREMUTO ALCUN PULSANTE DELLA SEQUENZA if (sequenza == 0) { if (digitalRead(second_button) == HIGH) { sequenza = 1; digitalWrite(first_led, HIGH); delay(1000); //per evitare che si entri immediatamente nell'if succesivo nel caso in cui il pulsante è tenuto premuto per + di un secondo } } //SE E' GIA' STATO PREMUTO IL PRIMO PULSANTE DELLA SEQUENZA if (sequenza == 1 && !digitalRead(first_button) && !digitalRead(second_button) && !digitalRead(third_button)) { if (digitalRead(fourth_button) == HIGH) { sequenza = 2; digitalWrite(second_led, HIGH); delay(1000); } } //SE E' GIA' STATO PREMUTO IL PRIMO PULSANTE DELLA SEQUENZA E IL SECONDO E' ERRATO if (sequenza == 1 && (digitalRead(first_button) || digitalRead(second_button) || digitalRead(third_button))) { sequenza = 0; digitalWrite(first_led, LOW); } //SE E' GIA' STATO PREMUTO IL SECONDO PULSANTE DELLA SEQUENZA if (sequenza == 2 && !digitalRead(second_button) && !digitalRead(third_button) && !digitalRead(fourth_button)) { if (digitalRead(first_button) == HIGH) { sequenza = 3; digitalWrite(third_led, HIGH); delay(1000); } } //SE E' GIA' STATO PREMUTO IL SECONDO PULSANTE DELLA SEQUENZA E IL TERZO E' ERRATO if (sequenza == 2 && (digitalRead(second_button) || digitalRead(third_button) || digitalRead(fourth_button))) { sequenza = 0; digitalWrite(first_led, LOW); digitalWrite(second_led, LOW); } //SE E' GIA' STATO PREMUTO IL TERZO PULSANTE DELLA SEQUENZA if (sequenza == 3 && !digitalRead(first_button) && !digitalRead(second_button) && !digitalRead(fourth_button)) { if (digitalRead(third_button) == HIGH) { sequenza = 0; //RESETTO digitalWrite(fourth_led, HIGH); digitalWrite(enable_signal, HIGH); //ATTIVO IL SEGNALE DI ENABLE delay(1000); //LO TENGO ATTIVO PER 1 SECONDO digitalWrite(enable_signal, LOW); //LO DISATTIVO //RESETTO TUTTI I LED digitalWrite(first_led, LOW); digitalWrite(second_led, LOW); digitalWrite(third_led, LOW); digitalWrite(fourth_led, LOW); } } //SE E' GIA' STATO PREMUTO IL TERZO PULSANTE DELLA SEQUENZA E IL QUARTO E' ERRATO if (sequenza == 3 && (digitalRead(first_button) || digitalRead(second_button) || digitalRead(fourth_button))) { sequenza = 0; digitalWrite(first_led, LOW); digitalWrite(second_led, LOW); digitalWrite(third_led, LOW); } }
Ho preso il sorgente da questo sito: http://www.agostinopolizzano.info/home/content/riconoscitore-di-sequenza-microcontrolloreè lo ho successivamente modificato alle mie esigenze. In questo esempio alla pressione di un pulsante si accende un led, nel caso la sequenza non corrisponde si spengono tutti e riparte il programma. Nella seconda versione che ho scritto, invece dei led ho usato un display LCD che alla giusta sequenza stampa una stringa. ecco il codice: //PSW CON PULSANTI ED LCD 16*2// #include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //VARIABILI int sequenza = 0; //int buttonState_aux = 0; //PULSANTI const int first_button = 10; const int second_button = 9; const int third_button = 8; const int fourth_button = 7; //LED const int enable_signal = 6; //LED DI FUNZIONAMENTO const int on_led = 13;
void setup () { pinMode (first_button, INPUT); //primo pulsante pinMode (second_button, INPUT); //secondo pulsante pinMode (third_button, INPUT); //terzo pulsante pinMode (fourth_button, INPUT); //quarto pulsante pinMode (enable_signal, OUTPUT); //segnale di abilitazione (sequenza ok) pinMode (on_led, OUTPUT); //led di funzionamento lcd.begin(16, 2); } void loop () { digitalWrite(on_led, HIGH);
//SE NON E' STATO PREMUTO ALCUN PULSANTE DELLA SEQUENZA if (sequenza == 0) { if (digitalRead(second_button) == HIGH) { sequenza = 1; lcd.print("2"); delay(1000); //per evitare che si entri immediatamente nell'if succesivo nel caso in cui il pulsante è tenuto premuto per + di un secondo } } //SE E' GIA' STATO PREMUTO IL PRIMO PULSANTE DELLA SEQUENZA if (sequenza == 1 && !digitalRead(first_button) && !digitalRead(second_button) && !digitalRead(third_button)) { if (digitalRead(fourth_button) == HIGH) { sequenza = 2; lcd.print("4"); delay(1000); } } //SE E' GIA' STATO PREMUTO IL PRIMO PULSANTE DELLA SEQUENZA E IL SECONDO E' ERRATO if (sequenza == 1 && (digitalRead(first_button) || digitalRead(second_button) || digitalRead(third_button))) { sequenza = 0; lcd.clear(); } //SE E' GIA' STATO PREMUTO IL SECONDO PULSANTE DELLA SEQUENZA if (sequenza == 2 && !digitalRead(second_button) && !digitalRead(third_button) && !digitalRead(fourth_button)) { if (digitalRead(first_button) == HIGH) { sequenza = 3; lcd.print("1"); delay(1000); } } //SE E' GIA' STATO PREMUTO IL SECONDO PULSANTE DELLA SEQUENZA E IL TERZO E' ERRATO if (sequenza == 2 && (digitalRead(second_button) || digitalRead(third_button) || digitalRead(fourth_button))) { sequenza = 0; lcd.clear(); } //SE E' GIA' STATO PREMUTO IL TERZO PULSANTE DELLA SEQUENZA if (sequenza == 3 && !digitalRead(first_button) && !digitalRead(second_button) && !digitalRead(fourth_button)) { if (digitalRead(third_button) == HIGH) { sequenza = 0; //RESETTO lcd.print("3"); delay(1250); lcd.clear(); lcd.setCursor(2, 0); lcd.print("Psw Corretta"); digitalWrite(enable_signal, HIGH); //ATTIVO IL SEGNALE DI ENABLE delay(4000); //LO TENGO ATTIVO PER 5 SECONDI digitalWrite(enable_signal, LOW); //LO DISATTIVO lcd.clear(); } } //SE E' GIA' STATO PREMUTO IL TERZO PULSANTE DELLA SEQUENZA E IL QUARTO E' ERRATO if (sequenza == 3 && (digitalRead(first_button) || digitalRead(second_button) || digitalRead(fourth_button))) { sequenza = 0; lcd.clear(); } }
Spero di esserti stato di aiuto. Hertz. semplice ed efficace...in aggiunta puoi aggiungerci questo http://www.robot-italy.com/it/touch-shield.htmlmi è venuto la voglia di farlo pure a me (non so per cosa lo userò ma lo userò  )
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 11
|
 |
« Reply #5 on: January 30, 2013, 03:20:43 pm » |
Ciao. Anche io pochi giorni fa ho sbattuto la testa per cercare di realizzare un progetto simile. Il codice che ho scritto è questo etc.. etc..
Hertz era proprio quello che cercavo grazie mille.. l'ho già adattato con i miei pulsanti analogici, ora sto escogitando un modo per memorizzare facilemente la password tramite variabile con la possibilità di poterla settare da display.
|
|
|
|
|
Logged
|
|
|
|
|
Italy
Offline
Newbie
Karma: 0
Posts: 35
|
 |
« Reply #6 on: January 31, 2013, 06:58:11 am » |
Se riesci nel impresa fammi sapere, anche io ci stavo provando!
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 11
|
 |
« Reply #7 on: February 01, 2013, 09:04:50 pm » |
Anche se il codice è molto grezzo fa il suo lavoro.. ho creato un array chiamato int PASSWORD[4]={1, 1, 1, 1}; int STATO=0; int ERRORE=0; Poi ho creato due variabili Errore e Stato perchè mi serviranno a capire se ho digitato il pulsante giusto while(STATO <1 && ERRORE <1){ lcd.setCursor(0,0); lcd.print("Password"); if (get_key_pass() == PASSWORD[0]) { STATO=STATO+1; lcd.setCursor(0,1); lcd.print(get_key_pass()); delay(200); } if (isPressed(get_key_pass()) != PASSWORD[0]) { ERRORE=ERRORE+1; lcd.setCursor(0,1); lcd.print(get_key_pass()); delay(200); } } while(STATO <2 && ERRORE < 2){ if (get_key_pass() == PASSWORD[1]) { STATO=STATO+1; lcd.setCursor(1,1); lcd.print(get_key_pass()); delay(200); } if (isPressed(get_key_pass()) != PASSWORD[1]) { ERRORE=ERRORE+1; lcd.setCursor(1,1); lcd.print(get_key_pass()); delay(200); } } while(STATO <3 && ERRORE < 3){ if (get_key_pass() == PASSWORD[2]) { STATO=STATO+1; lcd.setCursor(2,1); lcd.print(get_key_pass()); delay(200); } if (isPressed(get_key_pass()) != PASSWORD[2]) { ERRORE=ERRORE+1; lcd.setCursor(2,1); lcd.print(get_key_pass()); delay(200); } } while(STATO <4 && ERRORE < 4){ if (get_key_pass() == PASSWORD[3]) { STATO=STATO+1; lcd.setCursor(3,1); lcd.print(get_key_pass()); delay(200); } if (isPressed(get_key_pass()) != PASSWORD[3]) { ERRORE=ERRORE+1; lcd.setCursor(3,1); lcd.print(get_key_pass()); delay(200); } } while(STATO == 4) { lcd.setCursor(0,1); lcd.print("Accettata!"); delay(1000); STATO=STATO-4; menuPrincipale(); } while(ERRORE == 4) { lcd.setCursor(0,1); lcd.print("Negato!"); delay(1000); ERRORE=ERRORE-4; menuPrincipale(); } L'unico problema sta solo nel settare la password da Arduino, ho provato a sostituire un valore in questo modo PASSWORD[1]="nome della variabile contenente il valore"; //[1] Sta per il secondo valore contentuto dentro l'array Qualcuno saprebbe aiutarmi con gli array?Graziee
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16547
Don't know what I do
|
 |
« Reply #8 on: February 02, 2013, 04:51:47 am » |
Mi pare che il tuo codice abbia un grosso problema di logica. Non puoi fare il controllo ad ogni tasto premuto, in questo modo un potenziale malvivente te lo trova con pochi tentativi. Tu devi prima far inserire tutta la combinazione e poi solo dopo controllare se la sequenza è giusta. Altrimenti dai informazioni sulla password.
Comunque hai poche combinazioni, non è il massimo della sicurezza.
Il secondo problema che hai non l'ho capito.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 11
|
 |
« Reply #9 on: February 02, 2013, 07:27:42 am » |
Si in effetti non è il massimo, sto facendo tante prove.. in pratica vi spiego, i pulsanti quando non vengono premuti assumono valore "-1", quindi il ciclo "if" rileva subito i pulsante negativo e passa a quello successivo, ho provato ad inserire "isPressed" ma non attende il tocco del pulsante 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16547
Don't know what I do
|
 |
« Reply #10 on: February 02, 2013, 08:22:56 am » |
Ma non puoi usare dei normali pulsanti?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 11
|
 |
« Reply #11 on: February 02, 2013, 08:27:51 am » |
Purtroppo no mi servono solo quelli analogici
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16547
Don't know what I do
|
 |
« Reply #12 on: February 02, 2013, 10:02:42 am » |
Immagino ci sarà un inizio procedura acquisizione password, giusto? Da lì, campioni 4 pressioni. Solo dopo la 4a fai il check della password.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 11
|
 |
« Reply #13 on: February 02, 2013, 05:57:03 pm » |
Per chi fosse interessato dopo ore e ore seduto davanti sto benedetto codice, ho trovato la mia soluzione, un controllo tramite while e if. Esamino singolarmente ogni valore del vettore nel mio caso dal primo (0) all'ultimo 4 (3) Se ogni mia digitazione corrisponde al valore del pulsante (0,1,2,3), il controllo prosegue flaggando una variabile +1 "STATO",una variabile "ERRATO" e una variabile "CORRETTO" Se alla fine del controllo ho più valori ERRATI, la procedura si ripete reinserendo la password, ovviamente prima svuoto le variabili e le porto a "0". Se invece ottengo lo stesso valore della lunghezza della mia password cioè 4 nella variabile "CORRETTO" allora mi visualizzerà "Password Corretta" proseguendo con il programma. Vi posto il codice se a qualcuno potrebbe servire.. vi ricordo che utilizzo solo pulsanti analogici e quindi nessun pulsante digitale. //INIZIO FUNZIONE PASSWORD --------------------------------------------------------------------------------------------------------- if (CORRETTO < 4){while(BT_1 == get_key_pass() || BT_2 == get_key_pass() || BT_3 == get_key_pass() || BT_4 == get_key_pass()){ lcd.clear(); lcd.setCursor(0,0); lcd.print("Password"); while(STATO == 0)//Verifica la prima digitazione { while(!isPressed(get_key_pass())){ if (get_key_pass() == PASSWORD[0]) { lcd.setCursor(0,1); lcd.print(get_key_pass()); CORRETTO+=1; STATO+=1; delay(500); break; } else if (get_key_pass() != PASSWORD[0]) { lcd.setCursor(0,1); lcd.print(get_key_pass()); ERRORE+=1; STATO+=1; delay(500); break; }} if (STATO == 1) {break;} } while(STATO == 1)//Verifica la seconda digitazione { while(!isPressed(get_key_pass())){ if (get_key_pass() == PASSWORD[1]) { lcd.setCursor(1,1); lcd.print(get_key_pass()); CORRETTO+=1; STATO+=1; delay(500); break; } else if (get_key_pass() != PASSWORD[1]) { lcd.setCursor(1,1); lcd.print(get_key_pass()); ERRORE+=1; STATO+=1; delay(500); break; }} if (STATO == 2) {break;} } while(STATO == 2)//Verifica la terza digitazione { while(!isPressed(get_key_pass())){ if (get_key_pass() == PASSWORD[2]) { lcd.setCursor(2,1); lcd.print(get_key_pass()); CORRETTO+=1; STATO+=1; delay(500); break; } else if (get_key_pass() != PASSWORD[2]) { lcd.setCursor(2,1); lcd.print(get_key_pass()); ERRORE+=1; STATO+=1; delay(500); break; }} if (STATO == 3) {break;} } while(STATO == 3)//Verifica la quarta digitazione { while(!isPressed(get_key_pass())){ if (get_key_pass() == PASSWORD[3]) { lcd.setCursor(3,1); lcd.print(get_key_pass()); CORRETTO+=1; STATO+=1; delay(500); break; } else if (get_key_pass() != PASSWORD[3]) { lcd.setCursor(3,1); lcd.print(get_key_pass()); ERRORE+=1; STATO+=1; delay(500); break; }} if (STATO == 4) {break;} } while(STATO == 4)//Verifica se la password è corretta o sbagliata { if (CORRETTO == 4) { lcd.setCursor(0,1); lcd.print("Password"); lcd.setCursor(0,1); lcd.print("Corretta"); delay(500); lcd.clear(); break; } else { lcd.setCursor(0,0); lcd.print("Password"); lcd.setCursor(0,1); lcd.print("Sbagliata"); CORRETTO=0; ERRORE=0; STATO=0; delay(500); lcd.clear(); break; } }}} //FINE FUNZIONE PASSWORD --------------------------------------------------------------------------------------------------------- Sicuramente il mio codice non è il massimo dal punto di vista logico, ma funziona senza imperfezioni almeno fino ad adesso. Per l'inserimento di una nuova password, ho utilizzato quasi lo stesso codice solo che per ogni pulsante digitato assegna quel valore all'array di quella posizione specifica quindi PASSWORD[0]=valore pulsante premuto; PASSWORD[1]=valore pulsante premuto; etc etc Grazie a chi mi ha aiutato nell'impresa 
|
|
|
|
« Last Edit: February 03, 2013, 07:42:29 am by dannythegreat »
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16547
Don't know what I do
|
 |
« Reply #14 on: February 03, 2013, 10:07:48 am » |
A me sembra complicato. Inoltre se vari la lunghezza della password sei costretto ad aggiungere un blocco di controllo.
Ti avevo suggerito di leggere prima l'inserimento di tutte le cifre che compongono la password e solo alla fine eseguire il controllo sulla sua validità.
|
|
|
|
|
Logged
|
|
|
|
|
|