Для работы с текстовым дисплеем, в Arduino IDE имеется библиотека LiquidCrystal. Но перед использованием этой библиотеки, необходимо его подключить к разрабатываемой программе. Подключение библиотек производится следующим образом:
#include <Имя библиотеки.h>
Где ‘Имя библиотеки’ – название подключаемой библиотеки. Если такая библиотека имеется в папке с библиотеками, то имя библиотеки будет подсвечен.
Далее, необходимо создать экземпляр класса или объект LiquidCrystal. Класс – это тоже тип, но со сложной структурой. Описание объекта происходит так же как и описание переменных – сначала имя класса, затем через пробел имя переменной, которая будет содержать экземпляр этого класса: LiquidCrystal lcd(12, 11, 5, 4, 3, 2); Внутри скобок задаются параметры, с помощью которых можно указывать, через какие порты будет подключен LCD. Первый параметр – RS – Register Select; Второй параметр – E – Enable; В остальных параметрах указывается контакты, через которые передаются данные. При описании параметров, как на этом примере, дисплей следует подключить по следующей схеме:
Рисунок 11. Схема подключения LCD
Описание объекта LiquidCrystal нужно провести сразу за строкой библиотек. В этом случае, доступ к этому объекту можно будет получить из любой части программы. Перед началом работы с дисплеем следует указать количество строк и столбцов на этом дисплее. Это необходимо, так как существует множество разновидностей дисплеев, с различным количеством строк и символов в одной строке. Команда, которая это делает, выглядит так:
lcd.begin(16, 2);
Где lcd – объект LiquidCrystal;
Первый параметр (16) – количество символов в одной строке;
Второй параметр (2) – количество строк;
Вывод текста осуществляется функцией print, в качестве параметра в которую передается строка:
lcd.print("hello, world!");
Вывод текста осуществляется в позиции курсора, которая по умолчании бывает в начале нулевой строки. Строки и символы в строке нумеруются с нуля. Для перевода курсора имеется команда setCursor(Col, Row);, где Col – номер позиции в строке, а Row – номер строки.
В примерах имеется программа, которая выводит на первой строке надпись ‘hello, world!’, а во второй количество секунд от момента запуска программы:
#include <LiquidCrystal.h>// Подключение библиотеки: // Инициализация класса (в скобках указаны порты, через которые // подключен дисплей) LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // Указывает количество строк и символов в строке дисплея lcd.begin(16, 2); // Вывод сообщения. lcd.print("hello, world!"); } void loop() { // Изменения положения курсора для вывода во второй строке: // (Строки и символы в строке нумеруются от нуля) lcd.setCursor(0, 1); // Вывод времени с момента включения: lcd.print(millis() / 1000); }
В этой программе встречается нерассмотренная до этого функция millis(). Данная функция не имеет параметров и возвращает количество миллисекунд с момента запуска программы.Имеется возможность программного управления контрастностью дисплея. При этом случае, надобность в потенциометре отпадает и его нужно исключить из схемы. Вывод V0, который раньше был подключен к потенциометру, теперь нужно подключить к любому цифровому порту, поддерживающий широтно-импульсную модуляцию (ШИМ). Ниже приведен пример программы по управлению LCD с таким вариантом подключения. При этом V0 должен быть подключен к шестому цифровому порту.
#include <LiquidCrystal.h> //Подключение библиотеки: // Инициализация класса (в скобках указаны порты, через которые // подключен дисплей) LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // Указывает количество строк и символов в строке дисплея lcd.begin(16, 2); // Вывод сообщения. analogWrite(6,150); // Управление контрастом. lcd.print("hello, world!"); } void loop() { // Изменения положения курсора для вывода во второй строке: // (Строки и символы в строке нумеруются от нуля) lcd.setCursor(0, 1); // Вывод времени с момента включения: lcd.print(millis() / 1000); }
Данная программа отличается от предыдущей лишь строкой analogWrite(6,150);. Эта стока и задает контрастность дисплея. Так как сопротивление на выводе дисплея V0 довольно большое, нет необходимости настраивать порт на вывод.