Меню Рубрики

Библиотека lcd i2c arduino

Author Frank de Brabander Maintainer Marco Schwartz Website https://github.com/marcoschwartz/LiquidCrystal_I2C Category Display License Unknown Library Type Contributed Architectures avr

The library allows to control I2C displays with functions extremely similar to LiquidCrystal library. THIS LIBRARY MIGHT NOT BE COMPATIBLE WITH EXISTING SKETCHES.

Downloads

Filename Release Date File Size
LiquidCrystal_I2C-1.1.2.zip 2015-11-29 20.32 KiB
LiquidCrystal_I2C-1.1.1.zip 2015-10-19 20.32 KiB

This website is Open Source, please help improve it by submitting a change on GitHub:
https://github.com/njh/arduino-libraries

The content on this site was last updated: 2019-11-25 02:42:02 +0000

Подключить LCD1602 к Arduino (или любой другой LCD на базе микросхем HD44780) не всегда удобно, потому что используются как минимум 6 цифровых выходов. LCD I2C модули на базе микросхем PCF8574 позволяют подключить символьный дисплей к плате Arduino всего по двум сигнальным проводам (SDA и SCL). Для работы с этими модулями понадобится библиотека LiquidCrystal_I2C.

Совсем недавно познакомился с Ардуино, поэтому многим мои примеры покажутся простыми.

Однако таким же новичкам, как я, данная информация будет полезна и сэкономит массу времени.

I2C — стандарт общения устройств по 2м проводам, при этом количество устройств, которое висит параллельно на этих проводах может быть очень большим. У каждого устройства есть свой адрес, по которому происходит обращение к устройству. Адресацию можно менять, если на устройстве есть перемычки, которыми можно установить дополнительное смещение относительно базового адреса, жестко прописанного в устройстве.

Это в двух словах.

Начал я все с того, что купил 16х2 символьный LCD дисплей на Ибее. Подключив стандартно — понял что это не то, что нужно. Масса проводов — занимает кучу ножек, хаос и беспорядок.

Погуглил, понял что есть дисплеи с интерфейсами, упрощающие подключение. погуглил еще, нашел переходник на I2C для моего LCD. Месяц ожидания, ура-ура, подключил.

Читайте также:  Будра плющевидная в ландшафтном дизайне

Выглядит гораздо интереснее!

Проблема возникла на этапе поиска рабочих библиотек и примеров. Как оказалось потом — в основной наиболее известной библиотеке bitbucket.org/fmalpart >
Конкретно вот тут лежат рабочие примеры и ссылка на библиотеку. arduino-info.wikispaces.com/LCD-Blue-I2C
Там же можно найти описания различных версий LCD-I2C переходников, которые можно купить.

Я покупал вот такой www.ebay.com/itm/310565362720 собран он на чипе PCF8574

Данная версия библиотеки требует установку параметров дисплея в следующем виде

где первое число — адрес устройства, остальные — назначают управляющие пины переходника под конкретный дисплей. тут то и была скрыта проблема — многие примеры инициализируют экран неправильными данными — при этом экран моргает, дергается и не работает.

Правильная строка, с адресом и нужными пинами — зависит от конкретного дисплея. Новичку понять суть и забить необходимые данные — сложно!
Все что выше — рабочий вариант. Он, наверняка, даже лучше той библиотеки, которую я сейчас использую. Но он показался мне чересчур избыточным и громоздким.

Вторая библиотека заработала сразу. arduino-info.wikispaces.com/file/detail/LiquidCrystal_I2C1602V1.zip/341635514
К сожалению, не помню откуда взял демо для данной библиотеки, но в ней используется упрощенная настройка LCD, что мне было и нужно.

В данной строке назначается адрес устройства и определяется тип дисплея, 16 символов в 2 строки.

Первая и вторая библиотеки между собой не совместимы! . Примеры для одной библиотеки не работают с другой. Нижеследующий код будет относиться к последней указанной библиотеке для работы с I2C LCD.

После подключения экрана, захотелось что-то на него выводить. Просто цифры не интересно. Пусть будут часы=)) Наверное, все проходят этот путь, включая меня. Софтовые часы Ардуины вполне себе позволяют показывать время, но проблема в сбросе данных при отключении. А так как кнопок у меня нет, устанавливать часы приходится через кабель по COM порту через консоль. Вообщем, надоело мне это очень быстро.

Читайте также:  Выкройка длинного приталенного пальто

Часы реального времени RTC1307 — наверное самая распространенная микросхема для часов. Плюсов много — отдельная микросхема, независима от основного питания Ардуино при наличии батарейки, не зависима от основной программы — время считает точно! Преимущество часов на базе 1307 — I2С. При этом никаких дополнительных выходов задействовать не нужно — управляется все по тем же 2м проводам как и LCD.

Библиотека для работы с часами по I2c заработала сразу, примеры рабочие. github.com/adafruit/RTClib

Программа простая, все прозрачно. Цифры создаются функциями, в которых отдельными блоками выводится цифра. Блоки по 5×8 точек задаются в пользовательских символах, максимально их может быть 8. Пример взят с форума arduino.cc.

Отрисовка происходит в отдельной функции, цифры выводятся по одной. Бегающие крестики — прихоть автора, т.е. моя)) Смещение цифр контролируется при вызове функции отрисовки.

Буду признателен опытным программистам, если подскажут как сделать код компактнее. Кажется, есть масса возможностей для оптимизации однотипных данных, но не знаю как это реализовать. Видел примеры на том же форуме arduino.cc — но не понял сути происходящего — код слабо закомментирован и я не понимаю откуда ноги растут. Что-то там было связано с памятью контроллера LCD/ Буду признателен за комментирование кода.

UPD: пока заметка лежала в песочнице, сделал еще несколько вариантов часов. Кому-то это интересно? Сделал псевдо 3d шрифт из 3х2 символов и добавил бипер, чтобы тикал каждую секунду

Сделал тонкий шрифт из 2х2 символов для вывода на одном 1602 экране часов, минут, секунд + отображение дня недели и даты. Тонкий шрифт — нарисовал сам по какой-то случайной картинке — в виде кода не нашел. Еще добавил бипер + RGB светодиод, который меняет оттенок каждую секунду. Вообщем, все что было — все прикрутил))

Читайте также:  Viega 557119 трап для душа

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *