Arduino на практике часть 2

С полным описанием всех параметров и характеристик модуля ЖК-дисплея можно ознакомиться здесь. В данной статье детально описано, что необходимо для подключения дисплея к плате Arduino UNO, а также, что заложено в основу его поддержки посредством программы.

Arduino на практике часть 2

При этом стоит понимать, что применение такого дисплея не будет очень востребовано в большинстве устройств. Основная причина тому — отсутствие возможности осуществлять настройки с таким очень простым ЖК-модулем. Для реализации таких функций нужна клавиатура.

Данная тема более детально будет рассмотрена в одной из следующих статей, но на сегодняшний день можно воспользоваться уже готовым решением Arduinо — платой Olimex, имеющей название SHIELDLCD16x2.

Данная плата является платой расширения, посредством которой существенно увеличиваются возможности Arduino. Плата оснащена модулем ЖК-дисплея (две строки и в каждой по 16 символов), 4 кнопки и 8 дополнительных линий GPIO. На плате установлен процессор PIC, осуществляющий обмен данными с Arduino UNO посредством интерфейса TWI. На практике проблем с применением такого модуля (со встроенным микроконтроллером) возникнуть не должно, ведь имеется доступ к библиотеке функций. Процесс подготовки модуля к рабочему процессу должен выглядеть следующим образом.

Подготовительные процессы для начала работы с платой Olimex

Подготовительный этап модуля для выполнения предстоящих задач состоит из двух этапов:

  • аппаратный: тривиальный, ведь нет никакой проблемы в том, чтобы вставить плату расширения в плату Arduino UNO;
  • программный: заключается в процессе установления библиотеки, неотъемлемой частью которой являются функции поддержки модуля.

Для того, чтобы установить библиотеку, переходим на сайт создателя модуля (компания Olimex). Далее в поле поиска (находится возле кнопки Search) прописываем часть названия модуля «LCD16x2» (рис 1). При помощи мышки нажимаем на Search. Из появившихся на экране результатов выбираем «SHIELD-LCD16x2».

Блок «Software» расположен под описанием модуля (рис 2). Указанная в таком поле любая строка текста представляет собой ссылку на файл (загрузка происходит с веб-сайта Olimex). В данном случае наш интерес касается ссылки, имеющей название «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 происходит посредством последовательного интерфейса. Учитывая это, возникает необходимость в изменении описанных ранее функций, ведь они применяли 4-битный параллельный интерфейс.

Не будет ошибкой предположение, что обмен информацией между расположенным на плате расширения микроконтроллером и модулем символьного ЖК-дисплея осуществляется таким же способом. Но при этом Arduino UNO не распознаёт дисплей, из-за чего процесс управления выполняется косвенно. Это предопределяет необходимость для начала программы с присоединения библиотек поддержки конкретного последовательного интерфейса и модуля дисплея (установлен на плату расширения).

#include

#include

Для большего удобства и исключения необходимости применять длинное время имя библиотеки, рациональнее будет присвоить её алиас lcd. Оно будет применяться на практике, а после точки прописываться имя библиотечной функции.

LCD16x2 lcd;

Вспомнив ранее написанную статью, мы уже знаем, что программы, предназначенные для Arduino, разделяются на две части:

  • функцию инициализации: ввод команд осуществляется в теле функции void setup(). Могут быть выполнены исключительно один раз. Посредством данной функции происходит запуск интерфейса TWI, очистка ЖК-экрана, включение подсветки дисплея на максимально допустимой яркости светодиода.
  • бесконечный цикл: ввод команд осуществляется в теле функции void loop(). Выполнение происходит на постоянной основе во время функционирования программы.

void setup()

{

Wire.begin(); //TWI interface init

lcd.lcdClear(); //LCD screen clear

lcd.lcdSetBlacklight(255); //maximum backlight on

}

Рассматривая плату Olimex, при условии, что ни какая кнопка не нажата, на функции чтения кнопок происходит возврат только единицы, при нажатии на кнопку отвечает связанный с ней бит.

Посредством функции readButtons() происходит возврат переменной типа int, при этом её вызов имеет такой вид:

zmienna = lcd.readButtons();

Не составляет труда осуществлять работу с битами, являющимися логическими нулями, но проще и комфортнее для дальнейшего анализа, наличие уже установленного соответствующего бита.

Выполните это т.н. единичное дополнение:

переменная =~переменная;

В случае с установленным битом, тестирование его уровня легче выполнять при помощи логического произведения. Он будет равен «истина» в том случае, когда каждая из составляющих будет равна «истина». Проверку последовательных битовых позиций можно выполнить с помощью констант: 0х01 касательно бита на позиции 0,0х02, 1,0х04 на позиции 2, 0х08 на позиции 3 и так далее.

При этом не имеет никакого значения, применяются для проверки битов 16-цатеричные, 2-ичные или 10-тичные числа. Практика показывает, что написание значительно проще с 16-цатеричными числами.

Обратите внимание на то, что следующие, применяемые для проверки позиции бита 16-е числа, это степени 2.

buttons = lcd.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 происходит завершение тестирования кнопки по окончанию выполнения условий. Это позволяет минимизировать время функционирования программы, но при этом возникает недостаток, заключающийся в том, что кнопка как бы является частью иерархии, поэтому прочесть состоянии больше одной нажатой кнопки не предоставляется возможным. Это что-то по типу одновременного нажатия на компьютере Shift и Ctrl.

Маска 0х01 относится к первой кнопке слева, а 0х08 — к правой справа. Каждая кнопка в программе имеет свой номер, а само значение им присваивается переменной pressed, что будет непременно соответствовать условному номеру кнопки. Данные номера отображаются на экране, начиная с первой строки и первого столбца. Сообщение будет появляться только в том случае, когда pressed будет отличаться от 0. В ином случае появится сообщение «No button», свидетельствующее об отсутствии нажатия какой-либо кнопки. В конце сообщения — 3 пробела. Это позволяет очищать последние знаки надписи в процессе наложения на «1 is pressed», ведь оно длиннее.

lcd.lcdGoToXY(1, 1);

if (pressed != 0)

{

lcd.lcdWrite(pressed);

lcd.lcdGoToXY(2, 1);

lcd.lcdWrite(" is pressed");

}

else lcd.lcdWrite("No button ");

Статья дополнена всем необходимым скетчем. Непременно копируем его и направляем в память микроконтроллера Arduino UNO, нажав при этом клавиши — Ctrl+U (Sketch → Upload).

SHIELD-LCD16X2 Дочерняя плата; LCD-дисплей; I2C,UART

ARDUINO UNO REV3 Arduino; ATMEGA328; GPIO,I2C,PWM,SPI,UART

Другие новости

Серия разъёмов Standard Buccaneer производства компании Bulgin представляют собой изделия, выделяющиеся среди иных, предлагаемых на...
--> 8 и 9 мая празднуем День Победы и предлагаем вам делать покупки со  скидкой в 30%! Встречайте великий праздник...
Регистрация