Orodha ya maudhui:

Arduino Pamoja na Uonyesho wa Skrini ya Kugusa: Hatua 16
Arduino Pamoja na Uonyesho wa Skrini ya Kugusa: Hatua 16

Video: Arduino Pamoja na Uonyesho wa Skrini ya Kugusa: Hatua 16

Video: Arduino Pamoja na Uonyesho wa Skrini ya Kugusa: Hatua 16
Video: Использование Melexis MLX90614 Инфракрасный термометр с Arduino 2024, Novemba
Anonim
Image
Image
Arduino Mega 2560
Arduino Mega 2560

Je! Ungependa kuunda menyu zaidi za kibinafsi na mwingiliano bora wa kibinadamu / mashine? Kwa miradi kama hiyo, unaweza kutumia Arduino na Onyesho la Skrini ya Kugusa. Je! Wazo hili linasikika? Ikiwa ni hivyo, angalia video leo, ambapo nitakuonyesha mkutano na Mega Arduino na Screen Screen ya Kugusa. Utaona jinsi ya kutengeneza miundo unayotaka kwenye skrini, na pia jinsi ya kuamua mkoa wa skrini kugusa na kuamsha amri maalum. Nasisitiza kwamba nilichagua kutumia Arduino Mega kwa sababu ya pini zake.

Kwa hivyo leo, nitakujulisha kwa onyesho la Screen Touch, kazi zake za picha, na jinsi ya kunyakua sehemu ya kugusa kwenye skrini. Wacha pia tuunda mfano ulio na vitu vyote, kama vile kuweka nafasi, kuandika, kubuni maumbo, rangi, na kugusa.

Hatua ya 1: Arduino Mega 2560

Hatua ya 2: TFT LCD Shield 2.4"

Ngao ya LCD ya TFT 2.4
Ngao ya LCD ya TFT 2.4
Ngao ya LCD ya TFT 2.4
Ngao ya LCD ya TFT 2.4

Onyesho hili ambalo tunatumia katika mradi wetu lina huduma ya kupendeza: ina kadi ya SD. Walakini, uandishi na usomaji unaohusika katika hii utaonyeshwa kwenye video nyingine, ambayo nitatoa hivi karibuni. Lengo la somo la leo ni kushughulikia haswa picha za picha za skrini na kugusa za onyesho hili.

Tabia:

Kipimo cha Skrini: inchi 2.4

Slot kadi ya MicroSD

Rangi LCD: 65K

Dereva: ILI9325

Azimio: 240 x 320

Skrini ya kugusa: skrini ya kugusa ya waya 4

Interface: data 8 kidogo, pamoja na laini 4 za kudhibiti

Uendeshaji voltage: 3.3-5V

Vipimo: 71 x 52 x 7mm

Hatua ya 3: Maktaba

Maktaba
Maktaba

Ongeza maktaba:

"Adafruit_GFX"

"SWTFT"

"Skrini ya kugusa"

Bonyeza kwenye viungo na pakua maktaba.

Unzip faili na ubandike kwenye folda ya maktaba ya Arduino IDE.

C: / Faili za Programu (x86) / Arduino / maktaba

Kumbuka

Kabla ya kuanza programu yetu, tunahitaji kushughulikia jambo muhimu: usawa wa TOUCH.

Kutumia programu rahisi kupata alama za kugusa kwenye onyesho, kuhifadhi thamani ya alama (x, y) kila mwisho (iliyoangaziwa kwa manjano kwenye takwimu hapa chini). Maadili haya ni muhimu kwa kuchora mguso kwa alama za picha kwenye skrini.

# pamoja na // Portas de leitura das coordenadas do touchvoid #fasili YP A1 // Y + iko kwenye Analog1 #fafanua XM A2 // X- iko kwenye Analog2 #fafanua YM 7 // Y- iko kwenye Digital7 #fafanua XP 6 // X + iko kwenye Digital6 // objeto para manipulacao dos eventos de toque na tela TouchScreen ts = TouchScreen (XP, YP, XM, YM); kuanzisha batili () {Serial.begin (9600); } kitanzi batili () {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); kuchelewesha (1000); }

Hatua ya 4: Kazi

Sasa wacha tuangalie kazi kadhaa za picha ambazo maktaba zinaweza kutupatia.

1. ChoraPikseli

Kazi ya DrawPixel inawajibika kwa kuchora alama moja kwenye skrini kwa hatua iliyopewa.

batili DrawPixel (int16_t x, int16_t na, rangi ya uint16_t);

2. Chora Mstari

Kazi ya DrawLine inawajibika kwa kuchora mstari kutoka kwa alama mbili.

Utupu wa kutekaLine (int16_t x0, int16_t y0, int16_t x1, int16_t y1, rangi ya uint16_t);

3. choraFastVLine

Kazi ya DrawFastVLine inawajibika kwa kuchora laini ya wima kutoka hatua na urefu.

utupu wa kutekaFastVLine (int16_t x, int16_t y, int16_t h, rangi ya uint16_t);

4. choraFastHLine

Kazi ya DrawFastHLine inawajibika kwa kuchora laini ya usawa kutoka kwa hatua na upana.

kuteka batiliFastHLine (int16_t x, int16_t y, int16_t w, uint16_t rangi);

5. choraTeka

Kazi ya DrawRect inawajibika kwa kuchora mstatili kwenye skrini, kupitisha alama ya asili, urefu na upana.

kuteka utupuRect (int16_t x, int16_t y, int16_t w, int16_t h, rangi ya uint16_t);

6. kujazaRect

Kazi ya kujazaRect ni sawa na kuteka, lakini mstatili utajazwa na rangi iliyopewa.

batili kujazaRect (int16_t x, int16_t y, int16_t w, int16_t h, rangi ya uint16_t);

7. ChoraRoundRect

Kazi ya kutekaRoundRect ni sawa na kutekaRect, lakini mstatili utakuwa na kingo zenye mviringo.

batili DrawRoundRect (int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, rangi ya uint16_t);

8. kujazaRoundRect

Kazi ya kujazaRoundRect ni sawa na DrawRoundRect, lakini mstatili utajazwa na rangi iliyopewa.

utupu kujazaRoundRect (int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, rangi ya uint16_t);

9. chora Mstatili

Kazi ya kuteka ya Triangle inawajibika kwa kuchora pembetatu kwenye skrini, kupita hatua ya vipeo 3.

chora batili Triangle (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, rangi ya uint16_t);

10. kujazaTriangle

Kazi ya kujaza Triangle ni sawa na DrawTriangle, lakini pembetatu itajazwa na rangi iliyopewa.

utupu kujazaTriangle (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, rangi ya uint16_t);

11. Chora Mzunguko

Kazi ya DrawCircle inawajibika kwa kuchora duara kutoka kwa chanzo na eneo.

kuteka batili Mzunguko (int16_t x0, int16_t y0, int16_t r, rangi ya uint16_t);

12. jaza Mzunguko

Kazi ya kujazaCircle ni sawa na DrawCircle, lakini mduara utajazwa na rangi iliyopewa.

batili fillCircle (int16_t x0, int16_t y0, int16_t r, rangi ya uint16_t);

13. jaza Skrini

Kazi ya kujazaScreen inawajibika kwa kujaza skrini na rangi moja.

utupu wa kujazaScreen (rangi ya uint16_t);

14. kuwekaCursor

Kazi ya setCursor inawajibika kuweka mshale kwa kuandika kwa nukta fulani.

setCursor batili (int16_t x, int16_t y);

15. kuwekaTextColor

Kazi ya setTextColor inawajibika kwa kupeana rangi kwa maandishi ya kuandikwa. Tuna njia mbili za kuitumia:

batili setTextColor (uint16_t c); // huweka rangi ya uandishi tu bila kuweka setTextColor (uint16_t c, uint16_t bg); // weka rangi ya uandishi na rangi ya asili

16. kuwekaTextSize

Kazi ya setTextSize inawajibika kupeana saizi kwa maandishi ambayo yataandikwa.

batili setTextSize (uint8_t s);

17. kuwekaTextWrap

Kazi ya setTextWrap inawajibika kwa kuvunja mstari ikiwa inafikia kikomo cha skrini.

batili setTextWrap (boolean w);

18. kuwekaRotation

Kazi ya setRotation inawajibika kwa kuzunguka skrini (mazingira, picha).

kuweka batiliRotation (uint8_t r); // 0 (kiwango), 1, 2, 3

Hatua ya 5: Mfano

Mfano
Mfano

Tutaunda programu ambayo tutatumia rasilimali nyingi ambazo onyesho hutupatia.

Wacha tuandike kamba kadhaa kwa saizi tofauti, tengeneza takwimu tatu za kijiometri, na tuchukue hafla ya kugusa juu yao, kila wakati tunapogusa moja ya takwimu, tutakuwa na maoni ya jina la kielelezo chini yao tu.

Hatua ya 6: Maktaba

Kwanza hebu tufafanue maktaba ambayo tutatumia.

# pamoja na // respondável pela parte gráfica

#include // respondável por pegar os toques na tela

# pamoja na // comunicação com o onyesho

# pamoja na // comunicação com o onyesho

# pamoja na "math.h" // potencia ya calcium

Hatua ya 7: Inafafanua

Tutafafanua macros kadhaa kwa pini, na pia maadili muhimu ambayo tutatumia.

// Portas de leitura das coordenadas do touch # define YP A1 // Y + #fasili XM A2 // X- #fafanua YM 7 // Y- #fafanua 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) #fasili TS_MINX 130 #fasili TS_MINY 80 #fafanua TS_MAXX 900 #fafanua TS_MAXY 900 // tamanho dos textos #fasili TEXT_SIZE_L 3 #fasili TEXT_SIZE_M 2 #fasili TEXT_SIZE_S 1 // posicionamento dos textos de feedback #fasili FEEDBACK_LABEL_X 10 #fasili FEEDBACK_LABEL_Y 200 #fasili FEEDBACK_TOUCHOUX_Fichi_Kufanya_Kufanya_Kufanya_Kufanya mara 200 10 #fafanua MAFUNZO 1000

Tunaendelea na ufafanuzi wa baadhi ya macros.

// Associa o nome das cores aos valores correspondentes # define BLACK 0x0000 #fasili RED 0xF800 #define GREEN 0x07E0 #fefisha CYAN 0x07FF #define MANJANO 0xFFE0 #fasili WHITE 0xFFFF // dados de criação do circulo const circ Circus const circus const circule const Circle const 30; const int mduara_x = 240; const int mduara_y = 125; // objeto para manipulacao dos eventos de toque na tela TouchScreen ts = TouchScreen (XP, YP, XM, YM); // objeto para manipulacao da parte grafica SWTFT tft;

Hatua ya 8: Sanidi

Katika usanidi, tutaanzisha kitu chetu cha kudhibiti picha na kufanya usanidi wa kwanza.

