Keypad LCD con Arduino – prima parte

Ieri l’amico Luca Dentella ha pubblicato un articolo sulla shield Keypad LCD una shield molto interessante non solo per il display LCD ma sopratutto per la presenza dei pulsanti pre-cablati.

keypad LCD demo

La Keypad LCD è disponibile su tanti siti, come lo stesso Luca riporta, io ne ho ordinata una subito dopo aver letto l’articolo.

Componenti della Keypad LCD

La shield è composta da un display LCD 16×2 alfanumerico e 5 pulsanti, ti invito a leggere l’articolo ben scritto da Luca sui componenti della shield:

keypad LCD

Il modello che ho ordinato è prodotto dalla DFRobot e oltre ai connettori soliti presenta l’estensione dei pin A1-A5 con affiancati per ciascuno due pin uno connesso al polo positivo ed uno connesso al polo negativo:

keypad LCD pin analogici

la piedinatura aggiuntiva è molto interessante perché ti permette di collegare direttamente un sensore che necessiti di alimentazione, ad esempio un potenziometro da 10K che ha bisogno di +5v,Gnd e Segnale o i sensori infrarossi.

I pulsanti della KeypadLCD

Ciascun pulsante della Keypad LCD è collegato ad una resistenza in serie con quella del pulsante precedente, troverai questa scelta geniale perché in questo modo con un solo pin analogico (A0) puoi riconoscere la pressione di uno dei 5 pulsanti semplicemente leggendo il valore letto su tale pin dal DAC ( convertitore analogico digitale ) a 10Bit di arduino.

I valori che leggi sono compresi nei range seguenti:

  • SELECT: tra 720 e 760
  • LEFT: tra 480 e 520
  • RIGHT: tra 0 e 20
  • UP: tra 120 e 160
  • DOWN: tra 300 e 350

I valori che ti ho riportato sono più larghi del valore reale letto, considera di lasciarti un po’ di margine dovuto alla differente costruzione della tua shield dovuta alle diverse tolleranze delle resistenze, del circuito e del costruttore, essendo tutte le keypad simili ma non identiche.

Conoscendo i valori di ciascun pulsante troverai semplice scrivere uno sketch che valuti il valore letto sul pin A0 e lo trasformi nella pressione di un pulsante, lo vediamo a breve.

L’LCD della Keypad

il display montato sulla keypad LCD è un comune 16×2 ( 16 colonne x 2 righe ) pre-cablato sui pin digitali corrispondenti ai pin arduino:

  • RS sul pin 8
  • EN sul pin 9
  • D4 sul pin 4
  • D5 sul pin 5
  • D6 sul pin 6
  • D7 sul pin 7
Avrai notato la sottile fantasia con cui i progettisti della keypad LCD si sono divertiti a collegare ciascun pin di segnale Data ( Dx ) al pin di uguale numero di Arduino.
A cosa ti serve conoscere questi dati?
Semplice a inizializzare la classe LiquidCrystal con la seguente linea:
LiquidCrystal lcd(8,9,4,5,6,7);

Lo sketch di esempio o demo

Luca ha pubblicato uno sketch demo e ti consiglio di provarlo perché davvero interessante.

Io ho realizzato il mio personale sketch che testerò all’arrivo della keypad LCD shield:

#include <LiquidCrystal.h>

#define BUTTON A0
#define BACKLIGHT 10

int SELECT[]  =  {720,760};
int LEFT[]    =  {480,520};
int RIGTH[]   =  {0,20};
int UP[]      =  {120,160};
int DOWN[]    =  {300,350};

boolean blacklightStatus = false;
LiquidCrystal lcd(8,9,4,5,6,7);

void setup() {

  Serial.begin( 9600 );
  Serial.println("Avvio");

  pinMode( BACKLIGHT,OUTPUT );

  digitalWrite( BACKLIGHT,LOW );

  lcd.begin(16, 2);

  digitalWrite( BACKLIGHT,HIGH );
  lcd.setCursor(0,0);
  lcd.print("Keypad LCD test");
  lcd.setCursor(0,1);
  lcd.print("mauroalfieri.it");

}

void loop() {

   lcd.setCursor(0,0);
   lcd.print("Hai premuto:");  

   lcd.setCursor(0,1);
   lcd.print( ctrlButton( analogRead( BUTTON ) ) );

}

int ctrlButton( int button ) {

  if ( SELECT[0] <= button && button <= SELECT[1] ) { return 1; }
  if ( LEFT[0] <= button && button <= LEFT[1] ) { return 2; }
  if ( RIGTH[0] <= button && button <= RIGTH[1] ) { return 3; }
  if ( UP[0] <= button && button <= UP[1] ) { return 4; }
  if ( DOWN[0] <= button && button <= DOWN[1] ) { return 5; }

  return 0;

}

non ho ancora avuto modo di provare questo sketch sulla keypad LCD ma lo farò presto, appena mi arriva.

Leggendo lo sketch incontri l’include della LiquidCrystal.h alla linea 1, libreria che ti servirà per gestire l’LCD;

linee 03-04: definisci due costanti l prima per indicare allo sketch che i pulsanti sono collegati al pin A0 e la seconda che indica allo sketch che l’LCD può essere oscurato inviando al pin 10 un valore PWM da 0 a 255;

il pin 10 è la prima volta, in questo articolo, che lo incontri ed è molto interessante perché ti permette di regolare l’intensità della retro illuminazione del display LCD consentendo al tuo progetto di spegnere l’LCD per risparmiare energia.

Linee 06-10: definisci 6 array di interi, ciascuno di due valori in cui la posizione 0 è il valore minimo del range che puoi leggere sul pin A0 per quel pulsante e la posizione 1 dell’array rappresenta il valore massimo, all’interno di ciascun range letto vuol dire che hai premuto il pulsante corrispondente.

Linee 12-13: definisci una variabile di stato per la retroilluminazione, non la userai in questo sketch, e inizializza la libreria LiquidCrystal con i pin a cui è collegato il display LCD;

linee 17-18: inizializza le comunicazioni con la porta seriale dell’IDE arduino;

linea 20: imposta il pin 10 come pin di tipo OUTPUT, è quello su cui invii il segnale digitale o PWM per regolare la retroilluminazione del display;

linea 22: imposta a LOW il valore del pin BLCKLIGHT, spegni il display;

linea 24: indica alla libreria LiquidCrystal che utilizzi un display 16 x 2;

linea 26: invia un segnale HIGH al pin BACKLIGHT e accendi il display per visualizzare il messaggio definito alle linee seguenti;

linee 27-30: imposta una stringa sulla linea 0 ed una sulla linea 1;

linee 36-37: scrivi sul display alla linea 0 partendo dalla posizione 0 il messaggio “Hai premuto:”;

linee 39-40: scrivi sul display alla linea 1 partendo dalla posizione 0 il valore del pulsante che hai premuto;

linea 44: è la funzione che discrimina il tasto che hai premuto e ti restituisce un valore da 1 a 5 alla pressione di un tasto, ogni valore corrisponde ad un tasto specifico, e restituisce 0 se non premi alcun tasto;

linea 46: valuta la pressione dei pulsanti, se il valore letto sul pin analogico A0 è compreso tra il min e max della variabile SELECT definita alla linea 06, dove min è il valore dell’array alla posizione 0 e max è il valore alla posizione 1. Se il valore letto è compreso in questo range, estremi inclusi, restituisce 1 che vuol dire: hai premuto: 1 sul display;

linee 47-50: eseguono il medesimo controllo della linea 46 per gli altri range attesi;

linea 52: se nessun pulsante viene premuto restituisce il valore 0;

Buon divertimento con la tua Keypad LCD.

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/keypad-lcd-con-arduino-prima-parte.html

59 pings

Skip to comment form

  1. […] già conosci la KeyPad LCD versione 1.0 da alcuni articoli che ho scritto sia di presentazione della shield sia per il progetto […]

  2. […] un display LCD 16×2 ed i pulsanti puoi utilizzare la Keypad LCD ed eseguire le regolazioni dell’ora oltre alle fasce di […]

  3. […] Keypad LCD tutti i pulsanti sono collegati al pin A0, vedi articolo dedicato alla keypad LCD, nella 1,8″ shield joystick il joystick è collegato al pin […]

  4. […] L’LCD 16×2 Blue LED Backlight unisce un LCD 16×2 di tipo a retroilluminazione Blue e scritte in bianco a 5 pulsanti in linea collegati tutti al pin A0, sistema simile a quello utilizzato dalla KeyPad LCD […]

  5. […] pulsanti richiamando la funzione ctrlButton(), già utilizzata in precednti articoli dedicati alla key pad LCD il cui valore di ritorno è un numero da 0 ( nessun pulsante premuto ) a 5 ( pressione del […]

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.