Ранее уже было рассказано о подключении дисплеев к платам Arduino UNO и об основах их поддержки при помощи программ. Тем не менее, необходимо отметить, что сами дисплеи не будут применяться в большинстве устройств по причине простоты их жидкокристаллических модулей, посредством которых невозможно осуществлять нужную настройку (это требует подключения клавиатуры).
В данной статье будет подробнее рассказано о комплексном продукте Olimex, который называется SHIELD-LCD16x2 и является платой расширения. Она увеличивает функциональные особенности Arduino посредством жидкокристаллического монитора, четырех кнопок и восьми линий типа GPIO.
Также плата оснащена процессором PIC, обменивающимся информацией с Arduino UNO при помощи интерфейса TWI. За счет наличия функциональной библиотеки работать с решением, которое также имеет встроенный микроконтроллер, несложно и не проблематично.
Подготовительный этап работы с продуктом OLIMEX
Подготовительный этап включает 2 действия: аппаратное и программное. Первое весьма простое: необходимо установить расширительную плату Olimex в Arduino UNO. Для второго нужно установить библиотеку с функционалом поддержки устройства.
Для этого требуется зайти на официальный портал изготовителя (Olimex) и в поисковике ввести следующий текст: «LCD16x2», после этого кликнуть на команду «Search» (поиск). Из двух выдаваемых системой вариантов нужно выбрать строчку «SHIELD-LCD16x2».
После описания приспособления расположен блок под названием «SOFTWARE», в котором все строки представляют собой ссылки на файлы, доступные для загрузки с данного официального портала. Необходимо найти строку, содержащую следующую надпись: «OLIMEXINO-328 + SHIELD-LCD16x2 – a library and set of demo examples» и осуществить загрузку ZIP-файла, находящегося в этой ссылке, в память своего персонального компьютера.
Рекомендуется предварительно познакомиться с предлагаемыми примерами и затем произвести установку библиотеки из каталога LCD16x2. Решение Arduino IDE дает несколько возможностей установки библиотеки.
В описанном выше варианте лучше осуществить загрузку источника в каталог продукта, содержащего подкаталог под названием «Libraries» (библиотеки). Каталог-хранилище создается в тот момент, когда устанавливается Arduino IDE, а Windows, как правило, размещает его в папку «Этот компьютер» -->«Документы» --> «Arduino».
Для добавления источников библиотек (в вышеописанном примере) необходимо переместить каталог под названием LCD16x2 в папку «Libraries». После всех манипуляций нужно запустить Arduino IDE.
Как считывается состояние кнопок в SHIELD-LCD16x2
Прежде чем начинать работу в собственной программе, рекомендуется подробно изучить примеры того, как используется библиотечный функционал LCD16x2.h, который находится в каталоге «Examples» (примеры). Данный способ изучения и ознакомления считается наиболее эффективным, но, кроме этого, можно прочитать документацию по теме.
Ранее было упоминание о том, что платы расширения осуществляют обмен информацией с UNO-платой через интерфейс, который является последовательным. Из этого следует, что функционал, который был представлен ранее, должен подвергнуться видоизменениям, так как был использован четырехбитный тип параллельного интерфейса.
Имеется предположение относительно обмена информацией между микроконтроллером и жидкокристаллическим монитором аналогичным образом. Тем не менее, Arduino UNO не распознает монитор, осуществляя манипуляции косвенным методом.
Именно по этой причине работу с платформой рекомендуется начать с добавления поддерживающих библиотек с последовательным типом интерфейса. Помимо этого, нужно присоединить монитор на плате расширения следующим образом:
1. #include < LCD16x2.h>
2. #include
Можно упростить процесс и не пользоваться этим библиотечным именем путем присвоения ей алиаса «lcd». Его можно использовать путем указания имени функции библиотеки (ставится за точкой): LCD16x2 lcd. В предшествующем тексте рассказывалось о программах, которые создаются для Arduino, и об их подразделении на 2 части: функции инициализации и бесконечные циклы.
Команду для инициализации вводят в функцию под названием «void setup()», для бесконечных циклов – «void loop()», при этом следует знать, что первый тип команд выполняется единожды, а другой – в течение всего периода, пока работает ПО.
Посредством инициализации запускается TWI, производится очистка жидкокристаллического монитора и включается его подсветка с предельной степенью яркости светодиодного элемента:
void setup
{
Wire/begin(); //TWI interface init
Icd.IcdClear(); //LCD screen clear
Icd.IcdSetBlacklight(255); //maximum blacklight on
}
В платах Olimex, когда не нажимается никакая кнопка, функционалом их прочтения возвращаются исключительно единицы. Если кнопка нажимается, происходит сброс соответствующего бита. Функционал для прочтения кнопок именуется «readButtons()», им возвращается переменная int-типа.
Вызывается она способом, описанным ниже:
zmienna = Icd.readButtons();
Имеется возможность работы с типом битов, представляющих собой логические нули, однако гораздо проще при производстве последующего анализа, если установлены соответствующие биты. Это можно сделать посредством следующей команды: переменная =~переменная. Пи установке бита его уровень весьма легко и комфортно тестируется благодаря логическому произведению, которое равняется «истине» тогда, когда 2 составные части также являются «истиной».
Константы битов 0х01 на значении 0; 0х02 – на значении 1,0х04; 2,0х08 – для 3 и далее позволяют осуществлять проверку последовательных битовых позиций. При этом неважно, используются ли шестнадцатеричный, двоичный либо десятичный тип чисел для проверок, но опытным путем доказана простота использования шестнадцатеричных чисел при написании.
Как видно, применяемые при проверке позиций битов следующие шестнадцатеричные числа представляют собой степень 2:
buttons = Icd.Icd.readButtons();
if (buttons & 0x01) pressed = 1;
else if (buttons & 0x02) pressed = 2;
else if (buttons & 0x04) pressed = 3;
else if (buttons & 0x08) pressed = 4;
else pressed = 0;
Здесь «buttons» информирует о нажатии кнопок, «if…else» завершает тестирование кнопок, после того, как условия будут выполнены. Посредством этого сокращается период работы программ, однако имеется проблема, связанная с наличием иерархии в кнопках, поэтому не представляется возможным прочтение состояния 2 либо большего количества кнопок, которые нажаты в данный момент (например, комбинация типа Shift+Ctrl на персрнальном компьютере).
Значение 0х01 имеет соответствие с первой кнопкой с левой стороны, а 0х08 – первой с правой. Программа содержит нумерацию кнопок, а «pressed» соответствует условной нумерации кнопок. После данная нумерация показывается на жидкокристаллическом мониторе в первой строке и первом столбце, причем происходит это, если «pressed» отлично от нуля.
В иной ситуации можно появится надпись «No button», которая информирует об отсутствии нажатия хотя бы одной из кнопок:
Icd.IcdGoToXY(1, 1);
If (pressed ! = 0)
{
Icd.IcdWrite(pressed);
Icd.IcdGoToXY(2, 1);
Icd.IcdWrite(« is pressed»);
}
Else Icd.IcdWrite(«No button »).