Существует большое количесвто разновидностей текстовых, или как их ещё называют знакосинтезирующих, жидкокристаллических экранов. Наиболее распространены дисплеи на базе чипов HD44780 от Hitachi, KS0066 от Samsung или совместимых с ними. Для работы с такими экранами существует стандартная Arduino-библиотека Liquid Crystal.
К таким дисплеям относятся в частности текстовые экраны от Мэлт. В этой статье детально описывается схема подключения этого экрана, однако она подойдёт и для множества других текстовых дисплеев.
Закрепите экран на breadboard'е и подведите к рельсам питания breaboard'а питание +5 В и землю с Arduino.
Питание и земля понадобятся не один раз, поэтому удобнее пробросить их именно на рельсы.
Фоновая подсветка дисплея — это отдельный контур, не связанный с остальным. Включить её можно подав +5 В на 15-й контакт дисплея и подключив 16-й контакт к земле. Соединив эти два контакта с соответствующими рельсами, можно включить Arduino и увидеть, что дисплей засветился.
Обратите внимание, что на некоторых моделях нумерация контактов идёт не просто справа-налево от первого до шестнадцатого, а несколько более хитро. Так, например, на экране 16×2 от Мэлт первый контакт физически находится на 14-й позиций, второй на 13-й и так далее справа-налево вплоть до 14-го на первой позиции, а 15-й и 16-й расположены с самого права. Нумерация около контактов дисплея поможет не запутаться.
Далее необходимо подключить цепь, отвечающую за отображение символов. Для этого предназначены контакты 1, 2 и 3 на дисплее. Перед подключением отключите Arduino от питания.
После подключения, если включить Arduino, вы можете увидеть прямоугольные знакоместа. В зависимости от комбинации цветов текста и подсветки они могут быть как яркими и хорошо заметными, так и едва заметными. Это нормально: в любом случае, текст будет смотреться отлично.
Для коммуникации между Arduino и экраном необходимо использовать несколько линий взаимодействия:
Таким образом занятыми окажутся от 6-ти до 11-ти контактов от обоих устройств. Если вам не требуется считывать с дисплея, что подходит под большинство сценариев использования, для команд понадобится 2 линии.
Если скорость обновления данных так же не является проблемой, для передачи данных достаточно 4-х линий.
Итак, для подключения дисплея достаточно истпользовать 6 линий, 6 контактов на Arduino. Рассмотрим именно этот сценарий.
Как упоминалось, нам не за чем считывать с дисплея, мы будем в него только писать. Поэтому соединим 5-й контакт дисплея, который отвечает за выбор чтение/запись с рельсой земли. Это означает «всегда писать».
Затем, соединяем Arduino и экран нашими 6-ю линиями коммуникации. Какие именно контакты будут выбраны на Arduino не имеет значения: мы зададим их в программе, но для примера была выбрана такая конфигурация:
Экран подключен и готов к приёму данных. Осталось написать программу для Arduino.
Для вывода текста с Arduino удобнее всего воспользоваться встроенной библиотекой Liquid Crystal. Для вывода приветствия и таймера, воспользуйтесь кодом вроде этого:
// Подключаем стандартную библиотеку LiquidCrystal #include <LiquidCrystal.h> // Инициализируем объект-экран, передаём использованные // для подключения контакты на Arduino в порядке: // RS, E, DB5, DB6, DB7, DB8 LiquidCrystal lcd(4, 5, 10, 11, 12, 13); void setup() { // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(16, 2); // печатаем первую строку lcd.print("Hello world!"); // устанавливаем курсор в колонку 0, строку 1. То есть на // самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(0, 1); // печатаем вторую строку lcd.print("foo bar baz"); } void loop() { }
Всё довольно просто и должно быть понятно из комментариев.
Информация в этом разделе относится именно к дисплеям от Мэлт. Китайские и Европейские аналоги вряд ли имеют в своём наборе символов кириллицу, обратитесь к документации на дисплей, чтобы узнать об этом подробнее.
Вывод русских букв не совсем тривиален: вы не можете просто написать lcd.print("Вася"). Это связано с понятием кодировок. Вы знаете, что каждому символу соответствует код и при компиляции программы, если строка содержит кириллицу, она будет сконвертирована в коды по таблице utf-8, cp-1251 или какой-то другой в зависимости от настроек компилятора. Экран в свою очередь, ожидает увидеть данные в собственной кодировке.
Так например, букве «Я» соответствует код B1 в шестнадцатиричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности \x## встроить в строку код символа:
lcd.print("\xB1ndex");
Можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность \x, он считывает за ним все символы, которые могут являться разрядами шестнадцатиричной системы даже если их больше двух. Из-за этого вы не можете просто использовать символы из диапазона 0-9, a-f следом за двузначным кодом символа: это вызовет ошибку компиляции. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются. Так, если вы хотите написать «Яeee»:
lcd.print("\xB1eee"); // ошибка lcd.print("\xB1""eee"); // правильно
Например, чтобы написать «Привет от Амперки», использовался код:
#include <LiquidCrystal.h> LiquidCrystal lcd(4, 5, 10, 11, 12, 13); void setup() { lcd.begin(16, 2); lcd.print(" \xA8p\xB8\xB3""e\xBF"); lcd.setCursor(0, 1); lcd.print(" o\xBF A\xBC\xBE""ep\xBA\xB8"); } void loop() { }
Полную таблицу символов с кодами можно найти в документации к экрану.