Lezione 5
Filed under: Programmazione Arduino
Comments: None
Uso di un display LCD
In questa lezione vedremo come utilizzare un display LCD per le nostre applicazioni. A differenza delle precedenti lezioni, in cui veniva utilizzato un display a 7 segmenti, molto più limitato potendo visualizzare solo le cifre ed alcune lettere, questa volta utilizzeremo un componente che vi permetterà di visualizzare molte più informazioni ed in modo più dettagliato. Il display a caratteri oramai universalmente utilizzato è quello basato sul chip HITACHI HD-44780 e permette di governare display a 1, 2 o 4 righe, da 10, 12, 16, 20, 24 fino a 40 colonne.
Il modello da noi utilizzato è quello 16×2 (2 righe di 16 caratteri) che si trova anche come modello nell’ambiente TinkerCad.
Nelle interfacce “bordo macchina” delle schede che governano macchine complesse sono sempre presenti dei display, a volte di tipo “carattere” come quello che utilizzeremo oggi, ma molto più spesso di tipo “grafico”.
Esercitazione 10: Uso del display LCD
Con la piattaforma TinkerCad realizziamo questo circuito
Si vuole realizzare un controllo che piloti l’accensione temporizzata di un motore:
- Deve essere possibile impostare con due tasti il tempo di accensione del motore ( tasto incremento, tasto decremento ) con precisione di 0,5 secondi. Tempo minimo 0,5 sec e tempo massimo di 99.5 sec.
- Sul display dovrà essere sempre visualizzato il tempo rimanente di accensione del motore.
- Sul display dovrà essere sempre visualizzato lo stato del motore (STOP, RUN ed altri eventuali stati).
Richieste aggiuntive:
- Una volta partita la temporizzazione del motore dovrà essere possibile, premendo di nuovo il pulsante di START, eseguire una pausa nella quale lo scorrimento del tempo si deve fermare ed il motore si spenge temporaneamente, ripremendo lo stesso pulsante il motore riparte e con esso la temporizzazione.
- Una volta partito il motore, tramite un altro pulsante detto di STOP, dovrà poter essere annullata la temporizzazione.
- I due pulsanti PIU e MENO permettono di regolare il tempo di attivazione con passi di 0,5 secondi ad ogni loro pressione. Questi pulsanti dovranno permettere, tramite la gestione della loro pressione prolungata (intorno a 1 secondo), l’accelerazione della modifica del tempo, in modo che mantenendo premuto il pulsante stesso il tempo impostato si autoincrementi velocemente.
Durante la lezione abbiamo incontrato diversi problemi a cui abbiamo posto soluzione, ricordiamone alcuni:
Lavorando con temporizzazioni espresse in decimi di secondo avevamo utilizzato numeri interi, il cui uso in linguaggio C è notevolmente più veloce. Dovendo però rappresentare tali tempi in una interfaccia destinata ad “umani” avevamo il problema di rappresentare tale tempo in secondi e frazioni di esso.
- Abbiamo quindi utilizzato la divisione intera ( / ) che restituisce solo il quoziente e l’operazione di modulo ( % ) che è sempre una divisione intera che restituisce però solo il resto di essa.
- Abbiamo utilizzato dei controlli ( IF ) per posizionare correttamente la stampa del numero se era composto solo da unità o anche da decine.
Abbiamo inoltre utilizzato variabili aggiuntive per permettere la messa in pausa della temporizzazione ed anche il temporaneo spengimento del motore.
Abbiamo utilizzato un controllo ( IF ) per determinare la funzionalità del pulsante di START che, una volta partita la temporizzazione, doveva modificare il suo comportamento.
Il programma terminato e completo in tutte le sue funzionalità lo trovate qui.
Il display utilizzato permette di visualizzare tutto il set di caratteri maiuscolo/minuscolo, numerico e segni di interpunzione delle lingue occidentali, alcuni caratteri dell’alfabeto greco ed anche un set di caratteri giapponese.
Riepilogo dei contenuti della lezione:
- Uso della divisione fra interi in linguaggio C (recuperando quoziente e resto).
- Puntualizzazione sulla flessibilità delle strutture per aggiungere/modificare funzionalità a questi “oggetti”.
- Uso di abbreviazioni nelle operazioni aritmetico-logiche: nella fattispecie uso di ++, –, +=, -=, *=, /=, |=, &=, ecc. ecc.
- Installazione di librerie aggiuntive e loro inclusione nel codice C (direttiva #include).
Alla prossima lezione…