ELECTRONICS

Библиотека LiquidCrystal

менеджер: LiquidCrystalArduinoверсия 1.0.7

Символьные дисплеи 1602 и 2004 на контроллере HD44780, подключённые напрямую шестью проводами.

Это библиотека для дисплея без переходника I2C: сам модуль 1602 подключается к плате шестью сигнальными выводами — RS, E и четыре линии данных. Если на обороте дисплея припаяна маленькая плата с подстроечником и четырьмя выводами, нужна другая библиотека, LiquidCrystal I2C.

Дисплей — это объект класса Print, поэтому на него работает всё то же, что для Serial: print() с числами, строками и точностью для дробных.

Установка и подключение

В менеджере библиотек ищите LiquidCrystal автора Arduino. Если менеджер предложит поставить зависимости — соглашайтесь. Как открыть менеджер и что делать, если библиотека не находится, — в общей статье про библиотеки.

#include <LiquidCrystal.h>

Создание объекта — обычно до setup():

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);   // RS, E, D4, D5, D6, D7 — выводы платы
lcd.begin(16, 2);                         // в setup(): столбцов и строк

Методы

Только то, что нужно в обычном скетче. Сигнатуры сверены с версией 1.0.7.

begin(uint8_t cols, uint8_t rows)
Инициализация: размер дисплея. 16×2 или 20×4.
print(...)
Вывести текст или число с текущей позиции курсора. Как у Serial: print(3.14159, 2) даст 3.14.
setCursor(uint8_t col, uint8_t row)
Поставить курсор: столбец и строка с нуля. setCursor(0, 1) — начало второй строки.
clear()
Очистить экран и вернуть курсор в начало. Медленная операция, около 2 мс.
home()
Курсор в начало без очистки.
cursor() / noCursor()
Показать или спрятать подчёркивание под курсором.
blink() / noBlink()
Мигающий курсор.
display() / noDisplay()
Выключить показ, не стирая содержимое, и включить обратно.
scrollDisplayLeft() / scrollDisplayRight()
Сдвинуть всё содержимое на один символ.
autoscroll() / noAutoscroll()
Автоматически сдвигать текст при выводе за край.
createChar(uint8_t n, uint8_t map[8])
Задать свой символ 5×8 точек под номером 0–7; выводится как write(n).
write(uint8_t c)
Вывести один символ по коду, в том числе свой из createChar().

Пример

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  lcd.begin(16, 2);
  lcd.print("Привет? Нет: Hello");   // кириллицы в HD44780 нет
}

void loop() {
  lcd.setCursor(0, 1);
  lcd.print(millis() / 1000);
  lcd.print(" s   ");          // пробелы затирают хвост от длинного числа
  delay(500);
}

Контраст крутится подстроечником на выводе V0. Если видны только чёрные прямоугольники или ничего — крутите его, прежде чем искать ошибку в коде.

На чём попадаются

Два ряда чёрных квадратов

Дисплей не инициализировался: перепутаны RS и E или неверные номера выводов в конструкторе. Порядок — RS, E, D4, D5, D6, D7.

Кириллица выводится как мусор

В обычных модулях знакогенератор без русских букв. Либо латиница, либо свои символы через createChar(), либо модуль с русской прошивкой.

Старое число не стирается

print() не чистит строку. Дописывайте пробелы после короткого значения или печатайте поле фиксированной ширины.

Мерцает при обновлении

clear() каждый цикл — плохая идея. Перерисовывайте только изменившиеся позиции через setCursor().

Где используется на сайте

Что дальше