LCD Keypad Shield – одна из самых популярных плат расширения для ардуино. Она может существенно упростить работу с жидкокристаллическими экранами, позволяя разработчику сосредоточиться на других задачах. В этой статье мы рассмотрим шилд LCD Keypad Shield для дисплея TC 1602 со встроенными 5 управляющими кнопками. Узнаем, как работает эта плата, как ее можно подключить к ардуино, рассмотрим несколько примеров скетчей в реальных проектах. Если вы не знаете, что такое шилд, то можете предварительно прочитать статью о платах расширениях и шилдах ардуино.
Описание шилда LCD Keypad Shield
Рассматриваемый шилд представляет собой плату с встроенными модулями индикации и управления. Индикация осуществляется с помощью LCD-дисплея TC1602, управление – через встроенные кнопки. Есть возможность регулировки яркости дисплея прямо на плате с помощью подстроечного резистора. Плата снабжена разъемами, в которые могут быть подключены другие устройства, например, датчики. Для работы с экраном используются пины 4-10, для определения нажатия кнопок – только один аналоговый пин A0. Свободными являются цифровые пины 0-3, 11-13 и аналоговые пины A1-A5.
Основные области применения шилда: создание управляющих модулей, реализующих настройки устройства с помощью интерфейса меню. Экран шилда можно использовать для вывода информации, получаемой с датчиков, с возможностью выполнения пользователем каких-либо действий путем нажатия на встроенные кнопки. Естественно, можно найти и другие способы использования платы: например, реализовать игру типа тетрис.
Технические характеристики
- Тип дисплея: LCD 1602, символьный, 4-х битный режим.
- Разрешение: 16×2 (две строки по 16 символов каждая). Знакоместо 5×8 точек.
- Цвет дисплея: синий (возможны варианты с желтым и зеленым цветом). Буквы белого цвета.
- Технология: STN, Transflective, Positive.
- Контроллер дисплея: HD44780U.
- Предельная частота обновления экрана: 5Гц
- Питание дисплея: 5 Вольт
- Кнопки: 6 кнопок (5 кнопок управления и Reset).
- Дополнительные элементы: регулировка яркости подсветки (потенциометр).
- Рабочая температура экрана: от -20 °С до +70 °С;
- Температура хранения экрана: от -30 °С до +80 °С.
Распиновка LCD shield для подключения к Arduino
Контакт дисплея LCD 1602 | Описание | Контакт на LCD Shield |
Пины LCD экрана | ||
GND | Земля | |
VDD | Питание 5В | |
Contrast | Управление контрастом | Потенциометр |
RS | Команды/Данные | 8 |
R/W | Чтение/Запись | |
Enable | Включение (активирование) | 9 |
DB0 | Не используется | |
DB1 | Не используется | |
DB2 | Не используется | |
DB3 | Не используется | |
DB4 | Дата 1 | 4 |
DB5 | Дата 2 | 5 |
DB6 | Дата 3 | 6 |
DB7 | Дата 4 | 7 |
Back LED + | Включение подсветки | 10 |
Back LED – | Питание подсветки | |
Пины для кнопок | ||
Кнопка UP | Управляющая кнопка | A0 |
Кнопка DOWN | Управляющая кнопка | A0 |
Кнопка LEFT | Управляющая кнопка | A0 |
Кнопка RIGHT | Управляющая кнопка | A0 |
Кнопка SELECT | Управляющая кнопка | A0 |
Reset | Перезагрузка платы | Reset |
ICSP | ICSP для перепрошивки встроенного микроконтроллера HD44780U | |
UART | Контакты для UART соединения | 0, 1 |
Дополнительные элементы шилда
- Индикаторный светодиод (включается при подключении питания к плате).
- Контактные площадки для подключения аналоговых устройств (GND, VSS, пин данных).
- Потенциометр для регулирования контрастностью экрана.
Подключение платы LCD Shield к Arduino
Подключение шилда очень простое – нужно попасть ножками в соответствующие разъемы платы ардуино и аккуратно совместить их. Ничего дополнительно подсоединять или припаивать не надо. Нужно помнить и учитывать тот факт, что часть пинов зарезервированы для управления дисплеем и кнопками и не может быть использована для других нужд! Для удобства подключения дополнительного оборудования на плате выведены дополнительные разъемы 5В и GND к каждой контактной площадке аналоговых пинов. Это, безусловно, упрощает работу с датчиками. Также можно подключать цифровые устройства через свободные пины 0-3 и 11-13. Подключив шилд, мы можем работать с экраном и кнопками на нем так же, как с отдельными устройствами, учитывая только номера пинов, к которым припаяны соответствующие контакты.
Скетч для экрана на Arduino LCD shield
Для работы с LCD экранами обычно используют популярную библиотеку LiquidCrystal . На этапе инициализации создается объект класса LiquidCrystal, в конструкторе которого мы указываем пины с подключенными контактами экрана. Для нашего шилда требуется использовать такой вариант: LiquidCrystal lcd(8, 9, 4, 5, 6, 7); Последовательность аргументов конструктора:
- RS (8)
- Enable (9)
- data(4)
- data(5)
- data(6)
- data(7)
Ничего сложного в работе с объектом нет. В setup() мы инициализируем объект, указывая ему количество символов и строк:
lcd.begin(16, 2);
Для вывода информации на дисплей используем метод print():
lcd.print (“Arduino Master!”);
Текст выведется в место текущего нахождения курсора (в начале работы скетча это первая строка и первый символ). Для указания произвольного положения курсора можно использовать функцию setCursor(<столбец>, <строка>):
lcd.setCursor(0, 0); // Первый символ первой строки lcd.setCursor(0, 1); // Первый символ второй строки lcd.setCursor(2, 1); // Третий символ второй строки
Кнопки LCD Keypad Shield
На плате присутствуют пять управляющих кнопок, работа с которыми ведется через один аналоговый пин A0. В шилде использован достаточно распространенный способ простого кодирования сигнала, при котором каждая кнопка формирует определенное значение напряжения, которое после АЦП преобразуется в соответствующее значение от 0 до 1023. Таким образом, мы можем передавать информацию о нажатии разных кнопок через один пин, считывая его при помощи функции analogRead();
Значения уровня сигнала на пине A0 в зависимости от выбранной кнопки:
Нажатие кнопки | Значение на аналоговом пине |
RIGHT | 0-100 |
UP | 100-200 |
DOWN | 200-400 |
LEFT | 400-600 |
SELECT | 600-800 |
Клавиша не нажата | 800-1023 |
Пример скетча работы с кнопками LCD Keypad Shield:
int keyAnalog = analogRead(A0); if (keyAnalog < 100) { // Значение меньше 100 – нажата кнопка right // Выполняем какое-то действие для кнопки вправо. } else if (keyAnalog < 200) { // Значение больше 100 (иначе мы бы вошли в предыдущий блок результата сравнения, но меньше 200 – нажата кнопка UP // Выполняем какое-то действие для кнопки вверх } else if (keyAnalog < 400) { // Значение больше 200, но меньше 400 – нажата кнопка DOWN // Выполняем действие для кнопки вниз } else if (keyAnalog < 600) { // Значение больше 400, но меньше 600 – нажата кнопка LEFT // Выполняем действие для кнопки влево } else if (keyAnalog < 800) { // Значение больше 600, но меньше 800 – нажата кнопка SELECT // Выполняем действие для кнопки выбора пункта меню } else { // Все остальные значения (до 1023) будут означать, что нажатий не было }
В выбранном методе кодирования есть два главных недостатка:
- Нельзя отслеживать одновременное нажатие нескольких кнопок;
- Возможные искажения сигнала могут привести к ложным срабатываниям.
Нужно учитывать эти ограничения, выбирая этот шлд в своих проектах, если вы планируете использовать устройство в системах с большим количеством помех, которые могут искажать сигнал на входе A0, из-за чего АЦП может сформировать ошибочное значение и скетч в результате выполнит другие инструкции.
Пример скетча для работы с экраном и кнопками меню
В данном примере мы определяем текущую нажатую кнопку и выводим ее название на экран. Обратите внимание, что для удобства мы выделили операцию определения кнопки в отдельную функцию. Также в скетче мы выделили отдельный метод для вывода текста на экран. В ней мы показываем сообщение (параметр message) и очищаем его через секунду. Нужно помнить, что в течение этой секунды нажатия кнопок не обрабатываются
#include LiquidCrystal lcd(8, 9, 4, 5, 6, 7); #define BTN_UP 1 #define BTN_DOWN 2 #define BTN_LEFT 3 #define BTN_RIGHT 4 #define BTN_SELECT 5 #define BTN_NONE 10 int detectButton() { int keyAnalog = analogRead(A0); if (keyAnalog < 100) { // Значение меньше 100 – нажата кнопка right return BTN_RIGHT; } else if (keyAnalog < 200) { // Значение больше 100 (иначе мы бы вошли в предыдущий блок результата сравнения, но меньше 200 – нажата кнопка UP return BTN_UP; } else if (keyAnalog < 400) { // Значение больше 200, но меньше 400 – нажата кнопка DOWN return BTN_DOWN; } else if (keyAnalog < 600) { // Значение больше 400, но меньше 600 – нажата кнопка LEFT return BTN_LEFT; } else if (keyAnalog < 800) { // Значение больше 600, но меньше 800 – нажата кнопка SELECT return BTN_SELECT; } else { // Все остальные значения (до 1023) будут означать, что нажатий не было return BTN_NONE; } } void clearLine(int line){ lcd.setCursor(0, 1); lcd.print(" "); } void printDisplay(String message){ Serial.println(message); lcd.setCursor(0, 1); lcd.print(message); delay(1000); clearLine(1); } void setup() { Serial.begin(9600); lcd.begin(16, 2); lcd.print("Arduino Master"); delay(3000); lcd.setCursor(0, 0); lcd.print("Arduino Master"); } void loop() { int button = detectButton(); switch (button) { case BTN_UP: printDisplay("UP"); break; case BTN_DOWN: printDisplay("DOWN"); break; case BTN_LEFT: printDisplay("LEFT"); break; case BTN_RIGHT: printDisplay("RIGHT"); break; case BTN_SELECT: printDisplay("SELECT"); break; default: //printDisplay("Press any key"); break; } }
Краткие выводы по плате расширения LCD keypad shield
Плата расширения LCD Keypad достаточно популярная, она проста и удобна для использования в проектах Arduino. Сегодня ее можно легко купить практически в любом интернет-магазине.
Плюсы LCD Shield:
- Упрощает подключение жидкокристаллического экрана.
- Уменьшает общие размеры устройства, т.к. убирает выступающие провода и монтажные платы.
- Сокращает количество ошибок, связанных с неправильным монтажом и подключением.
- Добавляет функциональность кнопочного управления, если на плате установлены кнопки (LCD Keypad shield).
Недостатки:
- Стоимость шилда выше, чем стоимость отдельного экрана.
- Не всегда нужна дополнительная функциональность в виде кнопок.
- Шилд потребляет больше энергии, чем отдельные элементы платы.
Подключение LCD Keypad Shield к Arduino
- Подробности
- Создано: 19 августа 2015
Будем подключать LCD Keypad Shield к Arduino UNO R3. На шилде имеются кнопки, вот и попробуем с помощью них манипулировать нашей Ардуиной и результат выводить на дисплей.
Характеристики шилда
- Дисплей синего цвета с белыми буквами. Регулировка яркости подсветки
- Тип дисплея: Символьный
- Разрешение:16×2
- 6 кнопок
- Питание дисплея: 5 Вольт
- Работа дисплея: в 4 битном режиме
Подключение
Как и любой другой шилд подключается элементарно, просто втыкаем туда куда втыкается, ошибиться весьма трудно. При соединении с Arduino UNO R3 обе платы окажутся ровно одна под другой. Шилд совместим с Arduino (Diecimila, Duemilanove, UNO, Mega, Mega2560, Mega ADK).
В состав платы входит LCD дисплей и 6 кнопок. Пины 4, 5, 6, 7, 8, 9 и 10 задействованы для управления LCD. На аналоговый пин 0 считываются сигналы с кнопок. Дисплей в данной сборке работает в четырех битном режиме.
Скетч
В данном примере на дисплей будут выводиться направления (вверх, вниз, влево, вправо) и кнопка выбора, соответствующие нажатым кнопкам. Для работы потребуется библиотека LiquidCrystal.
#include<Wire.h>// добавляем необходимые библиотеки#include<LiquidCrystal.h>LiquidCrystallcd(8,9,4,5,6,7);// Нажатые кнопкиintbutton;constintBUTTON_NONE =;constintBUTTON_RIGHT =1;constintBUTTON_UP =2;constintBUTTON_DOWN =3;constintBUTTON_LEFT =4;constintBUTTON_SELECT=5;intgetPressedButton(){ intbuttonValue=analogRead();// считываем значения с аналогового входа(A0) if(buttonValue<100){ returnBUTTON_RIGHT; } elseif(buttonValue<200){ returnBUTTON_UP; } elseif(buttonValue<400){ returnBUTTON_DOWN; } elseif(buttonValue<600){ returnBUTTON_LEFT; } elseif(buttonValue<800){ returnBUTTON_SELECT; } returnBUTTON_NONE;}voidsetup(){ lcd.begin(16,2); lcd.print("www.2150692.ru");}voidloop(){ button=getPressedButton(); switch(button) { caseBUTTON_RIGHT:// при нажатии кнопки выводим следующий текст lcd.setCursor(,); lcd.print(" "); lcd.setCursor(,); lcd.print("BUTTON: RIGHT"); break; caseBUTTON_LEFT: lcd.setCursor(,); lcd.print(" "); lcd.setCursor(,); lcd.print("BUTTON: LEFT"); break; caseBUTTON_UP: lcd.setCursor(,); lcd.print(" "); lcd.setCursor(,); lcd.print("BUTTON: UP"); break; caseBUTTON_DOWN: lcd.setCursor(,); lcd.print(" "); lcd.setCursor(,); lcd.print("BUTTON: DOWN"); break; caseBUTTON_SELECT: lcd.setCursor(,); lcd.print(" "); lcd.setCursor(,); lcd.print("BUTTON: SELECT"); break; }}
Добавить комментарий
Технические характеристики
- Тип дисплея: LCD 1602, символьный, 4-х битный режим.
- Разрешение: 16×2 (две строки по 16 символов каждая). Знакоместо 5×8 точек.
- Цвет дисплея: синий (возможны варианты с желтым и зеленым цветом). Буквы белого цвета.
- Технология: STN, Transflective, Positive.
- Контроллер дисплея: HD44780U.
- Предельная частота обновления экрана: 5Гц
- Питание дисплея: 5 Вольт
- Кнопки: 6 кнопок (5 кнопок управления и Reset).
- Дополнительные элементы: регулировка яркости подсветки (потенциометр).
- Рабочая температура экрана: от -20 °С до +70 °С;
- Температура хранения экрана: от -30 °С до +80 °С.
Распиновка LCD shield для подключения к Arduino
Контакт дисплея LCD 1602 | Описание | Контакт на LCD Shield |
Пины LCD экрана | ||
GND | Земля | |
VDD | Питание 5В | |
Contrast | Управление контрастом | Потенциометр |
RS | Команды/Данные | 8 |
R/W | Чтение/Запись | |
Enable | Включение (активирование) | 9 |
DB0 | Не используется | |
DB1 | Не используется | |
DB2 | Не используется | |
DB3 | Не используется | |
DB4 | Дата 1 | 4 |
DB5 | Дата 2 | 5 |
DB6 | Дата 3 | 6 |
DB7 | Дата 4 | 7 |
Back LED + | Включение подсветки | 10 |
Back LED — | Питание подсветки | |
Пины для кнопок | ||
Кнопка UP | Управляющая кнопка | A0 |
Кнопка DOWN | Управляющая кнопка | A0 |
Кнопка LEFT | Управляющая кнопка | A0 |
Кнопка RIGHT | Управляющая кнопка | A0 |
Кнопка SELECT | Управляющая кнопка | A0 |
Reset | Перезагрузка платы | Reset |
ICSP | ICSP для перепрошивки встроенного микроконтроллера HD44780U | |
UART | Контакты для UART соединения | 0, 1 |
Дополнительные элементы шилда
- Индикаторный светодиод (включается при подключении питания к плате).
- Контактные площадки для подключения аналоговых устройств (GND, VSS, пин данных).
- Потенциометр для регулирования контрастностью экрана.
Подключение платы LCD Shield к Arduino
Скетч для экрана на Arduino LCD shield
Для работы с LCD экранами обычно используют популярную библиотеку LiquidCrystal. На этапе инициализации создается объект класса LiquidCrystal, в конструкторе которого мы указываем пины с подключенными контактами экрана. Для нашего шилда требуется использовать такой вариант: LiquidCrystal lcd(8, 9, 4, 5, 6, 7).
Последовательность аргументов конструктора:
- RS (8)
- Enable (9)
- data(4)
- data(5)
- data(6)
- data(7)
Ничего сложного в работе с объектом нет. В setup() мы инициализируем объект, указывая ему количество символов и строк:
Для вывода информации на дисплей используем метод print():
Текст выведется в место текущего нахождения курсора (в начале работы скетча это первая строка и первый символ). Для указания произвольного положения курсора можно использовать функцию setCursor(<столбец>, <строка>):
На плате присутствуют пять управляющих кнопок, работа с которыми ведется через один аналоговый пин A0. В шилде использован достаточно распространенный способ простого кодирования сигнала, при котором каждая кнопка формирует определенное значение напряжения, которое после АЦП преобразуется в соответствующее значение от 0 до 1023. Таким образом, мы можем передавать информацию о нажатии разных кнопок через один пин, считывая его при помощи функции analogRead().
Значения уровня сигнала на пине A0 в зависимости от выбранной кнопки:
Нажатие кнопки | Значение на аналоговом пине |
RIGHT | 0-100 |
UP | 100-200 |
DOWN | 200-400 |
LEFT | 400-600 |
SELECT | 600-800 |
Клавиша не нажата | 800-1023 |
Пример скетча работы с кнопками LCD Keypad Shield:
Оригинал статьи на сайте ArduinoMaster.Ru.
Купить LCD Keypad Shield в интернет-магазине Arduinka.Pro
Похожие статьи
Управление Arduino с помощью джойстикаАдресная светодиодная лента WS2812 и ArduinoУправление сервоприводом на ArduinoИспользуемые источники:
- https://arduinomaster.ru/platy-arduino/arduino-lcd-keypad-shield/
- https://2150692.ru/faq/57-podklyuchenie-lcd-keypad-shield-k-arduino
- https://arduinka.pro/blog/podklyuchenie/podklyuchenie-modul-lcd-keypad-shield-1602-k-arduino/