- Необхідні матеріали:
- Знайомство з РК-модулем TFT:
- Калібрування РК-екрана TFT для сенсорного екрану:
- TFT-підключення РК-дисплея з Arduino:
- Програмування вашого Arduino для TFT LCD:
- Робоча:
Arduino завжди допомагав легко будувати проекти та робити їх більш привабливими. Програмування РК-екрану з опцією сенсорного екрану може здатися складним завданням, але бібліотеки та щити Arduino зробили це дуже просто. У цьому проекті ми використаємо 2,4-дюймовий РК- екран Arduino TFT для створення власного калькулятора Arduino Touch Screen, який може виконувати всі основні обчислення, такі як додавання, віднімання, ділення та множення.
Необхідні матеріали:
- Arduino Uno
- 2,4-дюймовий TFT РК-дисплей Щит
- 9 В акумулятор.
Знайомство з РК-модулем TFT:
Перш ніж ми фактично зануримось у проект, важливо знати, як працює цей 2,4-дюймовий TFT-РК-модуль та які типи в ньому присутні. Давайте поглянемо на розпірки цього 2,4-дюймового TFT-РК-модуля.
Як бачите, є 28 штифтів, які чудово вписуються в будь-яку плату Arduino Uno / Arduino Mega. Невелика класифікація цих штифтів наведена в таблиці нижче.
Як бачите, штифти можна класифікувати за чотирма основними класифікаціями, такими як командні штифти РК, шпильки даних РК, штифти SD-карти та штифти живлення, нам не потрібно знати багато про детальну роботу цих штифтів, оскільки про них буде дбати наша бібліотека Arduino.
Ви також можете знайти слот для SD-карти внизу модуля, показаного вище, який можна використовувати для завантаження SD-карти з файлами зображень BMP, і ці зображення можна відображати на нашому TFT-РК-екрані за допомогою програми Arduino.
Ще одна важлива річ, на яку слід звернути увагу, - це ваш інтерфейс IC. На ринку доступно багато типів модулів TFT, починаючи від оригінального РК-модуля Adafruit і закінчуючи дешевими китайськими клонами. Програма, яка ідеально підходить для вашого щита Adafruit, може не працювати однаково для китайських платів. Отже, дуже важливо знати, які типи РК-дисплеїв ви тримаєте в руках. Цю деталь потрібно отримати у постачальника. Якщо у вас дешевий клон, подібний до мого, тоді він, швидше за все, використовує мікросхему драйвера ili9341. Ви можете дотримуватися цього TFT-інтерфейсу з підручником Arduino, щоб спробувати деякі основні приклади програм та почути себе комфортно з РК-екраном. Також ознайомтесь з іншими нашими проектами з TFT РК-екранами з Arduino тут:
- Як користуватися світлодіодною стрічкою NeoPixel з Arduino та TFT LCD
- Блокування цифрового коду за допомогою смарт-телефону за допомогою Arduino
Калібрування РК-екрана TFT для сенсорного екрану:
Якщо ви плануєте використовувати функцію сенсорного екрану вашого TFT РК-модуля, вам доведеться відкалібрувати його, щоб він працював належним чином. РК-екран без калібрування може працювати малоймовірно, наприклад, ви можете торкатися в одному місці, а TFT може реагувати на дотик в іншому місці. Результати цих калібрувань будуть не однаковими для всіх плат, а отже, вам залишається зробити це самостійно.
Найкращим способом калібрування є використання прикладу програми калібрування (постачається з бібліотекою) або використання послідовного монітора для виявлення вашої помилки. Однак для цього проекту, оскільки розмір кнопок великий, калібрування не повинно бути великою проблемою, і я також поясни, як ви можете калібрувати екран у розділі програмування нижче.
TFT-підключення РК-дисплея з Arduino:
2,4-дюймовий TFT-РК-екран - ідеальний Arduino Shield. Ви можете безпосередньо натиснути РК-екран на Arduino Uno, і він буде чудово поєднуватися з шпильками та просуватися. Однак з міркувань безпеки покрийте програмувальний термінал вашого Arduino UNO невеликою ізоляційною стрічкою, про всяк випадок, якщо термінал контактує з вашим TFT РК-екраном. РК-дисплей, зібраний на UNO, буде виглядати приблизно так нижче.
Програмування вашого Arduino для TFT LCD:
Ми використовуємо бібліотеку SPFD5408, щоб цей код калькулятора arduino працював. Це модифікована бібліотека Adafruit, яка може безперебійно працювати з нашим РК-модулем TFT. Ви можете перевірити повну програму в кінці цієї статті.
Примітка: Дуже важливо для вас встановити цю бібліотеку у вашій IDE Arduino або цю програму для компіляції без помилок.
Щоб встановити цю бібліотеку, ви можете просто натиснути на посилання вище, яке переведе вас на сторінку Github. Там натисніть на клон або завантажте та виберіть «Завантажити ZIP». Буде завантажено zip-файл.
Тепер відкрийте Arduino IDE і виберіть Ескіз -> Включити Librarey -> Додати бібліотеку.ZIP. Відкриється вікно браузера, перейдіть до ZIP-файлу та натисніть “OK”. У нижньому лівому куті Arduino ви маєте помітити “Бібліотеку, додану до ваших бібліотек”, якщо це вдасться. Детальний посібник, як зробити те саме, наведено в Підручнику з взаємодії.
Тепер ви можете використовувати наведений нижче код у своїй IDE Arduino та завантажити його до свого Arduino UNO для роботи сенсорного калькулятора. Далі я пояснив код на невеликі сегменти.
Для роботи цієї програми нам потрібні три бібліотеки; всі ці три бібліотеки були вказані у ZIP-файлі, який ви завантажили за вказаним вище посиланням. Я просто включив їх до коду, як показано нижче.
#включати
Як вже було сказано раніше, нам потрібно відкалібрувати РК-екран, щоб він працював належним чином, але не хвилюйтесь, наведені тут значення є майже універсальними. Змінні TS_MINX, TS_MINY, TS_MAXX та TS_MAXY визначають калібрування екрану. Ви можете пограти навколо них, якщо вважаєте, що калібрування не задовільне.
#define TS_MINX 125 #define TS_MINY 85 #define TS_MAXX 965 #define TS_MAXY 905
Оскільки ми знаємо, що TFT РК-екран може відображати багато кольорів, усі ці кольори повинні вводитись у шістнадцятковому значенні. Щоб зробити його зручнішим для читання, ми присвоюємо ці значення змінній, як показано нижче.
#define WHITE 0x0000 // Чорний-> Білий #define YELLOW 0x001F // Blue-> Yellow #define CYAN 0xF800 // Red-> Cyan #define PINK 0x07E0 // Green-> Pink #define RED 0x07FF // Cyan -> Red #define GREEN 0xF81F // Рожевий -> Зелений #define BLUE 0xFFE0 // Жовтий-> Синій #define BLACK 0xFFFF // Білий-> Чорний
Гаразд, зараз ми можемо перейти до частини програмування. У цій програмі задіяно три розділи. Один - це створення інтерфейсу калькулятора з кнопками та дисплеєм. Потім виявлення кнопок на основі дотику користувачів і, нарешті, обчислення результатів та їх відображення. Давайте пройдемося по них по одному.
1. Створення інтерфейсу користувача калькулятора:
Тут ви можете використати багато своєї творчості для розробки інтерфейсу користувача калькулятора. Я просто зробив базову схему калькулятора з 16 кнопками та одним дисплеєм. Потрібно побудувати дизайн так само, як намалювати щось на фарбі MS. Додані бібліотеки дозволять малювати лінії, прямокутник, кола, символи, рядки та багато іншого з будь-якого бажаного кольору. Ви можете зрозуміти доступні функції з цієї статті.
Я використав можливості малювання ліній та короб для розробки інтерфейсу, який дуже схожий на калькулятор 90-х. Кожна коробка має ширину та висоту 60 пікселів.
// Намалюємо вікно результатів tft.fillRect (0, 0, 240, 80, CYAN); // Малюємо першу колонку tft.fillRect (0,260,60,60, ЧЕРВОНИЙ); tft.fillRect (0,200,60,60, ЧОРНИЙ); tft.fillRect (0,140,60,60, ЧОРНИЙ); tft.fillRect (0,80,60,60, ЧОРНИЙ); // Накреслити третю колонку tft.fillRect (120,260,60,60, ЗЕЛЕНИЙ); tft.fillRect (120,200,60,60, ЧОРНИЙ); tft.fillRect (120,140,60,60, ЧОРНИЙ); tft.fillRect (120,80,60,60, ЧОРНИЙ); // Намалюй відрізок та четверту колонку для (int b = 260; b> = 80; b- = 60) {tft.fillRect (180, b, 60,60, BLUE); tft.fillRect (60, b, 60,60, ЧОРНИЙ);} // Накресліть горизонтальні лінії для (int h = 80; h <= 320; h + = 60) tft.drawFastHLine (0, h, 240, WHITE); // Малюємо вертикальні лінії для (int v = 0; v <= 240; v + = 60) tft.drawFastVLine (v, 80, 240, WHITE); // Відображення міток клавіатури для (int j = 0; j <4; j ++) {for (int i = 0; i <4; i ++) {tft.setCursor (22 + (60 * i), 100 + (60 * j)); tft.setTextSize (3); tft.setTextColor (БІЛИЙ); tft.println (символ);
2. Виявлення кнопок:
Іншим складним завданням є виявлення дотику користувача. Кожного разу, коли користувач десь торкається, ми зможемо визначити, де розташування X та Y пікселя, якого він торкнувся. Це значення можна відобразити на послідовному моніторі за допомогою println, як показано нижче.
TSPoint p = waitTouch (); X = py; Y = px; Serial.print (X); Serial.print (','); Serial.println (Y); // + "" + Y);
Оскільки ми розробили коробку шириною та висотою 60 пікселів кожна та маємо чотири рядки та для стовпців, починаючи з (0,0). Положення кожного вікна можна передбачити, як показано на малюнку нижче.
Але на практиці це не буде результатом. Через проблему калібрування буде велика різниця між очікуваним та фактичним значенням.
Отже, щоб передбачити точне положення поля, потрібно натиснути на рядок і перевірити відповідне положення на послідовному моніторі. Це може бути не найбільш професійним способом зробити це, але все одно він працює чудово. Я виміряв положення всіх ліній і отримав наступні значення.
Тепер, оскільки ми знаємо положення всіх коробок. Коли користувач торкається будь-якого місця, ми можемо передбачити, де він торкнувся, порівнюючи його значення (X, Y) зі значенням для кожного поля, як показано нижче.
if (X <105 && X> 50) // Виявлення кнопок у стовпці 2 {if (Y> 0 && Y <85) {Serial.println ("Кнопка 0"); // Кнопка 0 натискається, якщо (Number == 0) Number = 0; else Число = (Число * 10) + 0; // Натиснуто двічі} if (Y> 85 && Y <140) {Serial.println ("Кнопка 2"); якщо (Число == 0) Число = 2; else Число = (Число * 10) + 2; // натиснуто двічі}
3. Відображення чисел та обчислення результату:
Останній крок - обчислення результату та відображення їх на TFT РК-екрані. Цей калькулятор Arduino може виконувати операції лише з 2 числами. Ці два числа називаються змінними “Num1” та “Num2”. Змінна "Число" дає і приймає значення з Num1 і Num2, а також несе результат.
Коли користувач натискає кнопку, до цифри додається одна цифра. При натисканні іншої кнопки попередня цифра множиться на 10 і разом із нею додається нове число. Наприклад, якщо натиснути 8, а потім натиснути 5, а потім натиснути 7. Тоді спочатку змінна буде містити 8, потім (8 * 10) + 5 = 85, потім (85 * 10) +7 = 857. Тож нарешті змінна буде мати значення 857 з ним.
якщо (Y> 192 && Y <245) {Serial.println ("Кнопка 8"); якщо (Число == 0) Число = 8; else Число = (Число * 10) + 8; // Знову натиснуто}
Коли ми виконуємо будь-яку операцію, як додавання, коли користувачі натискають кнопку додавання, значення з Number буде перенесено в Num1, а тоді Number буде обнулено, щоб він був готовий прийняти введення для другого числа.
Якщо натиснути рівне, значення в Number буде надіслано на Num2, а потім буде проведено відповідне обчислення (в даному випадку додавання), і результат буде знову збережений у змінній “Number”.
Нарешті це значення відобразиться на РК-екрані.
Робоча:
Робота з цим калькулятором сенсорного екрану Arduino проста. Вам потрібно завантажити наведений нижче код на ваш Arduino і запустити його. Ви отримуєте калькулятор, що відображається на РК-екрані.
Тепер ви можете ввести будь-яке число і виконати свої обчислення. Наразі він обмежений лише двома операндами та єдиним оператором. Але ви можете налаштувати код, щоб у нього було багато можливостей.
Вам слід натискати “C”, щоб очищати значення на екрані кожного разу після виконання розрахунку. Сподіваюся, ви зрозуміли проект і сподобалося будувати щось подібне. Якщо у вас є якісь сумніви, сміливо розміщуйте їх на форумах або в розділі коментарів нижче. До зустрічі з наступним цікавим проектом до тих пір щасливих обчислень !!
Також перевірте демонстраційне відео нижче.