Як отримати координати точки торкання і провести калібрування резистивної сенсорної панелі на

координати

точки

Таким чином, для отримання координати Х треба надіслати контролеру 0х90, у відповідь він надішле нам 12 біт даних. Так як ми за один раз можемо прийняти лише 8 біт приймати будемо двічі, а за допомогою операцій зсуву отримаємо результат. Давайте все вище сказане оформимо у вигляді функції, в яку передаватимемо покажчики на змінні координат.

Тепер перейдемо до калібрування. Ідея калібрування полягає в тому, щоб при натисканні на екран точка малювалася там, де відбулося натискання. Для того щоб зробити це нам треба вирішити 3 питання, перше - це, врахувати нечутливі області, справа в тому, що в ідеальному випадку якщо провести стілус від однієї сторони до протилежної, то координати натискання (дані з 12-бітного АЦП) повинні змінюватися від 0 до 4095. Насправді вони змінюватимуться приблизно від 300 до 3800, це приблизні дані, але суть від цього не змінюється, біля кожної зі сторін є нечутлива область. Друге - для того щоб відмалювати точку на дисплеї її координати повинні входити в діапазон від 0 до 239 по Х і від 0 до 319 по Y, а так як АЦП 12-бітне, координати точки дотику змінюватимуться 0 до 4095. І третє, як з'ясувалося пізніше, початку координат дисплея та сенсорної панелі лежать у протилежних кутах, тому якщо ми не хочемо натискати в одному кутку, а щоб точка малювалася в іншому, то треба це врахувати. Для цього завдання була написана простенька функція, за допомогою якої ми зможемо спостерігати координати точки дотику на екрані.

Функціяitoaперетворює числове значення в рядковий еквівалент із зазначеною основою.char *itoa(intnum, char*str, intradix)intnum- числове значення, яке хочемо перетворити char*str- покажчик на результат, типу char >intradix- основа системи числення для запису вихідного рядка Якщо ми передамо значення 1711 і виберемо десяткову систему обчислення, то число 1 перетворюється на відповідний символ ASCII коду, код цього символу 49, число 7 символ з кодом 55 і так далі.

торкання

торкання

провести

координати

торкання

торкання

Відмінно посилки став дванадцятьма бітними. Тепер треба провести стилусом вздовж кожної зі сторін, при цьому значення не повинно змінюватися. Тобто якщо ми проводимо вздовж сторони X, то маємо змінюватися Y, а X ні. Якщо значення несподівано змінюється, то збільшуємо відстань від боку вздовж якої ведемо. Таке значення маємо знайти з кожного боку і записати їх на листку. У результаті ми отримаємо 4 значення, Xmax, Xmin, Ymax, Ymin. Далі, візьмемо отримані значення та обчислимо розміри робочої області. Ywork = Ymax - Ymin Xwork = Xmax - Xmin У мене вийшло Ymax = 3900, Ymin = 400, Ywork = 3500, Xmax = 3900, Xmin = 300, Xwork = 3600. Давайте поміркуємо, на 240 пікселів на дисплеї по X у нас припадає 3600 пікселів на сенсорній панелі, тобто 1 до 15, а на 320 пікселів по Y у нас припадає 3550 пікселів на сенсорній панелі, тобто 1 до 11, 09. Бажано щоб у відношенні вийшли цілі числа, інакше, оскільки ми працюємо з цілими числами відбудеться округлення, а частина буде причиною помилки. Отже, при натисканні на будь-яку точку в отриманому квадраті розміром 15 на 11 насенсорній панелі, ми повинні намалювати надисплеїодну й ту саму точку. Для того щоб відобразити точку натискання по X треба від отриманої координати відібрати Xmin і розділити на 15, дляY аналогічно.

Якщо зараз спробувати малювати крапки по дотику, то вони з'являтимуться симетрично щодо центру екрану, оскільки початки координат лежать у протилежних кутах. Тому для ікса треба від 240 забирати отриманий результат, а для ігрика від 320 забирати отриманий результат. У результаті функція за допомогою якої ми отримуємо координати набуде наступного вигляду.