Përmbajtje:

Arduino me ekran me prekje: 16 hapa
Arduino me ekran me prekje: 16 hapa

Video: Arduino me ekran me prekje: 16 hapa

Video: Arduino me ekran me prekje: 16 hapa
Video: How to use TM1637 4 digits seven segment display with Arduino 2024, Nëntor
Anonim
Image
Image
Arduino Mega 2560
Arduino Mega 2560

Dëshironi të krijoni meny më të personalizuara dhe ndërfaqe më të mira njerëzore/makinerie? Për projekte të tilla, mund të përdorni një Arduino dhe një ekran me prekje. A tingëllon tërheqëse kjo ide? Nëse është kështu, shikoni videon sot, ku do t'ju tregoj një asamble me një Mega Arduino dhe një ekran me prekje. Ju do të shihni se si të bëni modelet që dëshironi në ekran, dhe gjithashtu si të përcaktoni rajonin e ekranit për të prekur dhe aktivizuar një komandë specifike. Theksoj se kam zgjedhur të përdor Arduino Mega për shkak të sasisë së tij të kunjave.

Kështu sot, unë do t'ju prezantoj me ekranin me prekje, funksionet e tij grafike dhe si të kapni pikën e prekjes në ekran. Le të krijojmë gjithashtu një shembull që përmban të gjithë elementët, të tillë si pozicionimi, shkrimi, dizajnimi i formave, ngjyrave dhe prekjes.

Hapi 1: Arduino Mega 2560

Hapi 2: Mburoja TFT LCD 2.4"

Mburoja TFT LCD 2.4
Mburoja TFT LCD 2.4
Mburoja TFT LCD 2.4
Mburoja TFT LCD 2.4

Ky ekran që ne përdorim në projektin tonë ka një veçori interesante: ka një kartë SD. Sidoqoftë, shkrimi dhe leximi i përfshirë në këtë do të shfaqen në një video tjetër, të cilën së shpejti do ta prodhoj. Objektivi i mësimit të sotëm është që të trajtojë në mënyrë specifike tiparet grafike dhe ekranet me prekje të këtij ekrani.

Karakteristikat:

Përmasat e ekranit: 2.4 inç

Vend i kartës MicroSD

LCD me ngjyra: 65K

Shoferi: ILI9325

Rezolucioni: 240 x 320

Ekran me prekje: Ekran me prekje rezistente me 4 tela

Ndërfaqja: Të dhëna 8 bit, plus 4 linja kontrolli

Tensioni i funksionimit: 3.3-5V

Përmasat: 71 x 52 x 7mm

Hapi 3: Bibliotekat

Bibliotekat
Bibliotekat

Shtoni bibliotekat:

"Adafruit_GFX"

"SWTFT"

"Ekran me prekje"

Klikoni në lidhjet dhe shkarkoni bibliotekat.

Zbërtheni skedarin dhe ngjiteni në dosjen e bibliotekave të Arduino IDE.

C: / Skedarët e programit (x86) / Arduino / bibliotekat

shënim

Para se të fillojmë programin tonë, duhet të trajtojmë diçka të rëndësishme: kalibrimin TOUCH.

Duke përdorur një program të thjeshtë për të marrë pikat e prekjes në ekran, ruani vlerën e pikave (x, y) në çdo fund (të theksuara me të verdhë në figurën më poshtë). Këto vlera janë të rëndësishme për hartëzimin e prekjes në pikat grafike në ekran.

#include // Portas de leitura das coordenadas do touchvoid #define YP A1 // Y+ është në Analog1 #define XM A2 // X- është në Analog2 #define YM 7 // Y- është në Digital7 #define XP 6 // X+ është në Digital6 // objektet për manipulimin e ngjarjeve të përdorimit të ekranit TouchScreen ts = Ekrani me prekje (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); vonesa (1000); }

Hapi 4: Funksionet

Tani le të hedhim një vështrim në disa funksione grafike që bibliotekat mund të na ofrojnë.

1. barazimPiksel

Funksioni drawPixel është përgjegjës për pikturimin e një pike të vetme në ekran në pikën e caktuar.

void drawPixel (ngjyra int16_t x, int16_t dhe, uint16_t);

2. drawLine

Funksioni drawLine është përgjegjës për tërheqjen e një linje nga dy pika.

void drawLine (int16_t x0, int16_t y0, int16_t x1, int16_t y1, ngjyra uint16_t);

3. drawFastVLine

Funksioni drawFastVLine është përgjegjës për tërheqjen e një linje vertikale nga një pikë dhe një lartësi.

void drawFastVLine (int16_t x, int16_t y, int16_t h, ngjyra uint16_t);

4. drawFastHLine

Funksioni drawFastHLine është përgjegjës për tërheqjen e një linje horizontale nga një pikë dhe një gjerësi.

void drawFastHLine (int16_t x, int16_t y, int16_t w, ngjyra uint16_t);

5. tërheqRect

Funksioni drawRect është përgjegjës për vizatimin e një drejtkëndëshi në ekran, duke kaluar një pikë origjine, lartësinë dhe gjerësinë e tij.

