Come usare la variabile Array

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

keypad kb + LCD + led 1
  • ASCII - 48: il carattere corrisponde ai numero.
  • ASCII 35 ,corrisponde al simbolo cancelletto #
  • ASCII 52: corrisponde al simbolo asterisco  *.

GetAscii()

La funzione decisione :

if  Keypremuto <> 255

controlla se un qualsiasi tasto, di valore compreso tra 0 e 255, è premuto.

keypad kb + LCD + led 2

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:

  • la variabile corretto, conta il numero di tasti corrispondenti al codice segreto.
  • la variabile serratura, verifica se il tasto premuto corrisponde al codice segreto.

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

keypad kb + LCD + led 2 codici

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.

keypad kb + LCD + led 3 codici

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.

keypad kb + LCD + led 4 codici

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.

keypad kb + LCD + led 5 codici

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.

keypad kb + LCD + led 3

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()

keypad kb + LCD + led corretto

C Code

rick 3Riccardo Monti