ARDUINO и текстовые дисплеи

    Индикация светодиодами условна и применима там где необходимо иметь визуальный относительный контроль — так например — индикатор уровня звука для аккустических систем (дает представление о мощности подводимого сигнала и предупреждает о перегрузе усилителя или колонки); вольтметр грубого уровня измерения бортовой сети автомобиля или катера (дает представление о состоянии аккумуляторной батареи — разряжена, заряжена или заряжается). Но существует необходимость более точного измерения некоторых параметров — напряжения, тока, давления, влажности или ускорения и отобразить такую информацию только светодиодами практически невозможно — требуются цифровые числовые значения, а не приблизительные границы параметров. В этой ситуации очень востребованы цифровые текстовые дисплеи. Одним из самых распространенных дисплеев такого типа, на сегодняшний момент, является текстовый жки-дисплей с интерфейсом HD44780. Дисплеи данного типа производят несколько различных фирм, но в данном разделе будет описан дисплей компании WinStar. В модельном ряду компании есть одно, двух, четырех строчные дисплее с четырьмя, восемью, шестнадцатью и более знакомест на строку. Очень популярной является модель WH1602L — двухстрочный дисплей на 16 знакомест с различными цветами подсветки — желтый, зеленый, красный, синий и тд. По температурному исполнению различают два типа — коммерциал и индастриал( первый имеет диапазон температур 0 — +70С и применяется в помещениях, второй: -45 — + 85С и монтируется в уличных системах индикации и оповещения. Тем, кто серьезно хочет просмотреть документацию на драйвер жки HD44780 — рекомендуется скачать файл производителя HITACHI отсюда.

Исполнение индикаторов может несколько отличаться по внешнему виду, но функционал всегда один и тот же.

fig1

На рисунке представлены два разных типа дисплея.

Выделять на подключение дисплея полный цифровой порт — 8 выводов, да к ним еще 3 служебных для команд — это абсолютная роскошь. Здесь рассматривается подключение по 6-ти выводам (полубайт используется для команды, и так как менять знакополе в ПЗУ дисплея не предусматривается, вывод дисплея R/W (чтение/запись) устанавливается в ноль) остаются выводы Е и RS. Ниже приводится схема подключения платы Ардуино к дисплею. Библиотеку для работы с жки скачать здесь.

LCD и ардуино


Классический текст программы «Hello, world!» для первого включения:

/* Подключается библиотека для работы с LCD */
#include <LiquidCrystal.h>

/* Создаётся объект lcd, с помощью конструктор класса LiquidCrystal   с 6-ю аргументами. Библиотека по количеству аргументов сама определит, что нужно использовать 4-битный интерфейс.   Указываем, к каким пинам Arduino подключены выводы дисплея:
RS, E, DB4, DB5, DB6, DB7  */
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
void setup()
{
/* Инициализируем дисплей: 2 строки по 16 символов */
lcd.begin(16, 2);
lcd.clear();
/* Устанавливаем курсор в 3 столбец 1й строки. Отсчет идет с 0-й позиции*/
lcd.setCursor(2, 0);
/* Выводим на дисплей традиционную фразу */
lcd.print(«Hello, world!»);
}
void loop() {}


Состав библиотеки для работы с жки:

LiquidCrystal name

Описание

Создает переменную-конструктор name типа LiquidCrystal. Дисплей может управляться с использованием 4 или 8 линий данных. В первом случае, оставьте номера контактов для d0-d3 и оставьте эти линии неподключенными. Вывод RW может быть подключен к земле, а не подключен к контакту на Arduino; если это так, исключите его из параметров этой функции.

Синтаксис

LiquidCrystal lcd(rs, enable, d4, d5, d6, d7)
LiquidCrystal lcd(rs, rw, enable, d4, d5, d6, d7)
LiquidCrystal lcd(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)
LiquidCrystal lcd(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)

Параметры

rs: номер контакта платы Arduino, подключенного к контакту RS на ЖКИ

rw: номер контакта платы Arduino, который подключен к выходу RW на ЖКИ

enable: номер контакта платы Arduino, подключенного к контактному разъему на ЖКИ

d0, d1, d2, d3, d4, d5, d6, d7: номера контактов платы Arduino подключенных к шине данных  ЖКИ. d0, d1, d2, d3 как опция 8 битного управления; ЖКИ может управляться полубайтными командами, используя только линии (d4, d5, d6, d7).


begin()

Описание
Инициализирует интерфейс в ЖКИ и задает размеры (ширину и высоту) дисплея. begin () необходимо вызвать перед любыми другими командами библиотеки ЖКИ.
Синтаксис
lcd.begin(cols, rows)
Параметры
lcd: переменная типа LiquidCrystal
cols: количество столбцов, отображаемых на дисплее
rows: количество строк, отображаемых на дисплее


clear()

Описание
Очищает ЖК-экран и позиционирует курсор в верхнем левом углу.
Синтаксис
lcd.clear ()
Праметры
lcd: переменная типа LiquidCrystal


home()

Описание
Позиционирует курсор в левом верхнем углу ЖК-дисплея. То есть, используйте это местоположение при выводе последующего текста на дисплей. Чтобы также очистить дисплей, используйте функцию clear ().
Синтаксис
lcd.home ()
Параметры
lcd: переменная типа LiquidCrystal


setCursor()

Описание
Поместите курсор на ЖК-дисплей; то есть укажите место, где будет отображаться следующий текст, записанный на ЖК-дисплей.
Синтаксис
lcd.setCursor (col, row)
Параметры
lcd: переменная типа LiquidCrystal
col: столбец, в который будет помещен курсор (при этом ноль является первым столбцом)
строка: строка, в которой будет располагаться курсор (с нулевой, являющимся первой строкой)


write()

Описание
Запись символа на ЖК-дисплей.
Синтаксис
lcd.write (данные)
Параметры
lcd: переменная типа LiquidCrystal
данные: символ для записи на дисплей
Возвращает байт
write () вернет количество написанных байтов, хотя чтение этого числа является необязательным
Пример

#include <LiquidCrystal.h>                          // подключение библиотеки ЖКИ
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);       // параметры подключения ЖКИ

void setup()
{
Serial.begin(9600);               // Инициализируем UART порт на скорости 9600
}

void loop()
{
if (Serial.available()) {          // Если порт доступен то
lcd.write(Serial.read());      // Пишем на дисплее символ принятый в UART порт
}
}


print()

Описание
Распечатывает текст на ЖК-дисплее.
Синтаксис
lcd.print (данные)
lcd.print (данные, BASE)
параметры
lcd: переменная типа LiquidCrystal
данные: данные для печати (char, byte, int, long или string)
BASE (необязательно): база для печати чисел: BIN для двоичного кода (база 2), DEC для десятичной (базовая 10), OCT для восьмеричного (база 8), HEX для шестнадцатеричного (базовая 16).
Возвращает байт
print () вернет количество написанных байтов, хотя чтение этого числа является необязательным
пример

#include <LiquidCrystal.h>                          //подключение библиотеки ЖКИ
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);       // параметры подключения ЖКИ

void setup()
{
lcd.begin(16,1);                   //инициализация ЖКИ
lcd.print(«hello, world!»);    //вывод типовой фразы на дисплей -> hello, world!
}
void loop() {}                        //зацикливание контроллера


cursor()

Описание
Отобразите курсор LCD: символ подчеркивания (строка) в позиции, в которой будет записан следующий символ.
Синтаксис
lcd.cursor ()
параметры
lcd: переменная типа LiquidCrystal


noCursor()

Описание
Скрывает курсор LCD.
Синтаксис
lcd.noCursor ();
параметры
lcd: переменная типа LiquidCrystal


blink()

Описание
Отобразите мигающий ЖК-курсор. Если используется в сочетании с функцией cursor (), результат будет зависеть от конкретного дисплея.

Синтаксис
lcd.blink ();
параметры
lcd: переменная типа LiquidCrystal


noBlink()

Описание
Отключает мигающий ЖК-курсор.
Синтаксис
lcd.noBlink ();
параметры
lcd: переменная типа LiquidCrystal


display()

Описание
Включает ЖК-дисплей после того, как он выключен с помощью функции noDisplay (). Это восстановит текст (и курсор), который был на дисплее.
Синтаксис
lcd.display();
параметры
lcd: переменная типа LiquidCrystal


noDisplay()

Описание
Выключает ЖК-дисплей, не теряя отображаемого на нем текста.
Синтаксис
lcd.noDisplay ();
параметры
lcd: переменная типа LiquidCrystal


scrollDisplayLeft()

Описание
Прокручивает содержимое дисплея (текст и курсор) на одно место слева.
Синтаксис
lcd.scrollDisplayLeft ();
параметры
lcd: переменная типа LiquidCrystal


scrollDisplayRight()

Описание
Прокручивает содержимое дисплея (текст и курсор) на одно место справа.
Синтаксис
lcd.scrollDisplayRight ();
параметры
lcd: переменная типа LiquidCrystal


autoscroll()

Описание
Включает автоматическую прокрутку ЖКИ. Это приводит к тому, что каждый символ выводит на дисплей, чтобы нажимать предыдущие символы на одно пространство. Если текущее направление текста слева направо (по умолчанию), дисплей прокручивается влево; если текущее направление справа налево, дисплей прокручивается вправо. Это приводит к выходу каждого нового символа в одно и то же место на ЖК-дисплее.
Синтаксис
lcd.autoscroll ();
параметры
lcd: переменная типа LiquidCrystal


noAutoscroll()

Описание
Отключает автоматическую прокрутку ЖК-дисплея.
Синтаксис
lcd.noAutoscroll ()
параметры
lcd: переменная типа LiquidCrystal


leftToRight()

Описание
Задайте направление текста, записанного на ЖК-дисплей, слева направо, по умолчанию. Это означает, что последующие символы, записанные на дисплей, будут перемещаться слева направо, но не влияют на текст, выводимый ранее.
Синтаксис
lcd.leftToRight ();
параметры
lcd: переменная типа LiquidCrystal


rightToLeft()

Описание
Установите направление для текста, записанного на ЖК-дисплей, справа налево (по умолчанию слева направо). Это означает, что последующие символы, записанные на дисплей, будут отображаться справа налево, но не влияют на текст с предыдущим выходом.
Синтаксис
lcd.rightToLeft ();
параметры
lcd: переменная типа LiquidCrystal


Выше описанные функции библиотеки для работы с жки дают возможность практически полного управления выводом текстовой информации на дисплей. Создание собственного текстового символа и его запись в память дисплея будет описана позже.