Questo metodo è estratto dal libro Microcontroller System Engineering di Bert van Dam, acquistabile sul sito www.elektor.com .
Inserisco nel 3D System Panel il tastierino keypad_3x4 e il display LCDI2C1.
Definisco la variabile “Keypremuto” di tipo Byte, che conterrà il codice ASCII del tasto premuto.
Il Ciclo principale Loop : While = 1, con il Component Macro associato al Keypad_3x4 e l’istruzione GetAscii(), inserisce nella variabile Keypremuto il carattere ASCII corrispondente al tasto premuto sul tastierino e lo visualizza sulla riga zero alla posizione zero.
Keypremuto=keypad_3x4::GetAscii()
Variabili e oggetti nel 3D System Panel
GetAscii()
La funzione decisione :
if Keypremuto <> 255
controlla se un qualsiasi tasto, di valore compreso tra 0 e 255, è premuto.
quando premo il tasto #; codice ASCII 35,l’istruzione
LCDI2C1::Clear(),
pulisce il display predisponendo il programma per un nuovo inserimento.
Il Component Macro LCDI2C1::printAscii(Keypremuto), visualizza sul display LCD il numero premuto.
keypremuto = Keypremuto – 48: sottrae 48 dal codice ASCII corrispondente al tasto premuto.
Corretto = 0 : azzera la variabile Corretto che conta i codici esatti.
Verifico se il numero inserito corrisponde al codice segreto
Inserisco due nuove variabili di tipo Byte:
Per azzerarle il contatore, utilizzo l’istruzione :
corretto = 0 seguito dalla istruzione serratura[0] =serratura[1]
La funzione decisione :
if serratura[0] = codice[0]
verifica se il valore del tasto premuto corrisponde al codice segreto.
Se il valore corrisponde, l’istruzione :
corretto = corretto +1,
passa al controllo del codice segreto successivo.
codice segreto composto da 2 numeri
serratura[0] = serratura[1]
serratura[1] = keypremuto
la funzione decisione
if corretto = 2
controlla che i due numeri inseriti corrispondano ai 2 codici segreti
codice segreto composto da 3 numeri.
serratura[0] = serratura[1]
serratura[0] = codice[0]
serratura[1] = serratura[2]
serratura[0] = codice[1]
serratura[0] = codice[2]
serratura[2] = keypremuto
la funzione decisione
if corretto = 3
controlla che i due numeri inseriti corrispondano ai 3 codici segreti
codice segreto composto da 4 numeri.
serratura[0] = serratura[1]
if serratura[0] = codice[0]
serratura[1] = serratura[2]
if serratura[1] = codice[1]
serratura[2] = serratura[3]
if serratura[2] = codice[2]
serratura[3] = keypremuto
if serratura[3] = codice[3]
la funzione decisione
if corretto = 4
controlla che i due numeri inseriti corrispondano ai 4 codici segreti
codice segreto composto da 5 numeri.
serratura[0] = serratura[1]
if serratura[0] = codice[0]
serratura[1] = serratura[2]
if serratura[1] = codice[1]
serratura[2] = serratura[3]
if serratura[2] = codice[2]
serratura[3] = serratura[4]
if serratura[3] = codice[3]
serratura[5] = keypremuto
if serratura[4] = codice[4]
la funzione decisione
if corretto = 5
controlla che i due numeri inseriti corrispondano ai 5 codici segreti
Loop antirimbalzo
Per evitare, gli inevitabili, rimbalzi meccanici dei tasti, che provocano falsi inserimenti di dati, invece di utilizzare la funzione Delay con un ritardo di almeno 100 millisecondi.
Con l’istruzione
Keypremuto_keypad0::GetAscii()
L’autore ha preferito utilizzare questo elegante metodo che consiste nel controllare , ad ogni ciclo del programma, se il tasto è stato rilasciato.
il programma conclude l’operazione di inserimento e verifica dei codici, con la funzione
if corretto = 4 (nel caso che il codice segreto sia composto da 4 numeri)
Visualizza la scritta: “codice esatto” sulla seconda linea del display LCD
Accendende il led collegato al pin 0 della porta D per 3 secondi
Pulisce il display LCD con l’istruzione LCDi2C1::Clear()
C Code
Riccardo Monti