schermo lcd

ciao...ho cominciato un progetto nel quale vorrei fare in modo che mentre digito un codice a 4 cifre venga fuori sul display la scritta:
password:****
e a ogni numero/lettera inserita far comparire uno degli asterischi

Prima di tutto, nella sezione in lingua Inglese si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post ...

... poi, essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Il tuo post è già stato spostato nell'opportuna sezione del forum "Italiano"

mi scuso ma non avevo letto la guida...comunque io sono abbastanza nuovo con la programmazione di arduino e anche su questo forum sul quale mi sono iscritto da pochi giorni per trovare una risposta a questo mio problema

Simone, inizia postando un tuo codice, quello che non riesci a far funzionare, così possiamo aiutarti meglio.

comunque quello che c’è gia scritto funziona il problema è che non riesco a far in modo che (a ogni tasto premuto del tastierino nello schermo lcd) venga fuori la scritta password con un asterisco in piu a ogni pressione e che una volta inseriti 4 numeri/lettere ricominci ad inserirli da capo

sketch_feb05a.ino (3.38 KB)

Hm, è proprio l'impostazione generale che va rivista, che è quella serie di delay()? Dovresti avere una variabile stringa dove accumuli i tasti che man mano vengono premuti (e aggiorni lo schermo con un asterisco in più), e solo quando sono stati digitati 4 tasti (o si preme un certo tasto es. il #) confronti quella stringa con la password, e se non sono giusti avvisi l'utente che deve riprovare. Queste cose falle prima scrivendo la logica sotto forma di commenti, che poi traduci in istruzioni vere.
Tipo:

loop() {
 // leggi tasto premuto
 // se c'è un tasto premuto {
   // aggiungi tasto al buffer
   // aggiungi un asterisco al display
   // se sono 4 cifre {
     // se le cifre sono uguali al codice {
       // sblocca
     //} altrimenti {
       // errore, avvisa l'utente
       // resetta buffer
       // resetta display
     // }
   // }
 // fine
}

PS Ma perché le istruzioni di uno stesso blocco le metti così "a scaletta"? Diventa difficile leggere "ad occhio" il flusso...

scusa l'ignoranza, ma che cos'è il buffer

Un "buffer" è una variabile in memoria dove accumuli dei dati. In questo caso una da max 4 caratteri:

char buf[4];
byte numchar = 0;

Quindi ad ogni tasto premuto leggi il carattere (diciamo nella variabile "carattere") e fai:

buf[numchar++] = carattere;

Quindi quando numchar == 4 hai ricevuto le 4 cifre e puoi confrontarle con la password.

Però se non riesci ad implementare queste cose mi sa che devi prima impratichirti un poco col linguaggio C... :wink:

effettivamente io non conosco molto il linguaggio perche sono abbstanza nuovo nel campo

Allora la cosa migliore per imparare è: vai, sperimenta, prova, e cerca! Evita di fare semplici copia/incolla di codice trovato in giro ma che non capisci, cerca di capire come funziona (o NON funziona), usa il monitor seriale (con dei Serial.print() messi nel tuo codice) per capire dove passa il codice quando lo esegui e cosa contengono le variabili! E magari i primi tempi puoi imparare più rapidamente usando qualche emulatore di circuiti (come Tinkercad circuits, che ti consiglio, è gratuito, ti iscrivi ed hai la possibilità anche di far girare il codice una istruzione alla volta e vedere cosa fa!!).

E quando non riesci a trovare una risposta o una soluzione, posta qui il codice che nel frattempo hai sviluppato e ti aiuteremo!

mi sono ingegnato un po e c'è l'ho fatta....Risolto

Ok, bene!
Ma scrivi anche come hai fatto (e magari il nuovo sketch) così anche tu puoi aiutare altri con problemi simili, no?

ho creato una nuova variabile:

int numero=0;

poi ho usato :

if(whichKey == '1' ||whichKey == '2' ||whichKey == '3' || whichKey == '4' || whichKey == '5' ||whichKey == '6' ||whichKey == '7' ||whichKey == '8' ||whichKey == '9' ||whichKey == '0' ||whichKey == 'A' ||whichKey == 'B' ||whichKey == 'C' ||whichKey == 'D'){
numero++;
}

così ogni qualvolta si inserisce un carattere la variabile "numero" si implementa di 1 quindi:

if(numero==1){
lcd.clear();
lcd.setCursor(0,1);
lcd.print(" password:* ");
}

if(numero==2){
lcd.clear();
lcd.setCursor(0,1);
lcd.print(" password:** ");
}

if(numero==3){
lcd.clear();
lcd.setCursor(0,1);
lcd.print(" password:*** ");
}

if(numero==4){
lcd.clear();
lcd.setCursor(0,1);
lcd.print(" password:**** ");
numero=0;

alla fine ho aggiunto numero=0 per resettare l'LCD

a cosa servono i punti karma??

...se sono utili e sempre se vuoi potresti clickare add

Simone i punti karma sono un modo per ringraziare chi ti da una mano, se qualcuno trova di aiuto il tuo codice volendo può darti un punto, ma al momento se non editi il messaggio per inserire il codice tra i tag < / > (il primo pulsantino in alto a sinistra) arriva un moderatore e ti da una tiratina d’orecchi :wink: :smiley:

-zef-:
… ma al momento se non editi il messaggio per inserire il codice tra i tag < / > (il primo pulsantino in alto a sinistra) arriva un moderatore e ti da una tiratina d’orecchi :wink: :smiley:

Esatto:slight_smile:

>Simone2003: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

Guglielmo

Simone2003:
poi ho usato :
if(whichKey == '1' ||whichKey == '2' ||whichKey == '3' || whichKey == '4' || whichKey == '5' ||whichKey == '6' ||whichKey == '7' ||whichKey == '8' ||whichKey == '9' ||whichKey == '0' ||whichKey == 'A' ||whichKey == 'B' ||whichKey == 'C' ||whichKey == 'D'){
numero++;
}

Se funziona va bene, ma ti assicuro che se non inizi a strutturare i programmi come ti ho consigliato ti troverai sempre peggio all'aumentare della complessità dello sketch.

PS: il punto karma è una sorta di "grazie" che si dà cliccando su "add" che vedi nella parte sinistra del messaggio di chi ti ha aitato in qualche modo :wink: