KeyPad LCD Shield ( blue )

Похожие документы
Relazione Tecnica Sensore di Temperatura con interfacciamento microcontroller Arduino 1.3

ACCENDERE E SPEGNERE UN DIODO LED

Corso Base Arduino ed Elettronica

Genere DATA Generalità Note Distribuzione

PIEDINO NOME DESCRIZIONE

In questo tutorial decodificheremo i segnali provenienti da un telecomando qualsiasi e utilizzeremo gli stessi segnali per comandare Arduino a

SCHEDA SPERIMENTALE ARDUINO UNO

14^ parte : Sensore a ultrasuoni HC SR04 e Arduino. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

ESERCIZI CON PULSANTI

Corso di programmazione Arduino DI MALVEZZI DAVIDE

TERMOMETRO LCD BASATO SUL TRASDUTTORE DI TEMPERATURA ANALOGICO LM 35

CORSO ARDUINO. Corso ASEV Giulio Fieramosca Stefano Panichi. Stefano Panichi e Giulio Fieramosca

Per controllare un motore DC (funzionante in corrente continua) con Arduino, devi utilizzare il circuito integrato Ponte H (nel mio caso un L293NE

I SENSORI DI PROSSIMITA

7^ parte : Acquisizione della temperatura con LM35 e visualizzazione su display LCD. Author: Ing. Sebastiano Giannitto (ITIS M.

CORSO ARDUINO. Jacopo Belli Giulio Fieramosca Luca Mattii GOLEM Jacopo Belli Giulio Fieramosca Luca Mattii

Tipologie dei dati nell SDK di Arduino come in un vero LP ad alto livello :

CORSO ARDUINO. Jacopo Belli Giulio Fieramosca Luca Mattii GOLEM Jacopo Belli Giulio Fieramosca Luca Mattii

Arduino in connessione Bluetooth

FONDAMENTI DI ARDUINO

Lezione 6 su Arduino: I sensori di presenza PIR

Far lampeggiare un led o forse un semaforo?

INTERAZIONE ELETTRONICA

La Keyes 4 relay non è proprio una shield nel senso classico definito nel mondo arduino in quanto una shield dovrebbe essere concepita per essere

D.A.M. Bros Robotics -

Arduino: Programmazione

CTU Presenta. Contest Automation con Arduino. IK0XBX - Francesco

Corso Professionale di Arduino Avanzato

E labirinto cronaca di un fallimento

ARDUINO. Colleghiamolo al PC/MAC - FUNZIONA?

Controllo di una soglia analogica

Lezione 16: Come utilizzare la Joystick shield per i propri progetti con Arduino

Corso Base Arduino ed Elettronica

LEGO Mindstorms e Arduino nella scuola secondaria di secondo grado: alcune esperienze didattiche. Pietro Bonora Liceo Scientifico A.B.

PRIMI PASSI CON ARDUINO

ROBOTICA Syllabus Versione 1.0

Corso base su arduino Seconda parte

Facciamo lampeggiare un led

D sistema d allarme con sensori magnetici

CODIFICA E RICETRASMISSIONE DI UN SEGNALE

Esercitazione Monitoraggio temperatura via WEB mediante Arduino YUN

Relazione progetto Arduino

La sintassi di Arduino

CORSO ARDUINO. Jacopo Belli Giulio Fieramosca Luca Mattii GOLEM Jacopo Belli Giulio Fieramosca Luca Mattii

Display OLED 128 x 64

ARDUINO UNO. Raccolta esercitazioni guidate 1 Led & Pulsati. IIS Aldini Valeriani Sirani - ROBOTS project Scheda 1 # 1 Materiale didattico

COME UTILIZZARE IL SENSORE DI TEMPERATURA TMP36

Termometro digitale. Ivancich Stefano

SENSORE AD ULTRASUONI HC-SR04 E ARDUINO

Display numerico con i LED

Alunna: Gennuso Ylenia classe VB a.s. 2014/2015

SENSORI OTTICI - FOTORESISTENZE

SOLUZIONE Soluzione: Schema a blocchi

MOTORE PASSO-PASSO CON VELOCITÀ REGOLABILE

Arduino. Led, pulsanti, PWM, tastierino, display sette segmenti, display LCD

Salvare i dati rilevati dai sensori di Arduino

CORSO ARDUINO. Corso ASEV Giulio Fieramosca Stefano Panichi. Lezione 3 PWM e motori. Stefano Panichi e Giulio Fieramosca

HP LED Driver Shield. EtherMania di Signorini Marco Via Cadore MALNATE (VA) P.I REA VA

Robot Beginner Kit con Arduino l elettronica

ELETTRONICA CON ARDUINO

TM1638 BOARD con ARDUINO

CORSO ARDUINO. Jacopo Belli Giulio Fieramosca Luca Mattii GOLEM Jacopo Belli Giulio Fieramosca Luca Mattii

L'alfabeto di Arduino

Prof. Capuzzimati Mario - ITIS Magistri Cumacini - Como MICROCONTROLLORE

8^ parte: Pilotare Motori passo-passo bipolari usando l integrato SN754410NE. Author: Ing. Sebastiano Giannitto (ITIS M.

Corso Arduino Maggio Riccardo Binetti Lezione 1 - Blinking LEDs with style

Cablaggio ponte H con integrato L293B

Per vedere tutti i tutorial:

Programming with arduino. Lesson 10/05/2017

FC-51: IR Infrared Obstacle Detection Sensor Module 2-30cm

Relazione progetto Arduino

Progetto per il corso di Microcontrollori: Gestore Ambientale

DISPLAY LCD I2C (PCF8574T) ARDUINO

Programmazione di Base Variabili Array Funzioni Strutture di controllo. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

La programmazione di Arduino

Come utilizzare il modulo ESP8266 per comodare Arduino da Smartphone

Questo sistema si è poi diffuso in tutto il mondo, soprattutto in ambito didattico e hobbistico. Arduino mette a disposizione:

IZ1MHN e IW1ALX. Prima di iniziare. Domande sulla lezione scorsa? Come è andato il compito a casa?

Транскрипт:

KeyPad LCD Shield ( blue ) https://www.dfrobot.com/wiki/index.php/arduino_lcd_keypad_shield_(sku:_dfr0009) LCD alfanumerico 16 2 (16 caratteri per due righe) e una piccola tastiera composta da 5 pulsanti, siglati UP / DOWN / LEFT / RIGHT e SELECT. E possibile pilotare il display LCD utilizzando la libreria LiquidCrystal prestando attenzione ad indicare i corretti collegamenti: #include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); Per evitare di utilizzare troppi PIN, tutti i pulsanti sono collegati ad un unico PIN di input analogico di Arduino, secondo il seguente schema: Leggendo il valore di tensione presente sul PIN AD0 è quindi possibile capire quale pulsante è stato premuto: int read_buttons() { int adc_key_in = analogread(0); if (adc_key_in > 1000) return btnnone; if (adc_key_in < 50) return btnright; if (adc_key_in < 195) return btnup; if (adc_key_in < 380) return btndown; if (adc_key_in < 555) return btnleft; if (adc_key_in < 790) return btnselect; Esempio 1 : #include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); #defne btnright 0 #defne btnup 1 #defne btndown 2 #defne btnleft 3 #defne btnselect 4 #defne btnnone 5 int read_buttons() { int adc_key_in = analogread(0); if (adc_key_in > 1000) return btnnone; if (adc_key_in < 50) return btnright; if (adc_key_in < 195) return btnup; if (adc_key_in < 380) return btndown; if (adc_key_in < 555) return btnleft;

if (adc_key_in < 790) return btnselect; void setup() { lcd.begin(16, 2); lcd.setcursor(0,0); lcd.print("keypad demo"); void loop() { lcd.setcursor(0,1); lcd.print("pressed:"); int buttons = read_buttons(); lcd.setcursor(9, 1); if(buttons == btnright) lcd.print("right "); else if(buttons == btnleft) lcd.print("left "); else if(buttons == btnup) lcd.print("up "); else if(buttons == btndown) lcd.print("down "); else if(buttons == btnselect) lcd.print("select"); else if(buttons == btnnone) lcd.print("none "); E' inoltre presente l estensione dei pin A1-A5 con afancati per ciascuno due pin: uno connesso al polo positivo ed uno connesso al polo negativo: La piedinatura aggiuntiva permette di collegare un sensore che necessiti di alimentazione, ad esempio un potenziometro da 10K che necessita 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, così con un solo pin analogico (A0) si può riconoscere la pressione di uno dei 5 pulsanti dal valore letto su tale pin dal DAC a 10Bit di arduino. I valori letti saranno 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 riportati sono più abbondanti del valore reale letto, ciò è dovuto alla diferente costruzione degli shield e dalle olleranze delle resistenze. Scrivere uno sketch che valuti il valore letto sul pin A0 e lo trasformi nella pressione di un pulsante. LCD della Keypad il display montato sulla keypad LCD è un 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 Nella keypad LCD ciascun pin di segnale Data ( Dx ) è collegato al pin di uguale numero di Arduino.

A cosa serve conoscere questi dati? Semplice a inizializzare la classeliquidcrystal con la seguente linea: LiquidCrystal lcd(8,9,4,5,6,7); Esempio2 #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; include della LiquidCrystal.h (libreria che 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 permette di regolare l intensità della retro illuminazione del display LCD consentendoti di spegnere l LCD. 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. Se i valori letti sulla tua keypad LCD per ciascun pulsante sono diferenti,modificare i valori di min e max corrispondenti. 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; Keypad LCD version 1.0 vs 1.1 Le due KeyPad LCD sono apparentemente uguali, e nel caso queste diferenze comportano il malfunzionamento, sono diferenti in : il modello dei pulsanti la disposizione dei contatti del connettore A1-A5 i valori di resistenza letti da arduino quando premi i pulsanti Il modello dei pulsanti della keypad LCD versione 1.0 e 1.1 La versione 1.0 presenta tutti i 6 pulsanti delle medesime dimensioni, mentre la versione 1.1 ha il tasto reset di colore diferente e altezza inferiore: La disposizione dei contatti della keypad LCD La keypad lcd versione 1.0 e versione 1.1 è la presenza di una fila di contatti in prossimità degli ingressi analogici Arduino in cui per ciascun pin A1A5 trovi i contatti Gnd e +5v abbinati, se vuoi collegare ad esempio sensori a 3 fili ( potenziometri, sensori ottici, pulsanti, ecc ) Tra le due verioni della keypad lcd diferisce la disposizione dei pin +5v e Gnd. In figura la versione 1.0 ( sinistra ) presenta il terminale Gnd centrale ed il positivo in alto, mentre la vesione 1.1 ( destra ) presenta il polo +5v al centro ed il Gnd in alto. Il pin di segnale ( bleu ) è sempre nella medesima posizione. I valori di resistenza letti da arduino Tra le diferenze principali delle due versioni è il cambio dei valori letti da arduino alla pressione di ciascun pulsante. Se lato arduino ti aspetti che la pressione del pulsante SELECT ti restituisca valore 816 ( versione 1.0 ) il tuo sketch non funzionerà se la keypad lcd è la versione 1.1 in quanto il valore restituito dal pulsante SELECT è 506. Per comprendere i valori prima di inserirli nel to progetto usare lo sketch fornito con l IDE arduino AnalogReadSerial che scrive sul monitor seriale il valore letto sul pin A0 a cui sono collegati tutti i pulsanti della keypad lcd versione 1.0

Sketch di test dei valori /* ecco lo sketch di esempio AnalogReadSerial Reads an analog input on pin 0, prints the result to the serial monitor. Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground. This example code is in the public domain. */ // the setup routine runs once when you press reset: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // the loop routine runs over and over again forever: void loop() { // read the input on analog pin 0: int sensorvalue = analogread(a0); // print out the value you read: Serial.println(sensorValue); delay(100); // delay in between reads for stability l esempio non fa altro che stabilire un canale di comunicazione seriale alla linea 12 e scriverci su il risultato del valore letto alla linea 18 sul pin A0 con il comando analogread(a0)

/* Esempio 3 LCD Keypad Shield */ #include <LiquidCrystal.h> // LIBRERIA PER UTILIZZO LCD

#define BACKLIGHT 10 // PIN DIGITALE PER CONTROLLO RETROILLUMINAZIONE int BUTTON; // VARIABILE DI GESTIONE DEI PULSANTI int CLICK; // VARIABILE DI GESTIONE DEI PULSANTI unsigned long STARTINGTIMELCD; // GESTIONE TIMEOUT LCD const unsigned long TIMEOUTLCD = 2000; // GESTIONE TIMEOUT LCD (2000Ms = 2 Sec) // INIZIALIZZO LA LIBRERIA CON I RELATIVI PIN LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void setup() { // IMPOSTAZIONI DI STARTUP DEL KEYPAD LCD pinmode(backlight, OUTPUT); // SET DEL PIN DELLA RETRIULLUMINAZIONE digitalwrite(backlight, LOW); // SPENGO RETROILLUMINAZIONE lcd.begin(16, 2); // INIZIALIZZO LCD, 16 (DA 0 A 15) CARATTERI PER 2 RIGHE (0 e 1) lcd.setcursor(0, 0); // MI POSIZIONE SUL DISPLAY lcd.print("dom.spicciola.it"); // SCRIVO UN MESSAGGIO lcd.nodisplay(); // SPENGO LCD void loop() { // GESTIONE TIMEOUT: DOPO 2 SECONDI DALL' ACCENSIONE SPENGO LCD if ((millis() - STARTINGTIMELCD) > TIMEOUTLCD) { digitalwrite(backlight, LOW); // SPENGO LA RETROILLUMINAZIONE lcd.nodisplay(); // SPENGO LCD // GESTIONE AZIONI A SEGUITO PRESSIONE DEI PULSANTI BUTTON = ctrlbutton(click); // ASSEGNO ALLA VARIABILE BUTTON IL VALORE PASSATO DALLA ROUTINE lcd.setcursor(0, 1); // INDICO DI INIZIARE A SCRIVERE AL CARATTERE 0 DELLA RIGA 1 if (BUTTON!= 0) {// VERIFICO SE E' STATO PREMUTO UN PULSANTE STARTINGTIMELCD = millis(); // IMPOSTO IL CLOCK PER IL TIMEOUT switch (BUTTON) { case 1: lcd.print("hai PREMUTO Dx "); // SCRIVO SU LCD case 2: lcd.print("hai PREMUTO Su "); // SCRIVO SU LCD case 3: lcd.print("hai PREMUTO Giu' "); // SCRIVO SU LCD case 4: lcd.print("hai PREMUTO Sx "); // SCRIVO SU LCD case 5: lcd.print("hai PREMUTO Slct"); // SCRIVO SU LCD // SE E' STATO PREMUTO UN PULSANTE ACCENDO RETROILLUMINZIONE E LCD if (BUTTON!= 0) { // VERIFICO SE E' STATO PREMUTO UN PULSANTE digitalwrite(backlight, HIGH); // ACCENDO LA RETROILLUMINAZIONE lcd.display(); // ACCENDO LCD STARTINGTIMELCD = millis(); // INIZIO TIMEOUT PER RETROILLUMINAZIONE // ROUTINE DI CONTROLLO PRESSIONE PULSANTI int ctrlbutton(int CLICK) { int x; x = analogread (0); // leggo il valore del pin analogico 0 if (x < 60) { return 1; else if (x < 200) { return 2; else if (x < 400) { return 3; else if (x < 600) { return 4; else if (x < 800) { return 5; return 0; https://diyhacking.com/arduino-keyless-door-lock-system-keypad-lcd/ http://www.hackshed.co.uk/arduino-lcd-keypad-shield-basic-menu-system/ https://www.hackster.io/vandenbrande/arduino-lcd-1602a-keypad-lcd-shield-relay-control-d636a1