1602 lcd keypad shield arduino часы. LCD часы, сигнализация и таймер с детектором движения на Arduino

Описание LCD Keypad Shield

LCD Keypad Shield – оригинальный дополнительный модуль, организующий работу с ЖК индикаторами, совместимыми с HD44780 интерфейсом, и пятикнопочной клавиатурой по шине SPI или I2C.

Модуль основан на микросхеме MCP23S17 или MCP23017 (16-разрядный расширитель портов ввода/вывода с SPI или I2C интерфейсом, соответственно).

Комплектация

Модуль LCD Keypad Shield поставляется либо в собраном виде (в вариантах для шин SPI или I2C), либо без монтажа штыревых компонентов (также в вариантах для шин SPI или I2C). К модулю прилагается вилка PLS-16.

ЖК-дисплей в комплект поставки не входит!

LCD Keypad Shield SPI 1000 р. 750 р. В корзину

форме заказа .

LCD Keypad Shield на шину SPI (с микросхемой MCP23S17).

LCD Keypad Shield I2C 1000 р. 750 р. В корзину

Внимание! У Вас отключено выполнение JavaScript. Нормальная работа системы заказа и корзины невозможна. Если по каким-то причинам Вы не можете включить JavaScript, просто перечислите заказываемые товары в форме заказа .

LCD Keypad Shield на шину I2C (с микросхемой MCP23017).


LCD Keypad Shield SPI DIY 950 р. 720 р. В корзину

Внимание! У Вас отключено выполнение JavaScript. Нормальная работа системы заказа и корзины невозможна. Если по каким-то причинам Вы не можете включить JavaScript, просто перечислите заказываемые товары в форме заказа .

LCD Keypad Shield DIY (без монтажа штыревых компонентов) на шину SPI (с микросхемами MCP23S17).

LCD Keypad Shield I2C DIY 950 р. 720 р. В корзину

Внимание! У Вас отключено выполнение JavaScript. Нормальная работа системы заказа и корзины невозможна. Если по каким-то причинам Вы не можете включить JavaScript, просто перечислите заказываемые товары в форме заказа .

LCD Keypad Shield DIY (без монтажа штыревых компонентов) на шину I2C (с микросхемами MCP23S17).

ЖК индикатор WH1602B-YYK-CTK PLS 550 р. 400 р. В корзину

Внимание! У Вас отключено выполнение JavaScript. Нормальная работа системы заказа и корзины невозможна. Если по каким-то причинам Вы не можете включить JavaScript, просто перечислите заказываемые товары в форме заказа .

ЖК индикатор 16x2 WH1602B-YYK-CTK c запаянными "низкими" (4мм) штыревыми разъемами - специально для LCD Keypad Shield.

Технические характеристики

Основные технические характеристики LCD Keypad Shield:

  • интерфейс с ЖК индикатором: HD44780 совместимый, 4-битный, 16-pin;
  • доступные программно выводы интерфейса HD44780: RS, RW, E, DB4-DB7, подсветка;
  • интерфейс с платой Arduino: SPI или I2C (в зависимости от выбранной модификации модуля);
  • 5 кнопок, опрашиваемых программно по шине SPI или I2C, кнопка сброса;
  • разъемы для ЖК индикатора и внешних кнопок позволяют разнести плату Arduino и ЖК индикатор с кнопками;
  • модулю задается трехбитный адрес на шине (с помощью перемычек), что позволяет размещать на одной шине до 8 устройств с аналогичными микросхемами;
  • возможность выбора с помощью перемычки номера соответствующего выхода микроконтроллера Arduino (digital pin 8, 9 или 10) для сигнала CS шины SPI;
  • в модуле применены "проходные" разъемы, позволяющие состыковывать несколько модулей без сдвига относительно платы Arduino;

Перед началом работы с дополнительным модулем Expander Shield рекомендуем ознакомиться с его принципиальной электрической схемой.

Подготовка модуля к работе

На выводы модуля могут быть одеты транспортировочные фиксаторы, которые необходимо снять перед началом работы.

Выбор адреса модуля на шине

