- Необходимые материалы:
- Знакомство с модулем ЖК-экрана TFT:
- Калибровка ЖК-экрана TFT для сенсорного экрана:
- Соединения TFT LCD с Arduino:
- Программирование вашего Arduino для TFT LCD:
- За работой:
Arduino всегда помогал легко создавать проекты и делать их более привлекательными. Программирование ЖК-экрана с опцией сенсорного экрана может показаться сложной задачей, но библиотеки и экраны Arduino сделали это действительно простым. В этом проекте мы будем использовать 2,4-дюймовый ЖК- экран Arduino TFT для создания нашего собственного калькулятора сенсорного экрана Arduino, который мог бы выполнять все основные вычисления, такие как сложение, вычитание, деление и умножение.
Необходимые материалы:
- Ардуино Уно
- 2,4-дюймовый TFT ЖК-дисплей Shield
- Батарея 9 В.
Знакомство с модулем ЖК-экрана TFT:
Прежде чем мы фактически погрузимся в проект, важно знать, как работает этот 2,4-дюймовый ЖК-модуль TFT и какие типы в нем присутствуют. Давайте взглянем на распиновку этого 2,4-дюймового модуля экрана TFT LCD.
Как видите, имеется 28 контактов, которые идеально впишутся в любую плату Arduino Uno / Arduino Mega Board. Небольшая классификация этих штифтов приведена в таблице ниже.
Как вы можете видеть, контакты можно разделить на четыре основные классификации, такие как выводы управления ЖК-дисплеем, выводы данных ЖК-дисплея, выводы SD-карты и выводы питания. Нам не нужно много знать о деталях работы этих выводов, так как они будут обрабатываться. наша библиотека Arduino.
Вы также можете найти слот для SD-карты внизу модуля, показанного выше, который можно использовать для загрузки SD-карты с файлами изображений в формате BMP, и эти изображения могут отображаться на нашем ЖК-экране TFT с помощью программы Arduino.
Еще одна важная вещь, на которую следует обратить внимание, - это ваша интерфейсная ИС. На рынке доступно множество типов TFT-модулей, от оригинального TFT-модуля Adafruit до дешевых китайских клонов. Программа, которая идеально работает с вашим щитом Adafruit, может не работать так же с китайскими коммутационными платами. Поэтому очень важно знать, какой ЖК-дисплей вы держите в руке. Эту информацию необходимо получить у продавца. Если у вас есть дешевый клон вроде моего, то, скорее всего, он использует микросхему драйвера ili9341. Вы можете следовать этому интерфейсу TFT LCD с учебником Arduino, чтобы опробовать некоторые основные примеры программ и освоиться с ЖК-экраном. Также ознакомьтесь с нашими другими проектами TFT LCD с Arduino здесь:
- Как использовать светодиодную ленту NeoPixel с Arduino и TFT LCD
- Цифровой кодовый замок, управляемый смартфоном, с использованием Arduino
Калибровка ЖК-экрана TFT для сенсорного экрана:
Если вы планируете использовать функцию сенсорного экрана вашего модуля TFT LCD, вам необходимо откалибровать его, чтобы он работал должным образом. ЖК-экран без калибровки может работать маловероятно, например, вы можете коснуться одного места, а TFT может ответить на прикосновение в другом месте. Эти результаты калибровки не будут одинаковыми для всех плат, поэтому вы можете сделать это самостоятельно.
Лучший способ откалибровать - использовать пример программы калибровки (поставляется с библиотекой) или использовать монитор последовательного порта для обнаружения вашей ошибки. Однако для этого проекта, поскольку размер кнопок большой, калибровка не должна быть большой проблемой, и я также объясню, как вы можете откалибровать свой экран в разделе программирования ниже.
Соединения TFT LCD с Arduino:
ЖК-экран TFT с диагональю 2,4 дюйма - это идеальный Arduino Shield. Вы можете прямо надвинуть ЖК-экран на верхнюю часть Arduino Uno, и он будет идеально соответствовать контактам и скользить внутрь. Однако из соображений безопасности закройте программный терминал вашего Arduino UNO небольшой изоляционной лентой на тот случай, если терминал соприкоснется с вашим ЖК-экраном TFT. ЖК-дисплей, собранный на UNO, будет выглядеть примерно так, как показано ниже.
Программирование вашего Arduino для TFT LCD:
Мы используем библиотеку SPFD5408, чтобы заставить работать этот код калькулятора Arduino. Это модифицированная библиотека Adafruit, которая может без проблем работать с нашим ЖК-модулем TFT. Вы можете ознакомиться с полной программой в конце этой статьи.
Примечание. Для вас очень важно установить эту библиотеку в вашу среду разработки Arduino или эту программу, чтобы она скомпилировалась без ошибок.
Чтобы установить эту библиотеку, вы можете просто щелкнуть ссылку выше, которая приведет вас на страницу Github. Там нажмите клонировать или загрузить и выберите «Загрузить ZIP». Будет загружен zip-файл.
Теперь откройте Arduino IDE и выберите Sketch -> Include Librarey -> Add.ZIP library. В открывшемся окне браузера перейдите к ZIP-файлу и нажмите «ОК». В случае успеха вы должны заметить «Библиотека добавлена в ваши библиотеки» в нижнем левом углу Arduino. Подробное руководство, как сделать то же самое, дано в Руководстве по взаимодействию.
Теперь вы можете использовать приведенный ниже код в своей Arduino IDE и загрузить его в 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 ЖЕЛТЫЙ 0x001F // Синий-> Желтый #define CYAN 0xF800 // Красный-> Голубой #define PINK 0x07E0 // Зеленый-> Розовый #define RED 0x07FF // Голубой -> Красный #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, RED); 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, СИНИЙ); tft.fillRect (60, b, 60,60, BLACK);} // Рисуем горизонтальные линии для (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, БЕЛЫЙ); // Отображение ярлыков клавиатуры для (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; Серийный. Печать (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 ("Button 0"); // Кнопка 0 нажата if (Number == 0) Number = 0; иначе Число = (Число * 10) + 0; // Нажат дважды} if (Y> 85 && Y <140) {Serial.println ("Button 2"); если (Число == 0) Число = 2; иначе Число = (Число * 10) + 2; // Нажат дважды}
3. Отображение чисел и вычисление результата:
Последний шаг - вычислить результат и отобразить его на ЖК-экране TFT. Этот калькулятор Arduino может выполнять операции только с 2 числами. Эти два числа называются переменными «Num1» и «Num2». Переменная «Число» дает и принимает значения от Num1 и Num2, а также несет результат.
Когда пользователь нажимает кнопку, к номеру добавляется одна цифра. При нажатии другой кнопки предыдущая цифра умножается на 10, и к ней добавляется новое число. Например, если мы нажмем 8, затем 5, а затем 7. Тогда сначала переменная будет содержать 8, затем (8 * 10) + 5 = 85, затем (85 * 10) +7 = 857. Итак, наконец, переменная будет иметь значение 857 вместе с ним.
if (Y> 192 && Y <245) {Serial.println ("Кнопка 8"); если (Число == 0) Число = 8; иначе Число = (Число * 10) + 8; // Нажата снова}
Когда мы выполняем любую операцию, такую как сложение, когда пользователь нажимает кнопку добавления, значение из Number будет передано в Num1, а затем Number будет обнулено, чтобы он был готов принять ввод для второго числа.
При нажатии кнопки « Равно» значение в Number будет отправлено в Num2, а затем будет произведено соответствующее вычисление (в данном случае сложение), и результат снова будет сохранен в переменной «Number».
Наконец, это значение будет отображаться на ЖК-экране.
За работой:
Калькулятор сенсорного экрана Arduino работает очень просто. Вы должны загрузить приведенный ниже код на свой Arduino и запустить его. Калькулятор отображается на ЖК-экране.
Теперь вы можете ввести любое число и произвести расчеты. На данный момент он ограничен только двумя операндами и единственным оператором. Но вы можете настроить код, чтобы у него было много возможностей.
Вы должны нажимать «C», чтобы очищать значение на экране каждый раз после выполнения расчета. Надеюсь, вы поняли проект и вам понравилось создавать что-то подобное. Если у вас есть сомнения, не стесняйтесь размещать их на форумах или в разделе комментариев ниже. Увидимся в следующий раз с другим интересным проектом, а пока удачных вычислений !!
Также посмотрите демонстрационное видео ниже.