LCD 1602 Keypad Shield

Описание

LCD Keypad Shield - простое и удобное решение для простых проектов, где требуется отобразить текстовую информацию на дисплее. Дисплей позволяет отображать латиницу в 2 строки по 16 символов в каждой из них. Поддерживается режим бегущей строки.

Для регулировки яркости на плате расположен потенциометр. Подсветка дисплея синего цвета.

Дополнительно на плате расположено 5 функциональных кнопок с помощью которых можно перемещаться по дисплею, а также запрограммировать их на определенные действия. Шестая кнопка выполняет функцию перезагрузки контроллера.

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

  • Рабочее напряжение: 5 В
  • Тип дисплея: LCD
  • Количество символов в строке: 16
  • Количество строк: 2
  • Язык (по умолчанию): латиница

Физические размеры

  • Шилд Д х Ш х В: 80 х 58 х 19 мм

Пример подключения и использования

Определение нажатой кнопки

Описание: В данном примере будет показано как определить какая кнопка была нажата.

Приготовьте детали:

Что нужно: Кол-во, шт
Контроллер Smart UNO 1
LCD 1602 Keypad Shield 1

Схема подключения: Установите шилд поверх контроллера Smart Uno.

Загрузите на контроллер скетч:

#include  <LiquidCrystal.h> //подключение библиотеки
 
#define BUTTON_NONE 0   //значение для BUTTON_NONE
#define BUTTON_RIGHT 1  //значение для BUTTON_RIGHT
#define BUTTON_UP 2     //значение для BUTTON_UP
#define BUTTON_DOWN 3   //значение для BUTTON_DOWN
#define BUTTON_LEFT 4   //значение для BUTTON_LEFT
#define BUTTON_SELECT 5 //значение для BUTTON_SELECT
 
LiquidCrystal lcd(8, 9, 4, 5, 6, 7 ); //создание объекта дисплея
 
int getPressedButton() //инициализация переменной
{
  int buttonValue = analogRead(0); // чтение значения с аналогового входа
  delay(200); //защита от дребезга
 
  if (buttonValue < 50) { //если при нажатии кнопки значение меньше 50
    return BUTTON_RIGHT;   // значит нажата кнопка BUTTON_RIGHT
  }
  else if (buttonValue < 150) { //если при нажатии кнопки значение меньше 150
    return BUTTON_UP; // значит нажата кнопка BUTTON_UP
  }
  else if (buttonValue < 300) { //если при нажатии кнопки значение меньше 300
    return BUTTON_DOWN; // значит нажата кнопка BUTTON_DOWN
  }
  else if (buttonValue < 500) { //если при нажатии кнопки значение меньше 500
    return BUTTON_LEFT; // значит нажата кнопка BUTTON_LEFT
  }
  else if (buttonValue < 800) { //если при нажатии кнопки значение меньше 800
    return BUTTON_SELECT; // значит нажата кнопка BUTTON_SELECT
  }
  return BUTTON_NONE; //иначе, нажата кнопка BUTTON_NONE
}
 
void setup()
{
  lcd.begin(16, 2); //Инициализация дисплея: 2 строки по 16 символов
  lcd.print("smartelements.ru");  //Выводи надпись www.smartelements.ru
  delay(1000); //задержка 1 сек
}
 
void loop()
{
  int button = getPressedButton(); //получение нажатой кнопки
 
  lcd.clear(); // очистка дисплея
  switch (button) //в зависимости от нажатой кнопки
  {
    case BUTTON_RIGHT: // при нажатии кнопки со значением BUTTON_RIGHT
      lcd.print("BUTTON: RIGHT");//вывести надпись BUTTON: RIGHT на экран
      break; //прервать выполнение
    case BUTTON_LEFT: // при нажатии кнопки со значением BUTTON_LEFT
      lcd.print("BUTTON: LEFT"); //вывести надпись BUTTON: LEFT на экран
      break; //прервать выполнение
    case BUTTON_UP: // при нажатии кнопки со значением BUTTON_UP
      lcd.print("BUTTON: UP"); //вывести надпись BUTTON: UP на экран
      break; //прервать выполнение
    case BUTTON_DOWN: // при нажатии кнопки со значением BUTTON_DOWN
      lcd.print("BUTTON: DOWN"); //вывести надпись BUTTON: DOWN на экран
      break; //прервать выполнение
    case BUTTON_SELECT: // при нажатии кнопки со значением BUTTON_SELECT
      lcd.print("BUTTON: SELECT"); //вывести надпись BUTTON: SELECT на экран
      break; //прервать выполнение
  }
}

Установка и запуск таймера

Описание: Создадим таймер, с возможностью управления им пользователем. Функциональные кнопки:

  • кнопка ВПРАВО: сброс таймера (если он в данный момент запущен)
  • кнопка ВЛЕВО: запуск таймера
  • кнопка ВВЕРХ: увеличение количества минут
  • кнопка ВНИЗ: уменьшение количества минут

Приготовьте детали:

Что нужно: Кол-во, шт
Контроллер Smart UNO 1
LCD 1602 Keypad Shield 1

Схема подключения: Установите шилд поверх контроллера Smart Uno.

Загрузите на контроллер скетч:

#include  <LiquidCrystal.h> //подключение библиотеки
 
#define BUTTON_NONE 0   //значение для BUTTON_NONE
#define BUTTON_RIGHT 1  //значение для BUTTON_RIGHT
#define BUTTON_UP 2     //значение для BUTTON_UP
#define BUTTON_DOWN 3   //значение для BUTTON_DOWN
#define BUTTON_LEFT 4   //значение для BUTTON_LEFT
#define BUTTON_SELECT 5 //значение для BUTTON_SELECT
 
