Будем подключать LCD Keypad Shield к Arduino UNO R3. На шилде имеются кнопки, вот и попробуем с помощью них манипулировать нашей Ардуиной и результат выводить на дисплей.

Характеристики шилда

  • Дисплей синего цвета с белыми буквами. Регулировка яркости подсветки
  • Тип дисплея: Символьный
  • Разрешение:16x2
  • 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>

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

// Нажатые кнопки
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("www.2150692.ru");
}

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;
  }
}

Комментарии  

+1 # Вячеслав 15.09.2016 18:14
Спасибо, конечно за скетч, но из статьи совершенно не понятно что за цифры 100 200 400 800 которые считываются с аналогового входа. т.е. не описан механизм взаимодействия с кнопками, что затрудняет применение данного материала к чему-то полезному.
Ответить | Ответить с цитатой | Цитировать
0 # Петрович 27.09.2016 15:56
Вячеслав, а datasheet почитайте.
100 200 400 800 - значения с аналогового входа.
Ответить | Ответить с цитатой | Цитировать
+2 # Stue 22.08.2017 11:58
Добрый день! Попробовал Ваш скетч, но ничего не работает(( Как горел изначально синий экран, так и горитю На нажатие кнопок не реагирует.
Ответить | Ответить с цитатой | Цитировать
+6 # Foxbow 20.09.2017 01:59
Покрутите до конца потенциометр контраста, все зло в нем
Ответить | Ответить с цитатой | Цитировать
0 # Андрей 12.07.2018 14:12
Стопроцентов :)
Такая же история. Вроде горит, в компорт нажатия выводит. По часовой стрелке крутить пока не появится текст. Но не перекрутить, тогда задний фон начинает выделяться.
Ответить | Ответить с цитатой | Цитировать

Добавить комментарий


Защитный код
Обновить