kuanzisha batili () {Serial.begin (9600); // reseta o objeto da lib grafica tft.reset (); // inicializa objeto controlador da lib grafica tft.begin (); kuchelewesha (500); // rotaciona a tela para landscape tft.setRotation (1); // pinta a tela toda de preto tft.fillScreen (NYEUSI); // chama a função para iniciar nossas configurações initialSettings (); }

Hatua ya 9: Kitanzi

Katika kitanzi, tutachukua hatua ambayo tunagusa skrini, na tuone ikiwa mguso ulitokea katika moja ya takwimu.

kitanzi batili () {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 landscape implica no X receiver o mapeamento de Y TSPoint p; p.x = ramani (touchPoint.y, TS_MINY, TS_MAXY, 0, 320); p.y = ramani (touchPoint.x, TS_MINX, TS_MAXX, 240, 0); // verifica se a pressão no toque foi suficiente if (touchPoint.z> MINPRESSURE && touchPoint.z <MAXPRESSURE) {// verifica se tocou no retangulo if (pointInRect (p)) {writeShape ("Rect"); } // verifica se tocou no triangulo nyingine ikiwa (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 ("Circle"); }}}

Hatua ya 10: Angalia ikiwa Tunagusa Mzunguko

Katika hatua hii tunashughulikia uanzishaji wa skrini na kufafanua rangi za matini zinazoonyeshwa.

/ * Desenha na tela os elementos * / void initialSettings () {tft.setTextColor (WHITE); tft.setTextSize (TEXT_SIZE_S); tft.println ("ACESSE"); tft.setTextColor (YELLOW); tft.setTextSize (TEXT_SIZE_M); tft.println ("MEU BLOG"); tft.setTextColor (KIJANI); tft.setTextSize (TEXT_SIZE_L); tft.println ("FERNANDOK. COM"); kuundaRect (); kuundaTriangle (); kuunda Mzunguko (); tft.setCursor (FEEDBACK_LABEL_X, FEEDBACK_LABEL_Y); tft.setTextColor (CYAN); tft.setTextSize (TEXT_SIZE_L); tft.println ("SURA:"); }

Hatua ya 11: Kazi za Kuunda Maumbo ya Kijiometri

Tunaunda mstatili, pembetatu, na duara na asili tunayoamua.

// cria um retangulo com origem (x, y) = (10, 100) // width = 80 e height = 50 void createRect () {tft.fillRect (10, 100, 80, 50, RED); tft.drawRect (10, 100, 80, 50, NYEUPE); } // cria um triangulo com os vertices: // A = (110, 150); B = (150, 100); C = (190, 150) batili ya kuundaTriangle () {tft.fillTriangle (110, 150, 150, 100, 190, 150, MANJANO); tft.draw Triangle (110, 150, 150, 100, 190, 150, NYEUPE); } // cria um circulo com origem no ponto (x, y) = (240, 125) e raio = 30 batili kuunda Mzunguko () {tft.fillCircle (240, 125, 30, KIJANI); tft.draw Mzunguko (240, 125, 30, NYEUPE); }

Hatua ya 12: Angalia Ikiwa Tunagusa Mstatili

Kazi hii huangalia ikiwa uhakika uko ndani ya mstatili.

// 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) {kurudi kweli; }} kurudi uwongo; }

Hatua ya 13: Angalia ikiwa Tunagusa Mzunguko

Hii ni sawa na mduara.

// distancia entre pontos D = raiz ((xb-xa) ^ 2 + (yb-ya) ^ 2) // vefifica se o ponto está dentro do circulo // se distancia do ponto pra origem do circulo for menor ou igual ao raio, ele está dentro bool pointInCircle (TSPoint p) {umbali wa kuelea = sqrt (pow (px - circle_x, 2) + pow (py - circle_y, 2)); ikiwa (umbali <= circle_radius) {kurudi kweli; } kurudi uwongo; }

Hatua ya 14: Angalia Ikiwa Tunagusa Pembetatu

Angalia Ikiwa Tunagusa Pembetatu
Angalia Ikiwa Tunagusa Pembetatu

Cheki hiyo hiyo ya uhakika pia hufanyika ndani ya pembetatu.

// 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) {kuelea ABC = pembetatuArea (a, b, c); kuelea ACP = pembetatuArea (a, c, p); kuelea ABP = pembetatuArea (a, b, p); kuelea CPB = pembetatuArea (c, p, b); ikiwa (ABC == ACP + ABP + CPB) {kurudi kweli; } kurudi uwongo; } // Função que calcula a area de um triangulo com base nos pontos x, y float triangleArea (TSPoint a, TSPoint b, TSPoint c) {kurudisha vitambaa (((bx - ax) * (cy - ay) - (cx - shoka) * (na - ay)) / 2); }

Hatua ya 15: Kazi ya Kuchapisha jina la kitu kilichoguswa

Hapa tunaandika kwenye skrini jina la takwimu ya kijiometri ambayo hutumiwa.

// escreve na tela o nome da figura geométrica que foi tocadavoid writeShape (String shape) {tft.fillRect (FEEDBACK_TOUCH_X, FEEDBACK_TOUCH_Y, 170, 30, NYEUSI); tft.setCursor (FEEDBACK_TOUCH_X, FEEDBACK_TOUCH_Y); tft.setTextSize (TEXT_SIZE_G); tft.setTextColor (NYEUPE); tft.println (sura); }

Hatua ya 16: Faili

Pakua faili:

INO

PDF

Ilipendekeza: