Андрей Смирнов
Время чтения: ~12 мин.
Просмотров: 42

Подключение модуля LCD Keypad Shield 1602 к Arduino

LCD Keypad Shield  –  одна из самых популярных плат расширения для ардуино. Она может существенно упростить работу с жидкокристаллическими экранами, позволяя разработчику сосредоточиться на других задачах. В этой статье мы рассмотрим шилд LCD Keypad Shield для дисплея TC 1602 со встроенными 5 управляющими кнопками. Узнаем, как работает эта плата, как ее можно подключить к ардуино, рассмотрим несколько примеров скетчей в реальных проектах. Если вы не знаете, что такое шилд, то можете предварительно прочитать статью о платах расширениях и шилдах ардуино.

Описание шилда LCD Keypad Shield

SKU146994a-300x300.jpgРассматриваемый шилд представляет собой плату с встроенными модулями индикации и управления. Индикация осуществляется с помощью LCD-дисплея TC1602, управление – через встроенные кнопки. Есть возможность регулировки яркости дисплея прямо на плате с помощью подстроечного резистора. Плата снабжена разъемами, в которые могут быть подключены другие устройства, например, датчики. Для работы с экраном используются пины 4-10, для определения нажатия кнопок – только один аналоговый пин A0. Свободными являются цифровые пины 0-3, 11-13 и аналоговые пины A1-A5.

im120417018_9-300x300.jpgОсновные области применения шилда: создание управляющих модулей, реализующих настройки устройства с помощью интерфейса меню. Экран шилда можно использовать для вывода информации, получаемой с датчиков, с возможностью выполнения пользователем каких-либо действий путем нажатия на встроенные кнопки. Естественно, можно найти и другие способы использования платы: например, реализовать игру типа тетрис.

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

  • Тип дисплея: LCD 1602, символьный, 4-х битный режим.
  • Разрешение: 16×2 (две строки по 16 символов каждая). Знакоместо 5×8 точек.
  • Цвет дисплея: синий (возможны варианты с желтым и зеленым цветом). Буквы белого цвета.
  • Технология: STN, Transflective, Positive.
  • Контроллер дисплея: HD44780U.
  • Предельная частота обновления экрана: 5Гц
  • Питание дисплея: 5 Вольт
  • Кнопки: 6 кнопок (5 кнопок управления и Reset).
  • Дополнительные элементы: регулировка яркости подсветки (потенциометр).
  • Рабочая температура экрана: от -20 °С до +70 °С;
  • Температура хранения экрана: от -30 °С до +80 °С.

Распиновка LCD shield для подключения к Arduino

900px-DFR0009-PIN2.png

Контакт дисплея 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-keypad-shield-pins.png

Контакт дисплея 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/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации