Работа с сенсорным экраном на Arduino DUE
1. Общие сведения
Это дополнение разработано тем же автором, что и базовая библиотека. Свежую версию можно скачать здесь:
http://www.henningkarlsen.com/electronics/library.php?id=55
Это дополнение не является самостоятельным и требует подключения базовой библиотеки UTFT.
Итак, рассмотрим более подробно дополнение Utouch, предназначенное для работы с сенсорным экраном, которым оборудовано большинство TFT дисплеев.
2. Начало работы с сенсорным экраном
Для работы с дополнением Utouch необходимо подгрузить его в Вашу программу и выполнить инициализацию. Естественно, при этом должна быть подгружена и инициализирована базовая библиотека UTFT. Напоминаем, что для нашего дисплея, о котором шла речь в предыдущей статье, инициализация выглядит следующим образом:
#include
UTFT myGLCD(CTE32HR,25,26,27,28);
Теперь подгружаем дополнение и создаем объект – сенсорный экран с именем myTouch. В качестве параметров команде инициализации передаются номера пинов, к которым подключены сигналы TCLK, TCS, TDIN, TDOUT и IRQ. Эти параметры следует выяснить у производителя дисплея или шильда, посредством которого дисплей подключен к контроллеру.
В нашей модели сенсорного экрана вышеупомянутые сигналы подключены, соответственно, к пинам 6, 5, 4, 3 и 2. Напоминаем, что схему шильда, при помощи которого подключается дисплей можно найти здесь:
http://coldtears.lin3.siteonlinetest.com/files/CTE_DUE_shield.zip
а схему самого дисплейного модуля – здесь:
http://coldtears.lin3.siteonlinetest.com/files/3.2b.zip
Итак для нашего дисплея мы должны вставить в программу следующие строки:
#include
UTouch myTouch(6,5,4,3,2);
Далее необходимо проинициализировать в процедуре void setup() дисплей и сенсорный экран:
void setup() <
myGLCD.InitLCD();
myTouch.InitTouch();
>
Команда InitTouch также, как и команда InitLCD базовой библиотеки, задает вертикальную или горизонтальную ориентацию дисплея. По умолчанию задается горизонтальная ориентация. Все, теперь можно работать с нашим сенсорным экраном. Рассмотрим совсем простой пример, при помощи которого мы сможем убедиться, что сенсорный экран заработал. Скомпилируем следующую программу и загрузим ее в память контроллера:
При старте программы дисплей закрашивается красным цветом. Теперь коснемся экрана в любой точке – и дисплей окрасится в зеленый цвет.
3. Калибровка сенсорного экрана
Прежде чем продолжить работу необходимо выполнить еще одну важную процедуру – калибровку сенсорного экрана. В примерах программ, поставляемых с дополнением Utouch есть один очень важный пример, который называется UTouch_Calibration.
Для выполнения калибровки необходимо открыть этот пример через меню:
«Файл->Примеры->UTouch->Arduino->UTouch_Calibration».
ВНИМАНИЕ! Перед компиляцией не забудьте заменить строки UTFT myGLCD(….) и UTouch myTouch(….) на те, что нужны для нашего дисплея.
Также при калибровке необходимо правильно выбрать параметр TOUCH_ORIENTATION. Информацию о значении этого параметра для используемой модели дисплея можно найти в файле UTouch_Supported_display_modules.pdf, который поставляется вместе с библиотекой Utouch и размещается в ее корневой папке. Для нашего дисплея, например, должно быть установлено значение PORTRAIT, несмотря на то, что сам дисплей ориентирован горизонтально.
ВНИМАНИЕ! Это значение необходимо устанавливать только при калибровке сенсорного экрана, в дальнейшем ориентация экрана должна совпадать с ориентацией дисплейного модуля.
При запуске программа выводит на дисплей пояснительный текст и ждет прикосновения к сенсорному экрану. Затем на дисплее отображается 8 меток-крестиков по краям дисплея и красное окно с надписью PRESS в центре. Инструкция разработчиков сообщает, что необходимо коснуться подсвеченного крестика и удерживать касание до тех пор, пока подсветка на нем не погаснет, а на красном поле в центре не появится сообщение «RELEASE». Эту несложную операцию необходимо повторить для всех крестиков по очереди.
Кстати, разработчики советуют выполнять эту операцию стилусом или заостренной палочкой, не используя пальцы, это позволит повысить точность калибровки. По окончании калибровки на дисплей будут выведены три числа в 16-ричном формате. Например, вот такие:
CAL_X 0xBD95ECC8UL
CAL_Y 0x5EBC8000UL
CAL_S 0x0013F1DFUL
Эти три значения необходимо поместить в файл UTouch_CD.h, находящийся в корневой папке дополнения UTouch вместо тех значений CAL_X, CAL_Y и CAL_S, которые там указаны изначально. После этого дисплей будет работать правильно.
Теперь рассмотрим более подробно команды дополнения UTouch:
UTouch – создает базовый класс сенсорного экрана с заданным именем, в качесте параметров указывается способ подключения.
Команда имеет следующий вид:
Utouch _NAME_ (TCLK, TCS, TDIN, TDOUT, IRQ);
где _NAME_ — произвольное имя объекта «сенсорный экран», которое будет использоваться в качестве префикса при любом обращении к нему, а TCLK, TCS, TDIN, TDOUT и IRQ – номера пинов, которым подключаются соответствующие сигналы сенсорного дисплея.
Строка с этой командой размещается в области определений и должна предшествовать любым другим командам UTouch. Заданное имя объекта должно использоваться в качестве префикса ко всем последующим командам UTouch.
InitTouch – инициализирует сенсорный экран и задает горизонтальную или вертикальную ориентацию. В качестве параметра указывается идентификатор ориентации.
Если в этой команде указать PORTRAIT или 0 – будет выбрана вертикальная ориентация, если указать LANDSCAPE или 1 – горизонтальная. Обратите внимание, что ориентация сенсорного экрана должна совпадать с ориентацией дисплея. По умолчанию (без параметров) команда устанавливает горизонтальную ориентацию.
setPrecision – задает точность определения координат точки прикосновения к сенсорному дисплею. В качестве параметра передается идентификатор точности.
Всего определено четыре уровня точности, кодируемые числами от 1 до 4:
PREC_LOW – низкая точность;
PREC_MEDIUM – средняя точность;
PREC_HI – высокая точность;
PREC_EXTREME – очень высокая точность.
Естественно, уровень точности обратно пропорционален времени, затрачиваемому на определение координат. Оптимальным для большинства задач является уровень PREC_MEDIUM. Разработчики не рекомендуют использовать высокую и очень высокую точность для операций, требующих быстрого реагирования.
Разница между уровнями точности может быть проиллюстрирована примером UTouch_QuickDraw, поставляемым вместе с библиотекой UTouch. Эта программа позволяет рисовать на дисплее при помощи сенсорного экрана:
Попробуйте скомпилировать этот пример с различными значениями параметра команды setPrecision и вы сразу же почувствуете разницу.
dataAvailable – функция, возвращающая логическое значение true, eсли в момент ее вызова зафиксировано касание сенсорного экрана. В остальное время – возвращает значение false.
Эта функция может быть использована как для определения момента касания, так и его продолжительности. В нашем первом примере, который мы приводили в разделе 2, конструкция:
if (myTouch.dataAvailable()) <
myGLCD.fillScr(0,255,0);
>else
содержала вызов функции dataAvailable, по срабатыванию которой происходило изменение цвета дисплея, которое сохранялось на все время касания. Рассмотрим еще один пример – измерение времени касания в миллисекундах:
в момент касания сенсорного дисплея программа сохраняет текущее значение функции millis в переменной timeOld. Далее, до тех пор, пока касание сохраняется, программа постоянно обновляет текущее значение millis в переменной timeNew. Как только касание прекратилось – на дисплей выводится разность между этими двумя переменными, которая и будет равна времени касания в миллисекундах.
Итак, теперь мы умеем работать с событием «касание сенсорного экрана», можем определить момент касания, его продолжительность и момент отпускания. Осталось совсем немного – получить координаты точки касания. Для этого предназначены следующие команды:
read – запускает процедуру определения координат точки касания.
Эта команда не передает никаких параметров и не возвращает никакого значения. Ее следует запускать, когда функция dataAvailable принимает значение true. Полученные координаты в «сыром» виде сохраняются во внутренних переменных TP_X и TP_Y. Однако, эти данные не приведены к размерам дисплея и его разрешающей способности, поэтому для получения координат точки касания используются специальные функции getX и getY.
getX – возвращает значение X-координаты точки касания в пикселях относительно левого края дисплея.
getY – возвращает значение Y-координаты точки касания в пикселях относительно верхнего края дисплея.
При условии правильно выполненной калибровки и достаточной точности сенсорного экрана, координаты точки касания должны совпадать с координатами конкретного пикселя. Тип возвращаемых значений для этих двух функций – int.
Следующий пример при касании сенсорного экрана выводит на дисплей координаты точки касания в пикселях и в «сыром» формате:
Теперь для того, чтобы обработать, например, нажатие экранной кнопки достаточно убедиться, что полученные координаты точки касания находятся внутри области, занимаемой на дисплее данной кнопкой. Вот еще один пример:
Программа рисует на дисплее прямоугольник-кнопку. При касании сенсорного экрана в области кнопки на дисплей выводится надпись «PRESSED», при касании за пределами прямоугольника надпись гаснет.
Еще один интересный пример. Эта программа рисует на дисплее прямоугольное «окно» и позволяет изменять его размеры путем перетаскивания нижнего правого угла. Конечно, это не полноценный Drag&Drop но очень похоже:
Цветной графический дисплей 2.8 TFT 320×240
![]() | ![]() |
Общие сведения:
Цветной графический дисплей 2.8 и цветной графический дисплей 2.8 с TouchScreen — дисплеи, разработанные нашей компанией специально для работы с Arduino UNO / MEGA.
Благодаря поддержке огромного количества цветов (более 260 тысяч), а так же библиотекам UTFT и TouchScreen, вы сможете выводить на дисплеи разноцветные фигуры, анимацию, а так же текст (цвет и форму которого вы тоже сможете выбрать).
Дисплеи оснащены преобразователем уровней, благодаря чему вы можете подключать их как к 3В, так и к 5В логике!
Данные дисплеи поддерживают возможность регулировки яркости подсветки, а конструкция их такова, что они удобно устанавливаются в ПВХ-конструктор даже без дополнительной фиксации. Впрочем, если вам понадобится дополнительная жёсткость, то для этого на дисплеях имеется 4 крепёжных петли.
Видео:
Спецификация:
Дисплей без сенсорной панели
- Разрешение: 320×240 точек;
- Цветопередача: 262 тысячи цветов;
- Диагональ: 2.8 дюйма;
- Интерфейс подключения: SPI;
- Крепёжные отверстия: М3;
- Размер: 75мм х 65мм;
Дисплей с сенсорной панелью
- Разрешение: 320×240 точек;
- Цветопередача: 262 тысячи цветов;
- Диагональ: 2.8 дюйма;
- Тип сенсора:резистивный;
- Интерфейс подключения: SPI;
- Крепёжные отверстия:⌀ 3мм;
- Размер: 75мм х 65мм;
Подключение:
Для удобства подключения к Arduino воспользуйтесь Trema Shield, Trema Power Shield, Motor Shield или Trema Set Shield.
Выводы дисплея без сенсорной панели | Выводы Arduino |
GND (обязательно) | GND |
VCC (обязательно) | 5V |
D/C (обязательно) | Любой вывод |
RST (обязательно) | Любой вывод |
CS (обязательно) | Любой вывод |
SCK (обязательно) | Любой вывод |
MOSI (обязательно) | Любой вывод |
LED (регулировка яркости, опционально) | Любой вывод |
MISO (опционально) | Любой вывод |
Выводы дисплея с сенсорной панелью | Выводы Arduino |
GND (обязательно) | GND |
VCC (обязательно) | 5V |
D/C (обязательно) | Любой вывод |
RST (обязательно) | Любой вывод |
CS (обязательно) | Любой вывод |
SCK (обязательно) | Любой вывод |
MOSI (обязательно) | Любой вывод |
LED (регулировка яркости, опционально) | Любой вывод |
MISO (опционально) | Любой вывод |
YU (Y+) (обязательно) | Любой аналоговый вывод |
XR (X-) (обязательно) | Любой аналоговый вывод |
YD (Y-) (обязательно) | Любой вывод |
XL (X+) (обязательно) | Любой вывод |
Далее, в примерах подключения и в примерах скетчей будет выполнено подключение согласно следующей таблиц:
Выводы дисплея | Выводы Arduino |
GND | GND |
VCC | 5V |
D/C | 4 |
RST | 5 |
CS | 6 |
SCK | 7 |
MOSI | 8 |
LED | 9 |
MISO | 10 (кроме примера с SD картой) |
YU (Y+) | А0 |
XR (X-) | А1 |
YD (Y-) | А2 |
XL (X+) | А3 |
Модуль удобно подключать 3 способами, в зависимости от ситуации:
Способ — 1 : Используя проводной шлейф и Piranha UNO
Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO
Дисплей без сенсорной панели
Дисплей с сенсорной панелью
Способ — 2 : Используя проводной шлейф и Shield
Дисплей без сенсорной панели
Дисплей с сенсорной панелью
Способ — 3 : Используя проводной шлейф и Arduino Mega
Используя провода «Папа — Мама», подключаем напрямую к контроллеру Arduino MEGA
Дисплей без сенсорной панели
Дисплей с сенсорной панелью
Питание:
Данный дисплей питается от постоянного источника напряжения 5В.
Библиотеки для работы с дисплеями:
Для работы с дисплеями существует несколько библиотек, каждая из которых может вам пригодится в разных проектах. Опишем кратко каждую из них:
- Библиотека UTFT для работы с цветными графическими дисплеями (описание функций и примеры смотрите тут)
- Библиотека TouchScreen для работы с сенсорными экранами (описание функций и примеры смотрите тут)
Форм-фактор:
Данный дисплей выпущен в нашем новом формате, который был специально спроектирован с учётом размеров и расположения отверстий в ПВХ-конструкторе, благодаря чему дисплей легко и удобно в нём закрепить.
Помимо этого, мы разработали специально для данных дисплеев крепёжную пластину, которая так же подходит к нашим ПВХ-корпусам Set Box и Set Box XL.
Подробнее о дисплее:
На нашей Wiki имеются статьи, в которых мы очень подробно разобрали все особенности работы с дисплеями того или иного типа. Ниже вы найдёте ссылки на эти статьи:
- Информацию о том, как работать с графическим дисплеем вы найдёте тут.
- Информацию о том, как работать с графическим дисплеем с touchscreen вы найдёте тут.
Координатная сетка
Начало координатной сетки лежит в верхнем левом углу как показано на рисунках ниже.
![]() | ![]() |
Примеры:
Вывод текста на дисплей
Вывод фигур на дисплей
Вывод изображения часов на дисплей
Создание программы для рисования, которая использует TouchScreen
Регулировка яркости подсветки:
Как подключить
Вывод LED подключается к любому выводу ARDUINO, который поддерживает ШИМ (выводы со знаком «
» тильды на шелкографии платы). Яркость регулируется изменением процента заполнения ШИМ. Например, вызов analogWrite(dispLED, 128) установит половину яркости.
Пример работы подсветки дисплея (при использовании датчика освещённости)
Работа с SD-картами:
Используя в связке с дисплеем модуль SD-карт, вы можете выводить анимацию и изображения, которые физически не могут быть размещены в памяти микроконтроллера.
Как подключить
Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO
В данном примере Адаптер карт microSD подключается к Piranha UNO следующим образом:
Выводы Адаптера | Выводы Arduino |
INS | — |
MISO | 12 |
GND | GND |
VCC | 5V |
MOSI | 11 |
SCK | 13 |
SS(CS) | 10 |
Дисплей без сенсорной панели
Дисплей с сенсорной панелью