Модуль основан на микросхеме MCP23S17/MCP23017, для которой необходимо выбрать младшие три бита адреса на шине SPI/I2C. Биты выбираются с помощью перемычек на разъеме Address притягиванием битов 0, 1, 2 к "земле" (Gnd) или +5В (5V).

Адрес каждой микросхемы должен быть уникальным, и на одной шине можно разместить до 8 микросхем.

Таким образом, возможно, к примеру, подключение к плате Arduino восьми модулей LCD Keypad Shield, или четырех модулей LCD Keypad Shield и двух Expander Shield. Если применять I2C версии модулей, то вся конструкция будет задействовать всего 2 вывода платы Arduino!

При подключении нескольких модулей LCD Keypad Shield сами ЖК-дисплеи могут подключаються, например, с помощью шлейфов от дисковода, и угловых вилок PLS-16R.

При подключении нескольких модулей следует обратить внимание на то, что подсветка потребляет довольно большой ток - порядка 100-150 мА.

Управление подтяжкой шины I2C

Для I2C модификации модуля с помощью перемычек в левой части разъема XS включаются или отключаются резисторы, подтягивающие шину к +5В. Как правило, подтягивающие резисторы должны быть подключены если на шине I2C только одно устройство. Если устройств несколько, то резисторы подключаются только у одного из устройств.

Ниже представлено состояние перемычек при включенных подтягивающих резисторах и при отключенных. Также, для отключения подтягивающих резисторов можно просто снять перемычки.

Выбор номера вывода для управления сигналом CS шины SPI

Для SPI модификации модуля необходимо выбрать вывод микроконтроллера Freeduino/Arduino, используемый в качестве сигнала CS. Обычно используется вывод 10, что соответствует крайнему левому положению перемычки на разъеме CS. Переставляя перемычку на одно из двух других положений, возможен выбор 9 и 8 вывода соответственно.

Настройка контрастности дисплея

Для настройки контрастности дисплея используется подстроечный резистор R3. При неправильно настроенной контрастности на дисплее может быть совсем не видно символов, или видно очень плохо.

Библиотека MCP23xxx

Для упрощения работы с этим, и рядом других модулей, разработана библиотека MCP23xxx, предоставляющая простой интерфейс к функционалу микросхем серии MCP23xxx. Библиотека доступна для свободного скачивания: Библиотека совместима с ПО Arduino версии 1.0.5 (также предполагается совместимость и с более поздними версиями).

Фактически, это набор из двух библиотек: MCP23xxx и LiquidCrystal_MCP23x17.

Более подробно установка библиотек описана в разделе подключение библиотек . Структура каталогов папки libraries после установки должна стать такой:

/libraries/LiquidCrystal_MCP23x17
/libraries/MCP23xxx

В библиотеке MCP23xxx реализованы шаблоны классов, организующие работу с расширителями портов MCP23017, MCP23S17, MCP23008 и MCP23S08. Библиотека LiquidCrystal_MCP23x17 - это модифицированная стандартная библиотека LiquidCrystal, поддерживающая русский язык, и работающая через расширитель портов.

К библиотеке прилагаются примеры, поясняющие работу с ней. Также доступна для скачивания предыдущая версия библиотеки:

Рассмотрим пример "Hello World" для I2C модификации модуля. В нем показано не только как инициализировать модуль и выводить на него данные, но и приведен пример опроса одной из кнопок.

////Для SPI версии подключаем SPI.h:
//#include
//Для I2C версии подключаем Wire.h:
#include
//подключаем библиотеку
#include
#include

////Для SPI версии создаем объект класса CMCP23S17:
//CMCP23S17 MCP;
//Для I2C версии создаем объект класса CMCP23017:
CMCP23017 MCP;

//Объект для ЖК
LiquidCrystal_MCP23x17 lcd;

