8 (800) 350-30-16

Подключение LCD Keypad Shield

Дата: / Категория: Дисплеи / Автор: DOC_tr

Этим уроком я продолжаю серию про шилды. Сегодня мы будем подключать LCD Keypad Shield.

Что он из себя представляет? Да ничего особенного - просто экран с кнопками, который можно подключить без лишних проводов.

Единственной особенностью является потенциометр на плате. Поначалу я не мог понять, для чего он нужен, но потом выяснилось, что он меняет цвет текста. Если его подкручивать, то цвет теста может быть белый, черный, серый, и голубой (или прозрачный - я так и не понял ;)

Собственно вот он:

Подключать мы будем его к Arduino Mega (вы уже и сами догадались по фотографии).

Сложностей при подключении просто быть не может - расположение ног само подскажет вам как и куда правильно его воткнуть.

После установки вся наша конструкция будет выглядеть следующим образом:


А теперь приступим к написанию кода: для начала проверим дисплей на работоспособность.

#include <Wire.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7 );

void setup()
{
lcd.begin(16, 2);
lcd.print("https://ROBOM.ru");
Serial.begin(9600);
}

void loop(){}

И получим, как видно из кода, следующее:

Если подкрутить потенциометр, то можно изменить цвет шрифта с белого на черный:

Итак, экран работает. Перейдем к нажатию на кнопки на шилде.

Они работают как-то странно и выдают мне частенько разные значения, но, после тестов, я определился, что от 0 до 100 - право, от 200 до 400 - лево и так далее.

Полный список диапазонов вы можете посмотреть в следующем скетче:

#include <Wire.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7 );

int button;

int getButt()
{
int buttonValue = analogRead(0); // считываем значения с аналогового входа(A0)
Serial.println(buttonValue);
if (buttonValue < 100) {
return 1;
}
else if (buttonValue < 200) {
return 2;
}
else if (buttonValue < 400){
return 3;
}
else if (buttonValue < 600){
return 4;
}
else if (buttonValue < 800){
return 5;
}
return 0;
}

void setup()
{
lcd.begin(16, 2);
lcd.print("https://ROBOM.ru");
Serial.begin(9600);
}

void loop()
{
button = getButt();
if(button != 0){ // если кнопка нажата то очищаем экран
lcd.setCursor(0, 0);
lcd.clear();
}
switch (button)
{
case 1:
lcd.print("RIGHT");
break;
case 2:
lcd.print("LEFT");
break;
case 3:
lcd.print("UP");
break;
case 4:
lcd.print("DOWN");
break;
case 5:
lcd.print("SELECT");
break;
}
}

Код достаточно простой, поэтому фото приводить не буду, но есть одно небольшое но - когда кнопка зажата, вызов очистки и отрисовки экрана происходит каждый раз, вследствие этого экран начинает переливаться как на фото снизу:

Лечится все это просто - добавляем последнюю нажатую кнопку и сверяемся с ней. Если изменений не было, то не делаем ничего.

int button, last_button; // так должна выглядеть строка 6

// меняем строку 39 на следующий код
button = getButt();
if(button == last_button){
return;
}
last_button = button;

Как видите, в отличии от сенсорного дисплея, данный дисплей подключается очень легко.

Теги: #Arduino MEGA, #Shield, #LCD, #LCD keypad

Ваша оценка:

Рейтинг: 10.0 (Оценок: 2)

Комментарии (1):

diversant666666
2016-11-27 19:57
здравствуйте! почему мой дисплей не работает с этими пинами(LiquidCrystal lcd(8, 9, 4, 5, 6, 7 );)

Комментарий:

Copyright © RobOM.ru 2016 г. Все права защищены