Популярная плата расширения для Arduino, с не менее популярным текстовым экраном WH1602A и несколькими кнопками.
Характеристики:
Текстовый LCD экран WH1602A с возможностью регулировки контрастности и яркости подсветки.
Резистивная клавиатура из пяти кнопок и кнопка Reset.
Дополнительные «штырьки» для подключение периферии, разъем ICSP.
Подключение:
Совместим со всеми arduino совместимыми платами,которые имеют стандартное для arduino подключение шилдов, за одним небольшим исключением, разъем ICSP на шилде не дублирует ICSP платы, а соединен с 11, 12 и 13 цифровыми выходами, работать он будет с платами серии UNO.
Резистивная клавиатура подключена к аналоговому входу А0, клавиатура представляет собой делитель напряжения с группой резисторов, сопротивление делителя и напряжение на входе А0 зависит от нажатой кнопки. Более подробно на схеме ниже.
Регулировка яркости подсветки экрана осуществляется ШИМ сигналом с 10 цифрового выхода ардуино, также можно полностью выключить подсветку подав на 10 выход логическую единицу.
Все задействованные выходы, включая выходы LCD экрана указаны в таблице ниже.
Пин
Функция
A0
Резистивная клавиатура, кнопки select, up, right, down and left
D4
LCD 1602 — DB4
D5
LCD 1602 — DB5
D6
LCD 1602 — DB6
D7
LCD 1602 — DB7
D8
LCD 1602 — RS
D9
LCD 1602 — Enable
D10
Управление подсветкой LCD 1602
Основные элементы шилда:
Дополнительные штырьки для подключения периферии, обычно не распаяны.
Софт:
Пример для работы с шилдом от производителя:
Код примера
//Sample using LiquidCrystal library#include<LiquidCrystal.h>/*******************************************************This program will test the LCD panel and the buttonsMark Bramwell, July 2010********************************************************/// select the pins used on the LCD panelLiquidCrystallcd(8,9,4,5,6,7);// define some values used by the panel and buttonsintlcd_key=0;intadc_key_in=0;#definebtnRIGHT0#definebtnUP1#definebtnDOWN2#definebtnLEFT3#definebtnSELECT4#definebtnNONE5// read the buttonsintread_LCD_buttons(){adc_key_in=analogRead(0);// read the value from the sensor // my buttons when read are centered at these valies: 0, 144, 329, 504, 741// we add approx 50 to those values and check to see if we are closeif(adc_key_in>1000)returnbtnNONE;// We make this the 1st option for speed reasons since it will be the most likely result// For V1.1 us this thresholdif(adc_key_in<50)returnbtnRIGHT;if(adc_key_in<250)returnbtnUP;if(adc_key_in<450)returnbtnDOWN;if(adc_key_in<650)returnbtnLEFT;if(adc_key_in<850)returnbtnSELECT;// For V1.0 comment the other threshold and use the one below:/* 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; */returnbtnNONE;// when all others fail, return this...}voidsetup(){lcd.begin(16,2);// start the librarylcd.setCursor(0,0);lcd.print("Push the buttons");// print a simple message}voidloop(){lcd.setCursor(9,1);// move cursor to second line "1" and 9 spaces overlcd.print(millis()/1000);// display seconds elapsed since power-uplcd.setCursor(0,1);// move to the begining of the second linelcd_key=read_LCD_buttons();// read the buttonsswitch(lcd_key)// depending on which button was pushed, we perform an action{casebtnRIGHT:{lcd.print("RIGHT ");break;}casebtnLEFT:{lcd.print("LEFT ");break;}casebtnUP:{lcd.print("UP ");break;}casebtnDOWN:{lcd.print("DOWN ");break;}casebtnSELECT:{lcd.print("SELECT");break;}casebtnNONE:{lcd.print("NONE ");break;}}}