void setup() {
// //Для SPI версии конфигурируем шину SPI и объект MCP номером линии CS (10) и адресом (0)
// SPI.begin();
// MCP.init(10, 0);
//Для I2C версии конфигурируем шину I2C и объект MCP адресом (0)
Wire.begin () ; //TWBR = 12; // <- так можно сделать 400kHz I2C
MCP.init (0 ) ;

//настраиваем объект LCD для работы через указанный объект MCP
lcd.init (MCP) ;
//...и включаем подсветку
lcd.Backlight (1 ) ;

//...остальной код одинаков и для оригинальной LiquidCrystal и для LiquidCrystal_MCP23x17

// настраиваем число столбцов и строк:
lcd.begin (16 , 2 ) ;
// выводим сообщение.
lcd.print ("hello, world!" ) ;
// кнопка Enter подключена к 12 выводу микросхемы MCP
MCP.pinMode (12 , INPUT) ;
}

void loop() {
// устанавливем курсор
lcd.setCursor (0 , 1 ) ;
// выводим время в секундах, начиная со старта:
lcd.print (millis() / 1000 ) ;
// если нажата кнопка Enter, выводим сообщение
if (MCP.digitalRead (12 ) == 0 )
lcd.print (" Enter pressed" ) ;
// иначе, выводим пробелы, чтобы стереть сообщение
else
lcd.print (" " ) ;
}

Введение

Всем доброго, в этой статье будет приведен краткий обзор одного из интересных модулей шилдов для платы Arduino Uno, это как вы уже поняли RGB LCD KeyPad Shield размерностью 16х02. Модуль шилд конечно интересен, но при этом нельзя сказать что он являет собой какую - то новинку на рынке бюджетной любительской электроники, скорее всего для многих этот девайс остаётся своего рода тёмной лошадкой. Что же, эта статья как раз для тех кто не знаком еще с этим устройством. Итак, начнем описание:

Описание

  • Шилд использует в качестве драйвера микросхему MCP23017.
  • 5 кнопок управления (Вверх, вниз, вправо, влево, выбор).
  • Пъезопищалка (Пин D3).
  • Подсветка LCD экрана (Пин D9).
  • Передача данных с кнопок управления и управление LCD экраном при помощи шины I2C.
  • Совместим с платами Arduino Uno, Mega.

Ниже, на картинке можно видеть визуальное описание:

Библиотека

Библиотеку используемую для работы с этим шилдом можно скачать и .

После того как библиотека будет установлена в среду Arduino IDE, можно попробовать загрузить тестовый скетч-пример, его можно найти в Arduino IDE (Файл -> Примеры -> Adafruit RGB LCD Shield Library -> Hello World ), либо скопировать прямо из окна браузера, ниже приведён листинг скетча:

#include "Wire.h" #include "Adafruit_RGBLCDShield.h" #include "utility/Adafruit_MCP23017.h" Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield(); #define RED 0x1 #define YELLOW 0x3 #define GREEN 0x2 #define TEAL 0x6 #define BLUE 0x4 #define VIOLET 0x5 #define WHITE 0x7 void setup() { Serial.begin(9600); lcd.begin(16, 2); int time = millis(); lcd.print("Hello, world!"); time = millis() - time; Serial.print("Took "); Serial.print(time); Serial.println(" ms"); lcd.setBacklight(WHITE); } uint8_t i=0; void loop() { lcd.setCursor(0, 1); lcd.print(millis()/1000); uint8_t buttons = lcd.readButtons(); if (buttons) { lcd.clear(); lcd.setCursor(0,0); if (buttons & BUTTON_UP) { lcd.print("UP "); lcd.setBacklight(RED); } if (buttons & BUTTON_DOWN) { lcd.print("DOWN "); lcd.setBacklight(YELLOW); } if (buttons & BUTTON_LEFT) { lcd.print("LEFT "); lcd.setBacklight(GREEN); } if (buttons & BUTTON_RIGHT) { lcd.print("RIGHT "); lcd.setBacklight(TEAL); } if (buttons & BUTTON_SELECT) { lcd.print("SELECT "); lcd.setBacklight(VIOLET); } }

Заключение

О том как работает тестовая программа для этого шилда вы можете посмотреть видео ниже, ну и напоследок, посмотрев видео, можно сказать что библиотека немного "сырая", в ней пока что нереализована возможность плавного перехода цветов. Хотя, может быть эта функция и не поддерживается драйвером LCD экрана, если досконально поковыряться в библиотеке то это можно будет выяснить. Ну и на этом пожалуй всё, оставляйте свои комментарии и задавайте вопросы, возможно вместе мы сможем найти нужное решение.

Пожалуйста, включите javascript для работы комментариев.

Рассматриваемый шилд представляет собой плату с встроенными модулями индикации и управления. Индикация осуществляется с помощью 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. Таким образом, мы можем передавать информацию о нажатии разных кнопок через один пин, считывая его при помощи функции ;

Значения уровня сигнала на пине 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 UNO, MEGA и другие аналогов. Модуль включает в себя LCD дисплей (16х2) и шесть кнопок. Для взаимодействия контроллера Arduino и модуля, используются цифровые вывода 4, 5, 6, 7, 8, 9, 10 а для чтения состоянии кнопок используется один аналоговый вывод. Также модуль позволяет регулировать контрастность LCD экран, с помощью подстрочного потенциометра RP1 (10кОм). Данный модель отлично подходит для отладки каких-нибудь проектов, мониторинга и так далее.

Технические параметры

Напряжение питания: 5 В
Размер дисплея: 2.6 дюйма
Тип дисплея: 2 строки по 16 символов
Цвет подсветки: синий
Цвет символов: белый
Регулировка контрастности: потенциометр
Габариты: 80мм x 58мм x 20мм

Общие сведения

Большую часть модуля занимает ЖК дисплей, марки LCD 1602 с синей подсветкой, передача данных осуществляется по 4-битному режиму, подробнее в этой статье . На нижней части расположены шесть кнопок, пять из-за которых используются для навигации и одна кнопка дублирует reset. В верхнем левом углу установлен потенциометр, необходимый для регулировки контрастности ЖК дисплея. Так как LCD keypad shield устанавливается на плату Arduino свеху и фактически занимает разъемы, на модуле расположены дополнительные отверстия, для впаивания проводов или разъемов (на отдельную колодку. выведен интерфейс ICSP).
Из принципиальной схемы, можно увидеть, что база транзистора отвечающая за подсведку модуля подключена к выводу 10 платы Arduino, следовательно, можно отключать ее.

Принцип работы кнопок
Кнопки располагаются в удобном порядке — вверх, вниз, влево, вправо, и SELECT. Все кнопки подключены к одному аналоговому входу «A0» используя цепочку резисторов, которые выдают разное опорное напряжение для «А0» при нажатии любой кнопки. На рисунке показана часть принципиальной схема LCD keypad shield

Их принциписальной схемы видно, если кнопки не нажаты напряжение на «A0» через резистор R2 (2кОм) будет 5В. Другие резисторы не влияют на схему, а при чтении аналогового вывода «A0» будет параметр на верхнем приделе 1023 (или приблизительно). Теперь рассмотрим, что произойдет, если будет нажата кнопка «Вниз». На выводе «А0» будет напряжением, которое разделено между резистором R2 (2кОм) которое подтянуто к +5В и резисторами R3 (330ОМ) и R4 (620Ом) общий суммой 950Ом, которые пытаются тянуть его вниз к 0В. Напряжения на «A0» будет составлять порядка 1.61В, это означает, что если выполнить команду analogRead () на A0, будет возвращено значение около 306, что означает нажатие кнопки «Вниз»
Такой же принцип применим и для других кнопок, напряжением и значение analogRead (), можно посмотреть ниже:

Напряжением и значение analogRead
RIGNT: 0.00В: 0 — 8 bit; 0 — 10 bit
UP: 0.71В: 36 — 8 bit; 145 — 10 bit
DOWN: 1.61В: 82 — 8 bit; 306 — 10 bit
LEFT: 2.47В: 126 — 8 bit; 505 — 10 bit
SELECT: 3.62В: 185 — 8 bit; 741 — 10 bit

Это позволяет сэкономить целый набор выводов и использовать их для более нужного использования. Принципиальная схема LCD keypad shield, показана на рисунке ниже.

Назначение выводов
A0: Вывод кнопок
D4: LCD — DB4
D5: LCD — DB5
D6: LCD — DB6
D7: LCD — DB7
D8: LCD – RS
D9: LCD Enable
D10: LCD – отключение подсветки дисплея

Подключение LCD keypad shield к Arduino

