LCD

Для работы с текстовым дисплеем, в 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 довольно большое, нет необходимости настраивать порт на вывод.