На канале есть описание вывода информации на LCD без библиотеки по четырем проводам данных и три провода управления. Итого требуется 7 ножек Ардуино. Достоинство - экономия памяти более 30 процентов и быстрая работа.
Если нам торопиться не куда, есть память и самое главное нужно экономить Пины Ардуино, целесообразно вывод информации осуществить по протоколу I²C.
Протокол I²C — последовательная асимметричная шина для связи между интегральными схемами. Использует две двунаправленные линии связи (SDA и SCL), применяется для соединения низкоскоростной периферии микроконтроллера, соответственно Ардуино.
Аппаратный способ в Ардуино заложен на этапе изготовления. Главным козырем является простота реализации за счет наличия готовых библиотек.
Платы Ардуино используют два пина для работы по интерфейсу I²C . SDA соответствует аналоговый порт A4, а SCL соответствует аналоговый порт A5.
На Ardunio Mega SDA — 20 пин, SCL — 21 пин. Для работы написана библиотека, качаем LiquidCrystal_I2C.h
Распаковываем архив, папку LiquidCrystal_I2C_V112, устанавливаем в Arduino IDE или копируем в папку, обычно по пути C:\Users\имя\Documents\Arduino\libraries . Пуск--> Документы--> Arduino--> libraries
Понадобятся интерфейсный модуль I2C для LCD, Знакогенерирующий дисплей LCD, любое Ардуино.
Впаиваем, или приобретаем готовый ЛСД с интерфейсом 2ИС.
Собираем схему. Взял шлейф от старенького компа.
Пишем простенький скетч для тестирования. Скетч для копирования, проверен.
// #include <Wire.h> // Подключаем библиотеку для работы с шиной I2C не обязательно
#include <LiquidCrystal_I2C.h> // Подключаем библиотеку для работы с LCD дисплеем по шине I2C
LiquidCrystal_I2C lcd (0x27, 20, 4);// ОБЪЕКТ ( АДРЕС_I2C , КОЛ_СТОЛБЦОВ , КОЛ_СТРОК );
// Если надпись не появилась, замените адрес 0x27 на 0x3F
void setup(){
lcd.init(); // Инициируем работу с LCD дисплеем, указывая количество (столбцов, строк)
lcd.backlight(); // Включаем подсветку LCD дисплея
lcd.setCursor(1,0); // первая строка 0, второй знак 1
lcd.print(" Hello World"); // вывод строки здравствуй мир
lcd.setCursor(1,1);
lcd.print(" Welcome to the ");
lcd.setCursor(1,2);
lcd.print("Real Steel channel,");
lcd.setCursor(1,3);
lcd.print("everything is fine");
delay(5000); //задержка 5 сек
lcd.noBacklight(); // Гасим подсветку
lcd.clear(); // очистка дисплея
delay(2000);
lcd.backlight(); // Включаем подсветку LCD дисплея
}
void loop(){
lcd.setCursor(1,0);
lcd.print("Stroka 1 TEST OK");
lcd.setCursor(2,1);
lcd.print("Stroka 2 TEST OK");
lcd.setCursor(3,2);
lcd.print("Stroka 3 TEST OK");
lcd.setCursor(4,3);
lcd.print("Stroka 4 TEST OK");
delay(2000);
lcd.clear();
}
Загружаем.
Если дисплей засветился, но нет символов, отрегулируйте контрастность, осторожно, не сверните башку регулятору.
5 секунд выводится приветственный банер, затем подсветка гаснет, очищается экран. Через 2 секунды включаем подсветку. Входим в LOOP, где каждые 2 секунды очищаем дисплей и выводим тестовые строки
В данном случае мы больше 20 знаков в одной строке вывести не можем, пробелы считаются. Попробуем переполнить 4 строку
lcd.setCursor(4,3);
lcd.print("SSSSSSSSSSSSSSStroka 4 TEST OK");
Давайте рассмотрим команды(функции) для работы с дисплеем
- init(); – Инициализация дисплея. Должна быть первой командой библиотеки LiquidCrystal_I2C после создания объекта.
- backlight(); – Включение подсветки дисплея.
- noBacklight(); – Выключение подсветки дисплея.
- setBacklight(flag); – Управление подсветкой (1 - включить / 0- выключить), используется вместо функций noBacklight и backlight.
- print(data); – Вывод текста, символов или цифр на экран дисплея. Синтаксис схож с одноимённой функцией класса Serial.
- clear(); – Очистка дисплея с установкой курсора в положение 0,0 (Занимает много времени!).
- home(); – Установка курсора в положение 0,0 (Занимает много времени!).
- display(); – Быстрое включение дисплея (без изменения данных в ОЗУ дисплея).
- noDisplay(); – Быстрое выключение дисплея (без изменения данных в ОЗУ).
- blink(); – Включение мигающего курсора с частотой около 1 Гц.
- noBlink(); – Выключение мигающего курсора.
- cursor(); – Включение подчеркивания курсора.
- noCursor(); – Выключение подчеркивания курсора.
- scrollDisplayLeft(); – Прокрутка дисплея влево. Сдвиг координат дисплея на один столбец влево
- scrollDisplayRight(); – Прокрутка дисплея вправо. Сдвиг координат дисплея на один столбец вправо
- leftToRight(); – Указывает сдвигать положение курсора, после вывода очередного символа вправо.
- rightToLeft(); – Указывает сдвигать положение курсора, после вывода очередного символа влево.
- noAutoscroll(); – Указывает в дальнейшем выравнивать текст по левому краю от позиции курсора. Как обычно.
- autoscroll(); – Указывает в дальнейшем выравнивать текст по правому краю от позиции курсора.
- createChar(num,array); – Запись пользовательского символа в CGRAM дисплея под указанным номером.
- setCursor(col,row); – Установка курсора в позицию указанную номером колонки и строки.
Теперь нам не составит труда сделать в дисплее бегущую строку, используя функцию scrollDisplayLeft(); или scrollDisplayRight();. Постоянный вызов создаст эфект бегущей строки. Скоро покажу видео.
В Setup коварную функцию delay() оставить можно, она не помешает работе основного кода, а в loop ее придется заменить, хотя бы на милис.
В следующей статье выведем температуру на этот дисплей с помощью датчика DS18B20
Работа с ЖК дисплеем без библиотек по параллельной шине ТУТ