Creato da: DonnyLennon il 05/01/2011
esperienze, appunti e risorse di elettronica e robotica
|
Area personale- Login
Contatta l'autore
TagUltimi commenti |
Cerca in questo Blog
Mini Gioco con Arduino e display LCD
Post n°3 pubblicato il 15 Aprile 2011 da DonnyLennon
Questo semplice progetto utilizza un display LCD di tipo alfanumerico 16X4, 16 colonne, 4 linee, con controller HD44780. E' il controller/driver per display lcd più utilizzato. Per vedere se il vostro LCD ha questo componente, controllate la sigla dell'integrato nel retro del disply, come in figura sotto:
Ovviamente Arduino ha delle librerie appostite per queste periferiche. La libreria da utilizzare è la LiquidCrystal. Fortunatamente è già presente nelle librerie varie di default che si trovano quando installi arduino. Possiede pochi e semplici comandi. Ma veniamo prima al cablaggio dei componenti. CABLAGGIO:
L'immagine è tratta dal sito di Arduino, e spiega con molta chiarezza i collegamenti da effettuare. Consiglio di utilizzare una breadboard, evitando di effettuare saldature. In questo caso il display è a 16 pin. Alcuni sono a 14 pin. Gli ultimi due servono per il controllo della retro illuminazione, di cui per adesso non ce ne occupiamo. NOTA BENE: Il pin 3 del display (chiamato Vb nell'immagine sopra) è per il controllo del contrasto. Nella figura mediante un potenziomentro gli viene data una tensione variabile da 0 a +5V. Variando il potenziometro si regola lo schermo finchè non si vedono i caratteri con chiarezza. Però in alcuni display (ed anche nel mio, lo STIM 212) bisogna collegare Vb ad una tensione negativa -5 Volt, mediante una resistenza. Il valore della resistenza adatta varia sempre a seconda dello schermo. Provate con qualche centinaia di Ohm, poi con qualche KiloOhm e così via... O utilizzate un potenziometro per trovarla con precisione.
CODICE: Prima di programmare arduino con questo codice, consiglio di fare un pò di pratica e provare con codici più semplici come Hello World, che trovate QUI. In questo modo si imparano i semplici comandi di scrittura, e modifica dei caratteri. Le istruzioni principali sono: lcd.setCursor(x, y): sposta il cursore nella posizione colonna x, riga y.Vedi esempio sotto: lcd.print("k"); stampa il carattere "k", nella casella indicata da setCursor
Veniamo al codice! Il firmware realizza un semplice giochino. Come si vede dal video, una "palla" (che non è altro che il carattere ASCII "O"), cade dall'alto, e tramite un secchio (carattere "D") bisogna evitare che la palla cadi per terra. Il secchio si muove orizzontalmente e si sposta a sx e dx mediante due pulsanti esterni collegati ai pin 8 e 9 di arduino. Collegate i due pulsanti come mostra la figura sotto (il cavo "SEGNALE" va al pin 8 / 9 di arduino), con una resistenza da qualche KOhm. Normalmente SEGNALE è uguale a 0, premendo il pulsante SEGNALE = Vcc.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //setta i pin del display //lcd.begin(16, 4) dichiara che il display è 16(colonne) per 4(righe)
NOTA BENE: Sto utilizzando il display nella posizione verticale. Quindi la palla scendendo avanza di colonna! E' come se le righe fossero colonne e viceversa. L'istruzione setCursor(m, n) inizialmente mi ha dato problemi. Mi pare di aver letto che sia presente un bug quando si utilizzano display 16X4. Quindi consiglio inizialmente di provare l'istruzione scrivendo un carattere in un punto fissato dello schermo con l'istruzione lcd.print(), preceduta da setCursor(m, n). Se riscontrate problemi andate nella cartella librerie e modificate il file "LiquidCrystal.cpp", modificando i valori assegnati a: int row_offsets[]: Io ho utilizzato questi, ed ho risolto il problema: int row_offsets[] = { 0x00, 0x40, 0x10, 0x50 };
PER QUALSIASI DUBBIO, O SUGGERIMENTO O CRITICA, CONTATTATEMI! trevis89@hotmail.it ALLA PROSSIMA BYE!
|
Inviato da: diletta.castelli
il 22/10/2016 alle 13:31
Inviato da: guoter
il 15/02/2016 alle 16:19
Inviato da: mino0497
il 12/09/2015 alle 19:20
Inviato da: dado7620
il 11/07/2013 alle 23:22
Inviato da: ZEDBeatz
il 26/05/2013 alle 00:40