
Иногда мы сталкиваемся с проблемой вывода различной информации из Arduino в окружающий мир. Зачастую, использование последовательного порта невозможно, неудобно и невыгодно.
Символьный дисплей является одним из самых простых и дешевых средств для вывода информации, потому что он имеет собственный микроконтроллер, в памяти которого хранятся закодированные символы. Такая система упрощает использование этих дисплеев, но в тоже время ограничивает их использование выводом только текстовой информации, в отличие от графических дисплеях.
В примере мы рассмотрим дисплей Winstar wh1602l1 – один из самых распространенных дисплеев на контроллере hd44780. Кроме того Вы можете подключать LCD 2004 и другие аналогичные.
Первые две цифры обозначают количество символов в строке, а вторые количество строк, таким образом, выбранный дисплей имеет 2 строки по 16 символов.
Данный способ подключения подразумевает занятие минимум 6 портов микроконтроллера Ардуино. В случае необходимости Вы можете подключить текстовый дисплей 1602 через I2C интерфейс (2 порта).
Из дополнительных элементов нам понадобиться переменный резистор, для управления контрастностью. В остальном все подключается по схеме, согласно даташиту и выбранных выходов Arduino в программе.
Выводы 15 и 16 на дисплее отвечают за подсветку, ее можно выключить или сделать автоматическую регулировку яркости при подключения фоторезистора к Arduino, как датчика яркости.
В нашем примере будем считывать данные из последовательного порта и выводить их на дисплей:
#include <liquidcrystal.h> // Подключаем библиотеку работы с символьными дисплеями LiquidCrystal lcd(13, 11, 5, 4, 3, 2); // (RS, E, D4, D5, D6, D7) подключаем выходы дисплея согласно последовательности, R/W – GND, так как мы будем записывать данные в дисплей, а не считывать void setup() { lcd.begin(16, 2); // Инициализируем LCD 1602 // lcd.begin(20, 4); // Инициализируем LCD 2004 Serial.begin(9600); // Запускаем последовательный порт } void loop() { if (Serial.available()) // Если из порта поступаю данные, то... { delay(100); lcd.clear(); // Полностью очищаем экран while (Serial.available() > 0) // Если из порта поступаю данные больше 0, то... { lcd.write(Serial.read()); // Считываем значения из serial порта и выводим их на дисплей } } }
Вы можете усложнить код и вывести часы реального времени DS1307 на Arduino на Ваш LCD1602.
Теперь по подробнее рассмотрим все функции в библиотеке LiquidCrystal:
Первое и самое главное, что с помощью этой библиотеки нельзя выводить русские буквы, даже если дисплей имеет в памяти эти символы. Эта проблема решается или другими библиотеками, или записью значений при помощи 16-ричного кода.
lcd.print(); - самая простая и часто используемая, используется для вывода информации.
lcd.clear(); - используется для очистки дисплея.
lcd.setCursor(x,y); - ставит курсор на определенное место.
Х – изменение позиции в строке
Y – изменение строки
Например, lcd.setCursor(0, 0); это верхняя левая ячейка.
lcd.home(); - ставит курсор в позицию 0, 0
lcd.home(); = lcd.setCursor(0, 0);
lcd.scrollDisplayLeft(); - сдвиг влево
lcd.scrollDisplayRight(); - сдвиг вправо
Lcd.createChar(имя, массив); - создание собственного знака.
Например знак градуса выглядит вот так:
Celc[8] = {B00111, B00101, B00111, B00000, B00000, B00000, B00000, B00000 };