Необходимые детали:
Arduino UNO R3 x 1 шт.
LCD модуль keypad (LCD1602, 2×16, 5V)
Кабель USB 2.0 A-B x 1 шт.

Подключение
Установите модуль на плату Arduino UNO, подключите кабель и закрущите данный скетч.

/* Тестирование производилось на Arduino IDE 1.6.12 Дата тестирования 06.12.2016г. */ #include // Подключяем библиотеку LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Указываем порты void setup() { lcd.begin(16, 2); // Инициализируем LCD 16x2 lcd.setCursor(0,0); // Установить курсор на первую строку lcd.print("LCD1602"); // Вывести текст lcd.setCursor(0,1); // Установить курсор на вторую строку lcd.print("www.robotchip.ru"); // Вывести текст Serial.begin(9600); // Включаем последовательный порт } void loop() { int x; // Создаем переменную x x = analogRead (0); // Задаем номер порта с которого производим считывание lcd.setCursor(10,1); // Установить курсор на вторую строку if (x < 100) { // Если x меньше 100 перейти на следующею строк lcd.print ("Right "); // Вывести текст Serial.print("Value A0 ‘Right’ is:"); // Вывести текст Serial.println(x,DEC); } else if (x < 200) { // Если х меньше 200 перейти на следующию строку lcd.print ("Up "); // Вывести текст Serial.print("Value A0 ‘UP’ is:"); // Вывести текст Serial.println(x,DEC); // Вывести значение переменной x } else if (x < 400){ // Если х меньше 400 перейти на следующию строку lcd.print ("Down "); // Вывести текст Serial.print("Value A0 ‘Down’ is:"); // Вывести текст Serial.println(x,DEC); // Вывести значение переменной x } else if (x < 600){ // Если х меньше 600 перейти на следующию строку lcd.print ("Left "); // Вывести текст Serial.print("Value A0 ‘Left’ is:"); // Вывести текст Serial.println(x,DEC); // Вывести значение переменной x } else if (x < 800){ // Если х меньше 800 перейти на следующию строку lcd.print ("Select"); // Вывести текст Serial.print("Value A0 ‘Select’ is:");// Вывести текст Serial.println(x,DEC); // Вывести значение переменной x } }

Тестирование производилось на Arduino IDE 1.6.12

Дата тестирования 06.12.2016г.

#include // Подключяем библиотеку

LiquidCrystal lcd (8 , 9 , 4 , 5 , 6 , 7 ) ; // Указываем порты

void setup ()

lcd . begin (16 , 2 ) ; // Инициализируем LCD 16x2

lcd . print ("LCD1602" ) ; // Вывести текст

lcd . print ("www.robotchip.ru" ) ; // Вывести текст

Serial . begin (9600 ) ; // Включаем последовательный порт

void loop () {

int x ; // Создаем переменную x

x = analogRead (0 ) ; // Задаем номер порта с которого производим считывание

if (x < 100 ) { // Если x меньше 100 перейти на следующею строк

lcd . print ("Right " ) ; // Вывести текст

Serial . print ("Value A0 ‘Right’ is:" ) ; // Вывести текст

// Вывести значение переменной x

else if (x < 200 ) { // Если х меньше 200 перейти на следующию строку

lcd . print ("Up " ) ; // Вывести текст

Serial . print ("Value A0 ‘UP’ is:" ) ; // Вывести текст

Serial . println (x , DEC ) ; // Вывести значение переменной x

else if (x < 400 ) { // Если х меньше 400 перейти на следующию строку

lcd . print ("Down " ) ; // Вывести текст

Serial . print ("Value A0 ‘Down’ is:" ) ; // Вывести текст

Serial . println (x , DEC ) ; // Вывести значение переменной x

else if (x < 600 ) { // Если х меньше 600 перейти на следующию строку

lcd . print ("Left " ) ; // Вывести текст

Serial . print ("Value A0 ‘Left’ is:" ) ; // Вывести текст

Serial . println (x , DEC ) ; // Вывести значение переменной x

else if (x < 800 ) { // Если х меньше 800 перейти на следующию строку

В процессе поиска компонентов для проекта «Бани на Ардуино» наткнулся на модуль LCD 1602 keypad shield. На борту модуля имеется 5 кнопок и экран 1602. Кнопки + дисплей - это отличное сочетание. Можно организовать многоуровневое меню и с помощью кнопок реализовать перемещение в нем. Модуль отлично подойдет для быстрой отладки приложений, работающих с дисплеем 1602.

Пример программы для работы Ардуино с модулем LCD 1602 keypad shield

Представленный ниже алгоритм, выводит на экран модуля 1602 LCD keypad shield Arduino две строки. В первой строке отображается надпись Temp.: C – место для вывода показаний с датчика температуры. Во второй строке отображается таймер, считающий время после запуска программы. Алгоритм в будущем отлично подойдет для проекта .

#include "Time.h" //библиотека для работы со временем #include "LiquidCrystal.h" //библиотека для работы с дисплеем LCD 1602. Некоторые люди ищут в сети русификатор библиотеки LCD 1602 keypad shield, не понимаю зачем, но с уверенностью могу сказать, что его нет))) LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //выводы необходимые для работы дисплея. //При работе с модулем 1602 LCD keypad shield Arduino эти выводы заняты всегда и их не поменять, //в противном случае возникнут проблемы с отладкой void setup() { //настройки дисплея pinMode(9, OUTPUT); analogWrite(9,100); lcd.begin(16,2); //настройки времени setTime(0,0,0,1,10,2015); } void loop() { //вывод данных на дисплей lcd.clear(); lcd.print("Temp.: "); lcd.print(" C"); lcd.setCursor(0, 1); lcd.print("Time: "); lcd.print(hour()); lcd.print(":"); lcd.print(minute()); lcd.print(":"); lcd.print(second()); delay(1000); //без задержки дисплей будет мерцать, //поэтому лучше использовать ее кратную времени таймера }

Для тех, кому не терпится проверить, как работают кнопки модуля LCD 1602 keypad shield, привожу рабочий демонстрационный скетч для Ардуино. Код был найден в сети, мною добавлены исчерпывающие комментарии и исправлены ошибки.

#include "Wire.h" // библиотека для работы с протоколом I2C #include "LiquidCrystal.h" //библиотека для работы с дисплеем LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //как обычно, пины необходимые для работы LCD 1602 keypad shield int button; //переменная хранит данные о текущей активированной кнопке // константы нажатых кнопок const int BUTTON_NONE = 0;//ничего не нажато const int BUTTON_RIGHT = 1;//нажата кнопка вправо const int BUTTON_UP = 2;//нажата кнопка вверх const int BUTTON_DOWN = 3;//нажата кнопка вниз const int BUTTON_LEFT = 4;//нажата кнопка влево const int BUTTON_SELECT = 5;//нажата кнопка выбор //процедура определения нажатой кнопки int getPressedButton() { int buttonValue = analogRead(0); // считываем значения с аналогового входа(A0) if (buttonValue < 100) { return BUTTON_RIGHT; } else if (buttonValue < 200) { return BUTTON_UP; } else if (buttonValue < 400){ return BUTTON_DOWN; } else if (buttonValue < 600){ return BUTTON_LEFT; } else if (buttonValue < 800){ return BUTTON_SELECT; } return BUTTON_NONE; } void setup() { lcd.begin(16, 2); lcd.print("сайт"); } //в основном цикле также нет ничего сложного, переменной button передается информация о нажатой кнопке //и с помощью оператора выбора на экран выводится информация сигнализирующая какая кнопка была нажата void loop() { button = getPressedButton(); switch (button) { case BUTTON_RIGHT: // при нажатии кнопки выводим следующий текст lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 0); lcd.print("BUTTON: RIGHT"); break; case BUTTON_LEFT: lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 0); lcd.print("BUTTON: LEFT"); break; case BUTTON_UP: lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 0); lcd.print("BUTTON: UP"); break; case BUTTON_DOWN: lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 0); lcd.print("BUTTON: DOWN"); break; case BUTTON_SELECT: lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 0); lcd.print("BUTTON: SELECT"); break; } }

Примеры проектов на 1602 LCD keypad shield Arduino поражают. В сети можно найти алгоритмы программ от часов до игр!

Поделиться