1. Загальні відомості
Отже, розглянемо більш докладно доповнення Utouch, призначене для роботи з сенсорним екраном, яким обладнано більшість TFT дисплеїв.
2. Початок роботи з сенсорним екраном
Для роботи з доповненням Utouch необхідно довантажити його в Вашу програму і виконати ініціалізацію. Природно, при цьому повинна бути довантажуючи і инициализирована базова бібліотека UTFT. Нагадуємо, що для нашого дисплея, про який йшла мова в попередній статті, ініціалізація виглядає наступним чином:
#include
UTFT myGLCD (CTE32HR, 25,26,27,28);
Тепер довантажувати доповнення і створюємо об'єкт - сенсорний екран з ім'ям myTouch. Як параметри команді ініціалізації передаються номери пинов, до яких підключені сигнали TCLK, TCS, TDIN, TDOUT і IRQ. Ці параметри слід з'ясувати у виробника дисплея або шильда, за допомогою якого дисплей підключений до контролера.
Отже для нашого дисплея ми повинні вставити в програму наступні рядки:
#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», при торканні за межами прямокутника напис гасне.
Ще один цікавий приклад. Ця програма малює на дисплеї прямокутне «вікно» і дозволяє змінювати його розміри шляхом перетягування нижнього правого кута. Звичайно, це не повноцінний DragDrop але дуже схоже:
4. Висновок
Отже, тепер ми вміємо користуватися сенсорним екраном, можемо визначати момент торкання і визначати координати точки дотику, працювати з простими елементами управління, відображеними на дисплеї. У наступній статті ми плануємо розглянути ще одне доповнення до бібліотеки UTFT - UTFT_Buttons, яке дозволяє організувати роботу з текстовими і графічними екранними кнопками.