Съдържание:
- Стъпка 1: Arduino Mega 2560
- Стъпка 2: TFT LCD щит 2.4 "
- Стъпка 3: Библиотеки
- Стъпка 4: Функции
- Стъпка 5: Пример
- Стъпка 6: Библиотеки
- Стъпка 7: Определя
- Стъпка 8: Настройка
- Стъпка 9: Цикъл
- Стъпка 10: Проверете дали докосваме кръга
- Стъпка 11: Функции за създаване на геометрични фигури
- Стъпка 12: Проверете дали докосваме правоъгълника
- Стъпка 13: Проверете дали докосваме кръга
- Стъпка 14: Проверете дали докосваме триъгълника
- Стъпка 15: Функция за отпечатване на името на докоснатия обект
- Стъпка 16: Файлове
Видео: Arduino с сензорен екран: 16 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
Искате ли да създадете по -персонализирани менюта и по -добри интерфейси човек/машина? За такива проекти можете да използвате Arduino и сензорен екран. Звучи ли тази идея примамливо? Ако е така, вижте видеото днес, където ще ви покажа монтаж с Mega Arduino и сензорен екран. Ще видите как да направите желаните дизайни на екрана, както и как да определите региона на екрана, който да докоснете и активирате конкретна команда. Подчертавам, че избрах да използвам Arduino Mega поради неговото количество щифтове.
Така че днес ще ви запозная с дисплея със сензорен екран, неговите графични функции и как да хванете точката на докосване на екрана. Нека също така създадем пример, съдържащ всички елементи, като позициониране, писане, проектиране на форми, цветове и докосване.
Стъпка 1: Arduino Mega 2560
Стъпка 2: TFT LCD щит 2.4"
Този дисплей, който използваме в нашия проект, има интересна функция: той има SD карта. Писането и четенето, свързани с това, обаче ще бъдат показани в друг видеоклип, който скоро ще продуцирам. Целта на днешния урок е да се обърне специално внимание на графичните и сензорните функции на този дисплей.
Характеристики:
Размери на екрана: 2,4 инча
Слот за MicroSD карта
Цветен LCD: 65K
Драйвер: ILI9325
Резолюция: 240 x 320
Сензорен екран: 4-жичен резистивен сензорен екран
Интерфейс: 8 битови данни, плюс 4 контролни линии
Работно напрежение: 3.3-5V
Размери: 71 x 52 x 7 мм
Стъпка 3: Библиотеки
Добавете библиотеките:
"Adafruit_GFX"
"SWTFT"
"Тъч скрийн"
Щракнете върху връзките и изтеглете библиотеките.
Разархивирайте файла и го поставете в папката библиотеки на Arduino IDE.
C: / Програмни файлове (x86) / Arduino / библиотеки
Забележка
Преди да стартираме нашата програма, трябва да се обърнем към нещо важно: калибрирането на TOUCH.
Използвайки проста програма за получаване на точките на допир на дисплея, съхранявайте стойността на точките (x, y) във всеки край (маркирано в жълто на фигурата по -долу). Тези стойности са важни за картографиране на докосването до графичните точки на екрана.
#include // Portas de leitura das coordenadas do touchvoid #define YP A1 // Y+ е на Analog1 #define XM A2 // X- е на Analog2 #define YM 7 // Y- е на Digital7 #define XP 6 // X+ е на Digital6 // обект за манипулиране на събития с ток на тела TouchScreen ts = TouchScreen (XP, YP, XM, YM); void setup () {Serial.begin (9600); } void loop () {TSPoint touchPoint = ts.getPoint (); // pega o touch (x, y, z = pressao) Serial.print ("X:"); Serial.println (touchPoint.x); Serial.print ("Y:"); Serial.println (touchPoint.y); забавяне (1000); }
Стъпка 4: Функции
Нека сега разгледаме някои графични функции, които библиотеките могат да ни предложат.
1. drawPixel
Функцията drawPixel отговаря за рисуването на една точка на екрана в дадената точка.
void drawPixel (int16_t x, int16_t и, uint16_t цвят);
2. drawLine
Функцията drawLine отговаря за начертаването на линия от две точки.
void drawLine (int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t цвят);
3. drawFastVLine
Функцията drawFastVLine отговаря за изчертаването на вертикална линия от точка и височина.
void drawFastVLine (int16_t x, int16_t y, int16_t h, uint16_t цвят);
4. drawFastHLine
Функцията drawFastHLine отговаря за изчертаване на хоризонтална линия от точка и ширина.
void drawFastHLine (int16_t x, int16_t y, int16_t w, uint16_t цвят);
5. drawRect
Функцията drawRect е отговорна за изчертаване на правоъгълник на екрана, преминаване на начална точка, нейната височина и ширина.
void drawRect (int16_t x, int16_t y, int16_t w, int16_t h, uint16_t цвят);
6. fillRect
Функцията fillRect е същата като drawRect, но правоъгълникът ще бъде запълнен с дадения цвят.
void fillRect (int16_t x, int16_t y, int16_t w, int16_t h, uint16_t цвят);
7. drawRoundRect
Функцията drawRoundRect е същата като drawRect, но правоъгълникът ще има заоблени ръбове.
void drawRoundRect (int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t радиус, uint16_t цвят);
8. fillRoundRect
Функцията fillRoundRect е същата като drawRoundRect, но правоъгълникът ще бъде запълнен с дадения цвят.
void fillRoundRect (int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t радиус, uint16_t цвят);
9. drawTriangle
Функцията drawTriangle отговаря за изчертаването на триъгълник на екрана, преминавайки през точката на трите върха.
void drawTriangle (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t цвят);
10. fillTriangle
Функцията fillTriangle е същата като drawTriangle, но триъгълникът ще бъде изпълнен с дадения цвят.
void fillTriangle (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t цвят);
11. drawCircle
Функцията drawCircle е отговорна за изчертаване на окръжност от изходна точка и радиус.
void drawCircle (int16_t x0, int16_t y0, int16_t r, uint16_t цвят);
12. fillCircle
Функцията fillCircle е същата като drawCircle, но кръгът ще бъде запълнен с дадения цвят.
void fillCircle (int16_t x0, int16_t y0, int16_t r, uint16_t цвят);
13. fillScreen
Функцията fillScreen отговаря за запълването на екрана с един цвят.
void fillScreen (цвят uint16_t);
14. setCursor
Функцията setCursor отговаря за позиционирането на курсора за запис до дадена точка.
void setCursor (int16_t x, int16_t y);
15. setTextColor
Функцията setTextColor отговаря за присвояването на цвят на текста, който ще бъде написан. Имаме два начина да го използваме:
void setTextColor (uint16_t c); // задава цвета само на писанеvoid setTextColor (uint16_t c, uint16_t bg); // задаваме цвета на писане и цвета на фона
16. setTextSize
Функцията setTextSize отговаря за присвояването на размер на текста, който ще бъде написан.
void setTextSize (uint8_t s);
17. setTextWrap
Функцията setTextWrap е отговорна за прекъсване на линията, ако тя достигне границата на екрана.
void setTextWrap (логическо w);
18. setRotation
Функцията setRotation отговаря за завъртането на екрана (хоризонтално, портретно).
void setRotation (uint8_t r); // 0 (стандартно), 1, 2, 3
Стъпка 5: Пример
Ще създадем програма, в която ще използваме по -голямата част от ресурсите, които дисплеят ни предоставя.
Нека напишем някои низове в различни размери, да създадем три геометрични фигури и да вземем събитието за докосване върху тях, всеки път, когато докоснем една от фигурите, ще имаме обратна връзка за името на фигурата точно под тях.
Стъпка 6: Библиотеки
Първо нека определим библиотеките, които ще използваме.
#include // responsável pela parte gráfica
#include // responseável por pegar os toques na tela
#include // comunicação com o дисплей
#include // comunicação com o дисплей
#include "math.h" // изчислителна потенция
Стъпка 7: Определя
Ще определим някои макроси за щифтовете, както и важните стойности, които ще използваме.
// Portas de leitura das coordenadas do touch #define YP A1 // Y+ #define XM A2 // X- #define YM 7 // Y- #define XP 6 // X+ // valores encontrados através da calibração do touch // faça um código simples para imprimir os valores (x, y) a cada toque // então encontre os valores nas extremidades max/min (x, y) #define TS_MINX 130 #define TS_MINY 80 #define TS_MAXX 900 #define TS_MAXY 900 // tamanho dos textos #дефиниране TEXT_SIZE_L 3 #определи TEXT_SIZE_S 1 10 #дефинирайте MAXPRESSURE 1000
Продължаваме с дефиницията на някои макроси.
// Associa o nome das cores aos valores korespondentes #define BLACK 0x0000 #deteine RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #deteine YELLOW 0xFFE0 #deteine WHITE 0xFFFF // dados de criaçusoo do circulodo 30; const int кръг_x = 240; const int кръг_у = 125; // обект за манипулиране на събития с токове на тела TouchScreen ts = TouchScreen (XP, YP, XM, YM); // обект за манипулиране на парте графика SWTFT tft;
Стъпка 8: Настройка
В настройката ще инициализираме нашия графичен обект за управление и ще направим първите конфигурации.
void setup () {Serial.begin (9600); // reseta o objeto da lib grafica tft.reset (); // inicializa objeto controlador da lib grafica tft.begin (); забавяне (500); // ротация на тела за пейзаж tft.setRotation (1); // pinta a tela toda de preto tft.fillScreen (BLACK); // chama a função para iniciar nossas configurações initialSettings (); }
Стъпка 9: Цикъл
В цикъла ще вземем точката, в която докосваме екрана, и ще видим дали докосването е станало на някоя от фигурите.
void loop () {TSPoint touchPoint = ts.getPoint (); // pega o touch (x, y, z = pressao) pinMode (XM, OUTPUT); pinMode (YP, OUTPUT); // mapeia o ponto de touch para o (x, y) grafico // o fato de termos rotacionado a tela para пейзаж implica no X receber o mapeamento de Y TSPoint p; p.x = карта (touchPoint.y, TS_MINY, TS_MAXY, 0, 320); p.y = карта (touchPoint.x, TS_MINX, TS_MAXX, 240, 0); // проверява се, че няма toque foi suficiente if (touchPoint.z> MINPRESSURE && touchPoint.z <MAXPRESSURE) {// проверява се, че няма да се повтаря if (pointInRect (p)) {writeShape ("Rect"); } // проверява се, че няма триъгълник, ако if (pointInsideTriangle (TSPoint (110, 150, 0), TSPoint (150, 100, 0), TSPoint (190, 150, 0), p)) {writeShape ("Triangle"); } // проверява се, че не се използва circolo if if (pointInCircle (p)) {writeShape ("Circle"); }}}
Стъпка 10: Проверете дали докосваме кръга
В тази стъпка се занимаваме с инициализация на екрана и определяме цветовете на текстовете, които да се показват.
/ *Desenha na tela os elementos */ void initialSettings () {tft.setTextColor (БЯЛ); tft.setTextSize (TEXT_SIZE_S); tft.println ("ДОСТЪП"); tft.setTextColor (ЖЪЛТ); tft.setTextSize (TEXT_SIZE_M); tft.println ("MEU BLOG"); tft.setTextColor (ЗЕЛЕН); tft.setTextSize (TEXT_SIZE_L); tft.println ("FERNANDOK. COM"); createRect (); createTriangle (); createCircle (); tft.setCursor (FEEDBACK_LABEL_X, FEEDBACK_LABEL_Y); tft.setTextColor (CYAN); tft.setTextSize (TEXT_SIZE_L); tft.println ("SHAPE:"); }
Стъпка 11: Функции за създаване на геометрични фигури
Създаваме правоъгълник, триъгълник и кръг с произхода, който определяме.
// cria um retangulo com origem (x, y) = (10, 100) // ширина = 80 e височина = 50 void createRect () {tft.fillRect (10, 100, 80, 50, RED); tft.drawRect (10, 100, 80, 50, БЯЛ); } // cria um triangulo com os vertices: // A = (110, 150); В = (150, 100); C = (190, 150) void createTriangle () {tft.fillTriangle (110, 150, 150, 100, 190, 150, ЖЪЛТО); tft.drawTriangle (110, 150, 150, 100, 190, 150, БЯЛ); } // cria um circulo com origem no ponto (x, y) = (240, 125) e raio = 30 void createCircle () {tft.fillCircle (240, 125, 30, GREEN); tft.drawCircle (240, 125, 30, БЯЛ); }
Стъпка 12: Проверете дали докосваме правоъгълника
Тази функция проверява дали точката е вътре в правоъгълника.
// Função que verifica se o ponto está dentro do retângulobool pointInRect (TSPoint p) {// max/min X do retangulo if (px> = 10 && px <= 90) {// max/min Y do retangulo if (py = 100) {return true; }} return false; }
Стъпка 13: Проверете дали докосваме кръга
Това е същото като с кръга.
// distancia entre pontos D = raiz ((xb-xa)^2 + (yb-ya)^2) // vefifica se o ponto está dentro do circulo // se a distancia do ponto pra origem do circulo for menor ou igual ao raio, ele está dentro bool pointInCircle (TSPoint p) {float distance = sqrt (pow (px - кръг_x, 2) + pow (py - кръг_y, 2)); if (разстояние <= кръг_радиус) {връщане true; } return false; }
Стъпка 14: Проверете дали докосваме триъгълника
Същата проверка на тази на точката се извършва и в триъгълника.
// Função que verifica se o ponto p esta dentro do triangulo ABC // Se estiver dentro retorna TRUE senão retorna FALSE bool pointInsideTriangle (TSPoint a, TSPoint b, TSPoint c, TSPoint p) {float ABC = триъгълникArea (a, b, c); поплавък ACP = триъгълникArea (a, c, p); поплавък ABP = триъгълникArea (a, b, p); поплавък CPB = триъгълникArea (c, p, b); if (ABC == ACP+ABP+CPB) {връщане true; } return false; } // Função que изчислява площ de um triangulo com base nos pontos x, y плаващ триъгълникArea (TSPoint a, TSPoint b, TSPoint c) {return fabs (((bx - ax)*(cy - ay) - (cx - брадва) * (по - ay))/2); }
Стъпка 15: Функция за отпечатване на името на докоснатия обект
Тук изписваме на екрана името на използваната геометрична фигура.
// escreve na tela o nome da figura geométrica que foi tocadavoid writeShape (Форма на низ) {tft.fillRect (FEEDBACK_TOUCH_X, FEEDBACK_TOUCH_Y, 170, 30, BLACK); tft.setCursor (FEEDBACK_TOUCH_X, FEEDBACK_TOUCH_Y); tft.setTextSize (TEXT_SIZE_G); tft.setTextColor (БЯЛ); tft.println (форма); }
Стъпка 16: Файлове
Изтеглете файловете:
АЗ НЕ
Препоръчано:
Калкулатор на Arduino със сензорен екран: 7 стъпки
Калкулатор със сензорен екран на Arduino: Здравейте! Това е проект за създаване на калкулатор със сензорен екран, използващ Arduino Uno и TFT LCD щит. Измислих концепцията за моя клас по програмиране в домашни условия и опитът при изграждането на този проект беше много интересен. Този калкулатор може да
Arduino Flappy Bird - Arduino 2.4 "TFT сензорен екран SPFD5408 Проект за игра на птици: 3 стъпки
Arduino Flappy Bird | Arduino 2.4 "TFT Touchscreen SPFD5408 Bird Game Project: Flappy Bird беше твърде популярна игра за няколко години и много хора го създадоха по свой начин, така и аз, аз създадох моята версия на flappy bird с Arduino и евтиния 2.4 " TFT Сензорен екран SPFD5408, така че нека започнем
Arduino TFT LCD Калкулатор със сензорен екран: 3 стъпки
Arduino TFT LCD Сензорен калкулатор: Здравейте момчета, в тази инструкция ще се научим как да правим калкулатор, използвайки Arduino Uno с 3.5 " TFT LCD сензорен дисплей, така че ще напишем код и ще го качим в arduino, който ще покаже интерфейса на калкулатора на дисплея и ще
Сензорен екран за семейна синхронизация и домашен контролен панел със сензорен екран: 7 стъпки (със снимки)
Сензорен сензорен панел за семейно синхронизиране и домашен контролен панел: Имаме календар, който се актуализира ежемесечно със събития, но се извършва ръчно. Ние също сме склонни да забравяме неща, които сме свършили или други дребни задължения. На тази възраст си мислех, че е много по -лесно да има синхронизиран календар и система от тип бележник, която да
Дървото на живота (Arduino капацитивен сензорен сензорен задвижващ серво мотор): 6 стъпки (със снимки)
Дърво на живота (Arduino капацитивен сензорен сензор задвижващ серво мотор): За този проект направихме оризообразуващо дърво, състоящо се от капацитивен сензор за докосване и серво мотор. При докосване на подложката, сервомоторът ще се активира и оризът (или каквото искате да поставите в него) ще бъде освободен. Ето кратко видео