void drawRect (int16_t x, int16_t y, int16_t w, int16_t h, ngjyra uint16_t);

6. mbushRect

Funksioni fillRect është i njëjtë me drawRect, por drejtkëndëshi do të mbushet me ngjyrën e dhënë.

void fillRect (int16_t x, int16_t y, int16_t w, int16_t h, ngjyra uint16_t);

7. drawRoundRect

Funksioni drawRoundRect është i njëjtë me drawRect, por drejtkëndëshi do të ketë skaje të rrumbullakosura.

void drawRoundRect (int16_t x0, int16_t y0, int16_t w, int16_t h, rreze int16_t, ngjyra uint16_t);

8. fillRoundRect

Funksioni fillRoundRect është i njëjtë me drawRoundRect, por drejtkëndëshi do të mbushet me ngjyrën e dhënë.

void fillRoundRect (int16_t x0, int16_t y0, int16_t w, int16_t h, rreze int16_t, ngjyra uint16_t);

9. barazim Trekëndësh

Funksioni drawTriangle është përgjegjës për vizatimin e një trekëndëshi në ekran, duke kaluar pikën e 3 kulmeve.

void drawTriangle (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, ngjyra uint16_t);

10. fillTriangle

Funksioni fillTriangle është i njëjtë me drawTriangle, por trekëndëshi do të mbushet me ngjyrën e dhënë.

void fillTriangle (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, ngjyra uint16_t);

11. barazimRreth

Funksioni drawCircle është përgjegjës për tërheqjen e një rrethi nga një pikë burimi dhe një rreze.

void drawCircle (int16_t x0, int16_t y0, int16_t r, ngjyra uint16_t);

12. mbush Rrethi

Funksioni fillCircle është i njëjtë me drawCircle, por rrethi do të mbushet me ngjyrën e dhënë.

void fillCircle (int16_t x0, int16_t y0, int16_t r, ngjyra uint16_t);

13. mbush ekranin

Funksioni FillScreen është përgjegjës për mbushjen e ekranit me një ngjyrë të vetme.

void fillScreen (ngjyra uint16_t);

14. setKursori

Funksioni setCursor është përgjegjës për pozicionimin e kursorit për të shkruar në një pikë të caktuar.

void setCursor (int16_t x, int16_t y);

15. setTextColor

Funksioni setTextColor është përgjegjës për caktimin e një ngjyre në tekstin që do të shkruhet. Ne kemi dy mënyra për ta përdorur atë:

void setTextColor (uint16_t c); // vendos ngjyrën e shkrimit vetëm shmang setTextColor (uint16_t c, uint16_t bg); // vendosni ngjyrën e shkrimit dhe ngjyrën e sfondit

16. setTextSize

Funksioni setTextSize është përgjegjës për caktimin e një madhësie në tekstin që do të shkruhet.

void setTextSize (uint8_t s);

17. setTextWrap

Funksioni setTextWrap është përgjegjës për thyerjen e vijës nëse arrin kufirin e ekranit.

void setTextWrap (w boolean w);

18. setRotacioni

Funksioni setRotation është përgjegjës për rrotullimin e ekranit (peizazh, portret).

void setRotation (uint8_t r); // 0 (standard), 1, 2, 3

Hapi 5: Shembull

Shembull
Shembull

Ne do të krijojmë një program në të cilin do të përdorim shumicën e burimeve që na ofron ekrani.

Le të shkruajmë disa vargje në madhësi të ndryshme, të krijojmë tre figura gjeometrike dhe të marrim ngjarjen e prekjes mbi to, sa herë që prekim njërën nga figurat, do të kemi reagimet e emrit të figurës pikërisht poshtë tyre.

Hapi 6: Bibliotekat

Së pari le të përcaktojmë bibliotekat që do të përdorim.

#include // responsável pela parte gráfica

#include // responsável për pegar os toques na tela

#include // comunicação com o shfaqje

#include // comunicação com o shfaqje

#përfshi "matematika.h" // potencia llogaritëse

Hapi 7: Përcakton

Ne do të përcaktojmë disa makro për kunjat, dhe gjithashtu vlerat e rëndësishme që do të përdorim.

// 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 simple 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 #define TEXT_SIZE_L 3 #define TEXT_SIZE_M 2 #define TEXT_SIZE_S 1 // posicionamento dos textos de reagime #define FEEDBACK_LABEL_X 10 #define FEEDBACK_LABEL_Y 200 #define FEEDBACK_TOUCH_X 120 #define FEEDBACK_TOUCH_Y 200 // Valores para detectar a Pressao bëjë #define MINPRESSURE toque 10 #përcaktoni MAXPRESSURE 1000

Ne vazhdojmë me përkufizimin e disa makrove.

// Associa o nome das cores aos valoresrespondentes #define ZI 0x0000 #përcakto të KUQ 0xF800 #përcaktoni GREEN 0x07E0 #përcaktoni CYAN 0x07FF #define YELLOW 0xFFE0 #define WHITE 0xFFFo // për ta bërë cria const int rrethi_x = 240; const int rrethi_y = 125; // objektet për manipulimin e rasteve të përdorimit të ekranit TouchScreen ts = Ekran me prekje (XP, YP, XM, YM); // objeto para manipulacao da parte grafica SWTFT tft;

Hapi 8: Konfigurimi

Në konfigurim, ne do të inicializojmë objektin tonë të kontrollit grafik dhe do të bëjmë konfigurimet e para.

void setup () {Serial.begin (9600); // reseta o objeto da lib grafica tft.reset (); // inicializa objeto controlador da lib grafica tft.begin (); vonesë (500); // rotaciona a tela para peizazhit tft.setRotation (1); // pinta a tela toda de preto tft.fillScreen (BLACK); // chama a função para iniciar nossas configurações initialSettings (); }

Hapi 9: Lak

Në lak, ne do të kapim pikën në të cilën prekim ekranin dhe do të shohim nëse prekja ka ndodhur në njërën nga figurat.

lak void () {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 një tela para peizazhit të nënkuptuar pa X receber ose mapeamento nga Y TSPoint p; p.x = hartë (touchPoint.y, TS_MINY, TS_MAXY, 0, 320); p.y = hartë (touchPoint.x, TS_MINX, TS_MAXX, 240, 0); // verifikimi i një shtypi nuk do të thotë nëse (touchPoint.z> MINPRESSURE && touchPoint.z <MAXPRESSURE) {// verifica se tocou no retangulo if (pointInRect (p)) {writeShape ("Rect"); } // verifica se tocou no triangulo else if (pointInsideTriangle (TSPoint (110, 150, 0), TSPoint (150, 100, 0), TSPoint (190, 150, 0), p)) {writeShape ("Triangle"); } // verifica se tocou no circulo else if (pointInCircle (p)) {writeShape ("Rrethi"); }}}

Hapi 10: Kontrolloni nëse prekim rrethin

Në këtë hap ne merremi me inicimin e ekranit dhe përcaktojmë ngjyrat e teksteve që do të shfaqen.

/ *Desenha na tela os elementos */ void fillimetSettings () {tft.setTextColor (WHITE); tft.setTextSize (TEXT_SIZE_S); tft.println ("HYRJE"); tft.setTextColor (E verdhë); tft.setTextSize (TEXT_SIZE_M); tft.println ("MEU BLOG"); tft.setTextColor (GREEN); 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 ("SHIPE:"); }

Hapi 11: Funksionet e Krijimit të Formave Gjeometrike

Ne krijojmë një drejtkëndësh, një trekëndësh dhe një rreth me origjinën që përcaktojmë.

// cria um retangulo com origem (x, y) = (10, 100) // gjerësia = 80 e lartësia = 50 void createRect () {tft.fillRect (10, 100, 80, 50, KUQ); tft.drawRect (10, 100, 80, 50, E BARDH); } // cria um triangulo com os vertices: // A = (110, 150); B = (150, 100); C = (190, 150) void createTriangle () {tft.fillTriangle (110, 150, 150, 100, 190, 150, YELLOW); tft.drawTriangle (110, 150, 150, 100, 190, 150, WHITE); } // 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, WHITE); }

Hapi 12: Kontrolloni nëse prekim drejtkëndëshin

Ky funksion kontrollon nëse pika është brenda drejtkëndëshit.

// 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 nëse (py = 100) {kthehu i vërtetë; }} kthehu false; }

Hapi 13: Kontrolloni nëse prekim rrethin

Kjo është njësoj si me rrethin.

// 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 - circle_x, 2) + pow (py - rreth_y, 2)); nëse (distanca <= rrethi_radius) {kthehu i vërtetë; } kthimi false; }

Hapi 14: Kontrolloni nëse prekim trekëndëshin

Kontrolloni nëse prekim trekëndëshin
Kontrolloni nëse prekim trekëndëshin

I njëjti kontroll i asaj të pikës ndodh edhe brenda trekëndëshit.

// 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 = trekëndëshArea (a, b, c); noton ACP = trekëndëshArea (a, c, p); noton ABP = trekëndësh Zona (a, b, p); float CPB = trekëndëshArea (c, p, b); nëse (ABC == ACP+ABP+CPB) {kthehet e vërtetë; } kthimi false; } // Função que calcula a area de um triangulo com base nos pontos x, y float triangleArea (TSPoint a, TSPoint b, TSPoint c) {fabs return ((((bx - ax)*(cy - ay) - (cx - sëpatë) * (nga - ay))/2); }

Hapi 15: Funksioni për të Shtypur Emrin e Objektit të Prekur

Këtu shkruajmë në ekran emrin e figurës gjeometrike që përdoret.

// escreve na tela o nome da figura geométrica que foi tocadavoid writeShape (Forma e vargut) {tft.fillRect (FEEDBACK_TOUCH_X, FEEDBACK_TOUCH_Y, 170, 30, ZI); tft.setCursor (FEEDBACK_TOUCH_X, FEEDBACK_TOUCH_Y); tft.setTextSize (TEXT_SIZE_G); tft.setTextColor (E BARDH); tft.println (formë); }

Hapi 16: Skedarët

Shkarkoni skedarët:

INO

PDF

Recommended: