Ардуино: вывод текста на ЖК дисплей 1602
Содержание
Все давно привыкли, что у каждого электронного устройства есть экран, с помощью которого оно дает человеку всякую полезную информацию. MP3-плеер показывает название играемого трека, пульт квадрокоптера отображает полетную телеметрию, даже стиральная машина выводит на дисплей время до конца стирки, а на смартфоне вообще размещается целый рабочий стол персонального компьютера!
Скорее всего, вашему очередному устройству тоже не помешает какой-нибудь небольшой дисплейчик 🙂 Попробуем сделать простые электронные часы! А в качестве табло используем распространенный и дешевый символьный жидкокристаллический дисплей 1602. Вот прямо такой, как на картинке:
Кроме 16х2, достаточно популярным считается символьный дисплей 20х4 (четыре строки по 20 символов), а также графический дисплей с разрешением 128х64 точек. Вот они на картинках:
Подключение символьного ЖК дисплея 1602
У дисплея 1602 есть 16 выводов. Обычно они нумеруются слева-направо, если смотреть на него так как на картинке. Иногда выводы подписываются, типа: DB0, DB1, EN и т.п. А иногда просто указывают номер вывода. В любом случае, список выводов всегда одинаковый:
1 — GND, земля (минус питания);
2 — Vcc, питание +5В;
3 — VEE, контраст;
4 — RS, выбор регистра;
5 — R/W, направление передачи данных (запись/чтение);
6 — EN, синхронизация;
7-14 — DB0, DB1, . DB7″- шина данных;
15 — анод подсветки (+5В);
16 — катод подсветки (земля).
Линии VEE, RS и четыре линии данных DB4, DB5, DB6, DB7 подключаем к цифровым выводам контроллера. Линию R/W подключим к земле контроллера (так как нам потребуется только функция записи в память дисплея). Подсветку пока подключать не будем, с этим, я полагаю, вы сами легко разберетесь 🙂
Принципиальная схема подключения дисплея к Ардуино Уно
Внешний вид макета
На всякий случай еще и в виде таблички:
ЖК дисплей 1602 | 1 | 2 | 4 | 6 | 11 | 12 | 13 | 14 | 15 | 16 |
Ардуино Уно | GND | +5V | 4 | 5 | 6 | 7 | 8 | 9 | +5V | GND |
Программируем Hello, world!
Для работы с ЖК дисплеями различных размеров и типов, в редакторе Arduino IDE имеется специальная библиотека LiquidCrystal. Чтобы подключить библиотеку, запишем первой строчкой нашей программы следующее выражение:
Далее, нам потребуется указать какие выводы Ардуино мы использовали для подключения дисплея. Эту информацию мы укажем при инициализации модуля:
Здесь первые два аргумента — это выводы RS и EN, а оставшиеся четыре — линии шины данных DB4-DB7.
Далее, укажем размер дисплея с помощью команды begin:
Напоминаю, в нашем дисплее имеется две строки, по 16 символов в каждой.
Наконец, для вывода текста нам понадобится простая функция print. Вывод с помощью этой функции всем известной фразы будет выглядеть следующим образом:
Полностью программа будет выглядеть так:
Загружаем её на Ардуино Уно, и смотрим что творится на дисплее. Может быть три основных ситуации 🙂
1) На дисплее отобразится надпись Hello, world!. Значит вы все правильно подключили, и контраст каким-то чудесным образом оказался изначально правильно настроен. Радуемся, и переходим к следующей главе.
2) На дисплее отобразится целый ряд черных прямоугольников — требуется настройка контраста! Именно для этого мы добавили в цепь потенциометр с ручкой. Крутим его от одного края, до другого, до момента пока на дисплее не появится четкая надпись.
3) Два ряда черных прямоугольников. Скорее всего, вы что-то напутали при подключении. Проверьте трижды все провода. Если не найдете ошибку — попросите кота проверить!
Программируем часы
Теперь когда дисплей точно работает, попробуем превратить наше нехитрое устройство в настоящие электронные часы.
Внимание! Для вывода времени нам потребуется библиотека Time. Если она еще не установлена, то можно скачать архив по ссылке. Подключим ее:
Затем установим текущие дату и время с помощью функции setTime:
Здесь все понятно: часы, минуты, секунды, месяц, число, год.
Для вывода даты используем кучу функции:
- year() — вернет нам год;
- month() — месяц;
- day() - день;
- hour() - час;
- minute() — вернет минуту;
- second() - секунду.
Теперь обратим внимание вот на какой факт. Если посчитать количество символов в типовой записи даты: 31.12.2015 23:59:59, получим 19. А у нас всего 16! Не влазит, однако, в одну строчку.
Решить проблему можно еще одной полезной функцией — setCursor. Эта функция устанавливает курсор в нужную позицию. Например:
Установит курсор в начало второй строчки. Курсор — это место символа, с которого начнется вывод текста следующей командой print. Воспользуемся этой функцией для вывода даты в первой строчке, а времени во второй.
С выводом даты и времени теперь все ясно. Остались рутинные вещи. Например, после каждого заполнения дисплея, мы будем его чистить функцией clear():
А еще нам нет смысла выводить данные на дисплей чаще чем раз в секунду, поэтому между двумя итерациями сделаем паузу в 1000 миллисекунд.
Итак, сложив все вместе, получим такую программу:
Загружаем скетч на Ардуино Уно, и наблюдаем за ходом часиков! 🙂 Для того чтобы закрепить полученные знания, рекомендую прокачать наши часы до полноценного будильника. Всего-то на всего потребуется добавить пару кнопок и зуммер 🙂
Источник: