Программирование и робототехника – это сферы, которые привлекают не только профессионалов в данной отрасли. Многие люди хотели бы попробовать себя в написании простых программ или автоматизации каких-либо процессов. В этом плане многих привлекает Arduino. Эта торговая марка ориентирована на непрофессионалов. Компания выпускает как технику, так и программное обеспечение на нее.
Чтобы проекты ардуино, контактирующие через последовательный порт, могли взаимодействовать с их создателями, не обойтись без обратной связи. Наиболее простой и удобный способ – это дисплей. Экран такой системы существенно отличается от дисплея ноутбука. В этой статье будет рассказано, как соединить ардуино и дисплей, а также то, как использовать получившуюся конструкцию.
Суть соединения дисплея с ардуино
Большинству созданных с Ардуино проектов не обойтись без дисплея. Это подтверждает и перечень лучших проектов. Практически все из них имеют OLED дисплей Arduino, который делает результат более читаемым. Задача дисплея в том, чтобы отображать несложную информацию. Источником информации может быть датчик, небольшой контроллер и т.п. Как пример приводим лишь несколько возможных применений:
- Датчик температуры
- Спидометр
- Часы
- И многое другое…
Стоит учесть, что дисплей ардуино бывает двух разных типов – символьный и графический. Помимо этого, дисплеи делятся также и по цвету дисплея (что влияет только на визуальный вид проекта), так и на размер экрана. Понятно, что LCD дисплей Arduino большего размера сможет вывести больше полезной информации. Для взаимодействия контроллеров с дисплеем используются четыре канала. Еще отдельная линия используется для питания подсветки, которая идет от микроконтроллера. Сенсорный дисплей имеет также возможность изменять контрастность. Для динамической подсветки монитора используется потенциометр.
Необходимые компоненты
Чтобы вся собранная система была в рабочем состоянии, собирать ее нужно «по уму». Для этого потребуются драйверы, комплектующие, рабочий код, а также грамотное использование команд. Будем разбираться со всем по очереди.
Драйверы и библиотеки
Драйвер дисплея призван обеспечить взаимодействие контроллеров с экраном, а также посодействовать корректному отображению информации. Для нормальной работы дисплея нужно добавить в код библиотеки Arduino LCD. Кроме того, важно, чтобы библиотека была «знакома» с драйвером, который планируется использовать.
Список комплектующих
Попробуем разобраться в том, что же нужно иметь в наличии, чтобы выполнить подключение дисплея ардуино.
- Подключение ЖК экрана
- Наличие микроконтроллера
- Потенциометр
- Резистор
- Штыревые разъемы
- Провода
- Макет
А также может понадобиться i2c переходник. Не следует забывать и о том, что для подключения нужно позаботиться о ПО. Как правило, используется Arduino IDE.
Код
Код добавляется только после загрузки библиотеки. Вначале с официального сайта скачивается и устанавливается ПО, подходящее для операционной системы. После этого открывается среда разработки, вставляется код. После вставки кода требуется подгрузить архивы библиотек. На ПК выбирается активная плата, вставляется порт, и нажимается кнопка «Загрузить». После этого код полностью готов к работе.
Библиотека
Обязательны для добавления две библиотеки. Первая является графической и предназначена специально для экранов. Вторая требуется для поддержки драйверов. Ниже показаны первая и вторая соответственно.
#include «Adafruit_GFX.h»
#include «MCUFRIEND_kbv.h»
Основные команды
Уделим немного внимания и текстовым командам, которые потребуются для того, чтобы запустить часы на ардуино, или же использовать дисплей для других целей.
Класс и объект
Строка кода предназначена для того, чтобы обеспечить информационное соединение дисплея с проектом. Вид команда имеет примерно такой:
//(int CS=A3, int RS=A2, int WR=A1, int RD=A0, int RST=A4)
MCUFRIEND_kbv tft(A3, A2, A1, A0, A4);
Запуск ЖК дисплея
Функция, указанная ниже, получает и обрабатывает идентификатор экрана, после чего он становится полностью готовым к дальнейшим операциям.
uint16_t ID = tft.readID();
tft.begin(ID);
Разрешение экрана
Чтобы узнать разрешение экрана, можно ввести:
tft.width(); //int16_t width(void);
tft.height(); //int16_t height(void);
Полученные данные помещаются в строку uint16_t.
цвет экрана
tft.fillScreen(t); //fillScreen(uint16_t t);
Функция предназначена для того, чтобы установить цвет. Вместо последнего “t” строки нужно ввести цвет UTFT.
Заполнение пикселей
tft.drawPixel(x,y,t); //drawPixel(int16_t x, int16_t y, uint16_t t)
tft.readPixel(x,y); //uint16_t readPixel(int16_t x, int16_t y)
Первая строка меняет цвет пикселя в указанных координатах на цвет t. Вторая строка предназначена для считывания цвета пикселя по координате.
Рисование линий
//drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t t)
Строка задает линию от одной координаты к другой, а вместо последней буквы вставляется цвет этой линии.
Рисуем круги
tft.drawCircle(x,y,r,t); //drawCircle(int16_t x, int16_t y, int16_t r, uint16_t t)
tft.fillCircle(x,y,r,t); //fillCircle(int16_t x, int16_t y, int16_t r, uint16_t t)
Первая функция рисует пустой круг с заданными параметрами и цветом. Вторая – для заполненного круга.
Рисование треугольников
tft.drawTriangle(x1,y1,x2,y2,x3,y3,t);
//drawTriangle(int16_t x1, int16_t y1, int16_t x2, int16_t y2, int16_t x3, int16_t y3,// uint16_t t)
Команда рисует треугольник с координатами углов и заданным цветом. Если draw поменять на fill, то треугольник окажется заполненным.
Отображение текста
От простого к более сложному. Сначала нужно разместить курсор:
tft.setCursor(x,y); //setCursor(int16_t x, int16_t y)
Далее задается текст цвета и фона:
tft.setTextColor(t,b); //setTextColor(uint16_t t, uint16_t b)
После этого нужно задать размер текста:
tft.setTextSize(s); //setTextSize(uint8_t s)
Чтобы вывести один символ, нужен такой код:
tft.write(c); //write(uint8_t c)
Для введения строки и переноса курсора нужно вставить такую функцию:
tft.println(«строка»);
Вращение экрана
tft.setRotation(r); //setRotation(uint8_t r)
Данный код выполняет поворот дисплея на заданную величину, кратную 90.
Инвертирование цветов экрана
Операцию выполняет следующая функция:
tft.invertDisplay(i); //invertDisplay(boolean i)
Прокрутка экрана
for (uint16_t i = 0; i < maxscroll; i++) {
tft.vertScroll(0, maxscroll, i);
delay(10);}
В этом коде на место maxroll нужно подставить необходимую величину прокрутки дисплея.
Сброс
Чтобы очистить монитор порта Arduino, нужно прописать:
tft.reset();
Отображение монохромных изображений
Для этого потребуется предварительная подготовка. Вначале нужно перевести изображение в шестнадцатеричный код. После этого с помощью Arduino IDE код вставляется примерно в таком виде:
static const uint8_t name[] PROGMEM =
{ //Код картинки.
}
tft.drawBitmap(x, y, name, sx, sy, 0x0000);
Отображение цветного изображения RGB
Опять же, изображение сначала конвертируется в код, который затем загружается в Arduino IDE. Готовая функция для RGB матрицы должна иметь такой вид:
const uint16_t name[] PROGMEM = {
//Add image code here.
}
tft.drawRGBBitmap(x, y, name, sx, sy);
Запуск и тестирование
После создания кода его требуется запустить и проверить на работоспособность. Если все было качественно отлажено, то никаких проблем не возникнет. При желании можно, конечно, и переделать код под сенсорный дисплей. Но это, естественно, при его наличии.
Post scriptum
Поскольку дисплей ардуино является важным компонентом большинства проектов, рекомендуется серьезно вникнуть в процесс сборки и написания кода. Если выполнять все операции, понимая, что и почему делается, то получится обойтись без сложностей, обеспечив хорошую обратную связь для готового проекта.