LiquidCrystal lcd(8, 9, 4, 5, 6, 7 ); //создание объекта дисплея
 
unsigned long currentTime = 0;    //текущее время
unsigned long loopTime = 0;       //время окончания
unsigned long LimitTime = 0;  //добавочное время таймера
boolean running = false;      //Флаг Запуска отсчета
 
int getPressedButton() //инициализация переменной
{
  int buttonValue = analogRead(0); // чтение значения с аналогового входа
  delay(200); //защита от дребезга
 
  if (buttonValue < 50) { //если при нажатии кнопки значение меньше 50
    return BUTTON_RIGHT;   // значит нажата кнопка BUTTON_RIGHT
  }
  else if (buttonValue < 150) { //если при нажатии кнопки значение меньше 150
    return BUTTON_UP; // значит нажата кнопка BUTTON_UP
  }
  else if (buttonValue < 300) { //если при нажатии кнопки значение меньше 300
    return BUTTON_DOWN; // значит нажата кнопка BUTTON_DOWN
  }
  else if (buttonValue < 500) { //если при нажатии кнопки значение меньше 500
    return BUTTON_LEFT; // значит нажата кнопка BUTTON_LEFT
  }
  else if (buttonValue < 800) { //если при нажатии кнопки значение меньше 800
    return BUTTON_SELECT; // значит нажата кнопка BUTTON_SELECT
  }
  return BUTTON_NONE; //иначе, нажата кнопка BUTTON_NONE
}
 
//сброс значений связанных с таймером
void reset_values()
{
  running = false;  // останавливаем таймер
  LimitTime = 0;    // сброс значения таймера
  delay(3000);      // пауза 3 секунды
  lcd.clear();      // очистить экран
}
 
//запуск таймера и отсчёт времени
void run_timer()
{
  currentTime = millis(); //текущее время
  loopTime = currentTime + LimitTime; //время окончания (текущее время + добавочное время таймера)
 
  while (currentTime < loopTime) { // сравнение текущего времени с временем окончания
 
    int button = getPressedButton(); //проверка на кнопку "Прервать"
 
    if (button == BUTTON_RIGHT) { // если нажата кнопка "RIGHT" - прервать
      lcd.clear(); // очистить экран
      lcd.print("Interrupted"); // вывод "прервано"
      reset_values(); //сброс значений
      return; //выход из процедуры
    }
 
    lcd.clear(); // очистить экран
    lcd.print("Time to off: "); // вывод надписи
    lcd.setCursor(13, 0); // установка курсора на 13 позицию
    lcd.print(LimitTime / 1000); // указать добавочное время, переводя миллисекунды в секунды
 
    delay(800); // задержка 0.8 секунды
    LimitTime = LimitTime - (millis() - currentTime);
    currentTime = millis(); //получить новое время
  }
 
  //окончание работы таймера
  lcd.clear(); // очистить экран
  lcd.print("Timer: OFF"); // вывести надпись "Timer: OFF"
  reset_values(); //сброс значений
}
 
//показать сообщение об ошибке на второй строке дисплея
void showError(String message)
{
  lcd.setCursor(0, 1); // установка курсора во вторую строку
  lcd.print (message); // вывести надпись ошибки
  delay (1000); //пауза 1 секунду
  lcd.setCursor(0, 1); // установка курсора во вторую строку
  lcd.print ("               "); //очистить строку
}
 
void setup()
{
  lcd.begin(16, 2); //Инициализация дисплея: 2 строки по 16 символов
  lcd.print("smartelements.ru");  //Выводи надпись www.smartelements.ru
  delay(1000); //задержка 1 сек
  Serial.begin(9600);
}
 
void loop()
{
  if (running == true) {  // таймер запущен
    run_timer(); // обработка таймера
  }
 
  //ожидание ввода команд пользователем
  keypad();
}
 
//ожидание ввода команд пользователем
void keypad()
{
 
  lcd.clear(); // очистить экран
  lcd.print ("Time:");  //вывести слово "Time:"
  lcd.setCursor(7, 0); // установить курсор
  lcd.print(LimitTime / 60000); //вывести значение таймера в минутах
 
  int button = getPressedButton(); //проверка на кнопку "Прервать"
  switch (button) //в зависимости от нажатой кнопки
  {
    case BUTTON_UP: // при нажатии кнопки со значением BUTTON_UP
      if ((LimitTime + 60000) <= 300000) //если время меньше или равно 5 минутам
      {
        LimitTime += 60000; // прибавляем 1 минуту
      }
      else { //иначе, при попытке прибавить больше 5 минут
        showError("maximum 5 min"); // показать сообщение об ошибке
      }
      break; //прервать выполнение
    case BUTTON_DOWN: // при нажатии кнопки со значением BUTTON_DOWN
      if (LimitTime  > 60000) // если время больше 1 минуты
      {
        LimitTime -= 60000; // отнять 1 минуту
      }
      else { // иначе, при выборе значения меньше 1 минуты
        showError("minimum 1 min"); // показать сообщение об ошибке
      }
      break; //прервать выполнение
    case BUTTON_LEFT: // при нажатии кнопки со значением BUTTON_LEFT
      if (LimitTime != 0 ) //если добавочное время равно 0
      {
        running = true;                //Устанавливаем запуск отсчета
        lcd.clear(); // очистить экран
        lcd.print ("Start"); //выводим надпись "Start"
        delay(1000);
      } //ждем 1 секунду
      else { //иначе, если не выбрали время
        showError("no time selected"); // показать сообщение об ошибке
      }
      break; //прервать выполнение
  }
}