ዝርዝር ሁኔታ:

Arduino በንክኪ ማያ ማሳያ - 16 ደረጃዎች
Arduino በንክኪ ማያ ማሳያ - 16 ደረጃዎች

ቪዲዮ: Arduino በንክኪ ማያ ማሳያ - 16 ደረጃዎች

ቪዲዮ: Arduino በንክኪ ማያ ማሳያ - 16 ደረጃዎች
ቪዲዮ: Setting up a 3d Printer with MKS sGen L v1.0 Part 3 2024, ታህሳስ
Anonim
Image
Image
አርዱዲኖ ሜጋ 2560
አርዱዲኖ ሜጋ 2560

የበለጠ ግላዊነት የተላበሱ ምናሌዎችን እና የተሻሉ የሰው/ማሽን በይነገጾችን መፍጠር ይፈልጋሉ? ለእንደዚህ ያሉ ፕሮጄክቶች አርዱዲኖ እና የንክኪ ማያ ገጽ ማሳያ መጠቀም ይችላሉ። ይህ ሀሳብ የሚስብ ይመስላል? ከሆነ ፣ በሜጋ አርዱinoኖ እና በንክኪ ማያ ገጽ ማሳያ ስብሰባን የማሳይበትን ቪዲዮውን ዛሬ ይመልከቱ። በማያ ገጹ ላይ የሚፈልጓቸውን ንድፎች እንዴት እንደሚሠሩ ፣ እንዲሁም አንድ የተወሰነ ትእዛዝ ለመንካት እና ለማግበር የማያ ገጹን ክልል እንዴት እንደሚወስኑ ያያሉ። እኔ በፒን ብዛት ምክንያት አርዱዲኖ ሜጋን እንደመረጥኩ አፅንዖት እሰጣለሁ።

ስለዚህ ዛሬ የንክኪ ማያ ገጽ ማሳያውን ፣ የግራፊክ ተግባሮቹን እና በማያ ገጹ ላይ ያለውን የንክኪ ነጥብ እንዴት እንደሚይዙ አስተዋውቅዎታለሁ። እንደ አቀማመጥ ፣ መጻፍ ፣ ቅርጾችን ፣ ቀለሞችን እና መንካት ያሉ ሁሉንም አካላት የያዘ ምሳሌ እንፍጠር።

ደረጃ 1: አርዱዲኖ ሜጋ 2560

ደረጃ 2 - TFT LCD Shield 2.4 ኢንች

TFT LCD Shield 2.4
TFT LCD Shield 2.4
TFT LCD Shield 2.4
TFT LCD Shield 2.4

በፕሮጀክታችን ውስጥ የምንጠቀመው ይህ ማሳያ አስደሳች ገጽታ አለው - ኤስዲ ካርድ አለው። ሆኖም ፣ በዚህ ውስጥ የተካተተው ጽሑፍ እና ንባብ በቅርቡ በምሠራው በሌላ ቪዲዮ ውስጥ ይታያል። የዛሬው ትምህርት ዓላማ የዚህ ማሳያ ሥዕላዊ እና የንክኪ ማያ ገጽ ባህሪያትን በተለይ መፍታት ነው።

ባህሪያት:

የማያ ገጽ ልኬት - 2.4 ኢንች

የማይክሮ ኤስዲ ካርድ ማስገቢያ

ቀለም ኤልሲዲ - 65 ኪ

ሾፌር - ILI9325

ጥራት: 240 x 320

የመዳሰሻ ማያ ገጽ: 4-ሽቦ መቋቋም የሚችል ንክኪ ማያ ገጽ

በይነገጽ: 8 ቢት ውሂብ ፣ ሲደመር 4 የቁጥጥር መስመሮች

የአሠራር ቮልቴጅ: 3.3-5V

ልኬቶች - 71 x 52 x 7 ሚሜ

ደረጃ 3 ቤተ -መጻሕፍት

ቤተ መጻሕፍት
ቤተ መጻሕፍት

ቤተመጽሐፍት አክል ፦

"አዳፍ ፍሬ_ጂኤፍኤክስ"

«SWTFT»

"የሚነካ ገጽታ"

አገናኞቹን ጠቅ ያድርጉ እና ቤተ -መጽሐፍቱን ያውርዱ።

ፋይሉን ይንቀሉ እና በአርዱዲኖ አይዲኢ ቤተመፃህፍት አቃፊ ውስጥ ይለጥፉት።

ሲ: / የፕሮግራም ፋይሎች (x86) / አርዱinoኖ / ቤተመፃህፍት

ማስታወሻ

ፕሮግራማችንን ከመጀመራችን በፊት አንድ አስፈላጊ ነገርን ማነጋገር አለብን - TOUCH calibration።

በማሳያው ላይ የንክኪ ነጥቦችን ለማግኘት ቀለል ያለ መርሃግብር በመጠቀም የነጥቦቹን እሴት (x ፣ y) በእያንዳንዱ ጫፍ ላይ ያከማቹ (ከዚህ በታች ባለው ስእል በቢጫ ተደምቀዋል)። እነዚህ እሴቶች ንክኪው በማያ ገጹ ላይ ወደ ግራፊክ ነጥቦች ካርታ ለማድረግ አስፈላጊ ናቸው።

#ያካትቱ // Portas de leitura das coordenadas do touchvoid #define YP A1 // Y+ በአናሎግ 1 ላይ ነው #ዲፊን ኤክስኤም ኤ 2 // ኤክስ- በአናሎግ 2 ላይ ነው #ዴፊኔ YM 7 // Y- በዲጂታል 7 ላይ #ዴፊኔ XP 6 // X+ በ Digital6 // ላይ ነው objeto para manipulacao dos eventos de toque na tela TouchScreen ts = TouchScreen (XP ፣ YP ፣ XM ፣ YM) ፤ ባዶነት ማዋቀር () {Serial.begin (9600); } ባዶነት 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 ተግባር በተሰጠው ነጥብ ላይ በማያ ገጹ ላይ አንድ ነጥብ ለመሳል ኃላፊነት አለበት።

ባዶነት ስዕል ፒክስል (int16_t x ፣ int16_t እና ፣ uint16_t ቀለም);

2. drawLine

የ DraLine ተግባር ከሁለት ነጥቦች መስመርን የመሳል ሃላፊነት አለበት።

ባዶ ባዶ መስመር (int16_t x0 ፣ int16_t y0 ፣ int16_t x1 ፣ int16_t y1 ፣ uint16_t ቀለም);

3. drawFastVLine

የ DraFastVLine ተግባር ቀጥ ያለ መስመርን ከአንድ ነጥብ እና ቁመት የመሳል ሃላፊነት አለበት።

ባዶ ባዶ DraastVLine (int16_t x ፣ int16_t y ፣ int16_t h ፣ uint16_t ቀለም);

4. drawFastHLine

የ DraFastHLine ተግባር አግድም መስመርን ከአንድ ነጥብ እና ስፋት የመሳል ሃላፊነት አለበት።

ባዶ ባዶ ስዕል FastHLine (int16_t x ፣ int16_t y ፣ int16_t w ፣ uint16_t ቀለም);

5. ይሳሉ

የ DraRect ተግባር የመነሻ ነጥቡን ፣ ቁመቱን እና ስፋቱን በማለፍ በማያ ገጹ ላይ አራት ማእዘን ለመሳል ሃላፊነት አለበት።

ባዶ ባዶ ስዕል (int16_t x ፣ int16_t y ፣ int16_t w ፣ int16_t h ፣ uint16_t ቀለም);

6. fillRect

የ fillRect ተግባር ከ DraRect ጋር ተመሳሳይ ነው ፣ ግን አራት ማዕዘኑ በተሰጠው ቀለም ይሞላል።

ባዶ ባዶ መሙላት (int16_t x ፣ int16_t y ፣ int16_t w ፣ int16_t h ፣ uint16_t ቀለም);

7. drawRoundRect

የ DraRoundRect ተግባር ከ DraRect ጋር ተመሳሳይ ነው ፣ ግን አራት ማዕዘኑ የተጠጋጋ ጠርዞች ይኖሩታል።

ባዶነት DraRoundRect (int16_t x0 ፣ int16_t y0 ፣ int16_t w ፣ int16_t h ፣ int16_t ራዲየስ ፣ uint16_t ቀለም);

8. fillRoundRect

የ fillRoundRect ተግባር እንደ DraRoundRect ተመሳሳይ ነው ፣ ግን አራት ማዕዘኑ በተሰጠው ቀለም ይሞላል።

ባዶ መሙላትRoundRect (int16_t x0 ፣ int16_t y0 ፣ int16_t w ፣ int16_t h ፣ int16_t ራዲየስ ፣ uint16_t ቀለም);

9. መሳል ትሪያንግል

የ DraTriangle ተግባር የ 3 ጫፎችን ነጥብ በማለፍ በማያ ገጹ ላይ ሶስት ማእዘን ለመሳል ሃላፊነት አለበት።

ባዶነት ስዕል ትሪያንግል (int16_t x0 ፣ int16_t y0 ፣ int16_t x1 ፣ int16_t y1 ፣ int16_t x2 ፣ int16_t y2 ፣ uint16_t ቀለም);

10. fillTriangle

የመሙላት ትሪያንግል ተግባሩ እንደ ስዕል ትሪንግል ተመሳሳይ ነው ፣ ግን ትሪያንግል በተሰጠው ቀለም ይሞላል።

ባዶ ባዶ ትሪያንግል (int16_t x0 ፣ int16_t y0 ፣ int16_t x1 ፣ int16_t y1 ፣ int16_t x2 ፣ int16_t y2 ፣ uint16_t ቀለም);

11. ስዕል ክበብ

የ DraCircle ተግባር ክበብ ከምንጭ ነጥብ እና ራዲየስ ለመሳል ሃላፊነት አለበት።

ባዶ ባዶ ክበብ (int16_t x0 ፣ int16_t y0 ፣ int16_t r ፣ uint16_t ቀለም);

12. fillCircle

የመሙያ ክበብ ተግባሩ ከ DraCircle ጋር ተመሳሳይ ነው ፣ ግን ክበቡ በተሰጠው ቀለም ይሞላል።

ባዶ ባዶ ክበብ (int16_t x0 ፣ int16_t y0 ፣ int16_t r ፣ uint16_t ቀለም);

13. መሙላት ማያ ገጽ

የ fillScreen ተግባር ማያ ገጹን በአንድ ቀለም የመሙላት ኃላፊነት አለበት።

ባዶ ባዶ ማያ ገጽ (uint16_t ቀለም);

14. setCursor

የ setCursor ተግባር ጠቋሚውን ወደ አንድ ነጥብ ለመጻፍ ኃላፊነት አለበት።

ባዶ setCursor (int16_t x ፣ int16_t y);

15. setTextColor

የ setTextColor ተግባር ለተፃፈው ጽሑፍ ቀለምን የመመደብ ሃላፊነት አለበት። እሱን ለመጠቀም ሁለት መንገዶች አሉን-

ባዶ ስብስብTextColor (uint16_t c); // የፅሁፍን ቀለም ያዘጋጃል setTextColor ን ብቻ ያስወግዱ (uint16_t c ፣ uint16_t bg); // የአጻጻፍ ቀለሙን እና የበስተጀርባውን ቀለም ያዘጋጁ

16. setTextSize

የ setTextSize ተግባር ለተፃፈው ጽሑፍ መጠንን የመመደብ ሃላፊነት አለበት።

ባዶ ስብስብTextSize (uint8_t s);

17. setTextWrap

የ setTextWrap ተግባር የማያ ገጹ ወሰን ላይ ከደረሰ መስመሩን የመስበሩ ኃላፊነት አለበት።

ባዶ ስብስብTextWrap (ቡሊያን ወ);

18. setRotation

የ setRotation ተግባር ማያ ገጹን (የመሬት ገጽታ ፣ የቁም) የማሽከርከር ኃላፊነት አለበት።

ባዶ setRotation (uint8_t r); // 0 (መደበኛ) ፣ 1 ፣ 2 ፣ 3

ደረጃ 5 - ምሳሌ

ለምሳሌ
ለምሳሌ

ማሳያው የሚሰጠንን አብዛኛዎቹን ሀብቶች የምንጠቀምበት ፕሮግራም እንፈጥራለን።

በተለያዩ መጠኖች አንዳንድ ሕብረቁምፊዎችን እንጽፍ ፣ ሶስት ጂኦሜትሪክ አሃዞችን እንፍጠር እና በእነሱ ላይ የንክኪ ክስተትን እንመርጥ ፣ እያንዳንዱን አሃዞች ስንነካ ፣ ከእነሱ በታች የስዕሉ ስም ግብረመልስ ይኖረናል።

ደረጃ 6: ቤተመፃህፍት

በመጀመሪያ እኛ የምንጠቀምባቸውን ቤተ -መጻሕፍት እንገልፃቸው።

#ያካትቱ // responsável pela parte gráfica

#ያካትቱ // responsável por pegar os toques na tela

#ያካትቱ // comunicação com o ማሳያ

#ያካትቱ // comunicação com o ማሳያ

#“ሂሳብ። ኤች” / /kalcular potencia ን ያካትቱ

ደረጃ 7: ይገልጻል

ለፒን አንዳንድ ማክሮዎችን ፣ እና እኛ የምንጠቀምባቸውን አስፈላጊ እሴቶችን እንገልፃለን።

// Portas de leitura das coordenadas do touch #መግለፅ 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 #define TEXT_SIZE_L 3 #define TEXT_SIZE_M 2 #define TEXT_SIZE_S 1 // posicionamento dos textos de feedback #define FEEDBACK_LABEL_X 10 #define FEEDBACK_LABEL_Y 200 #FEEFECHEFECHE_FECHEFECHE_FECH 10 #መግለፅ MAXPRESSURE 1000

በአንዳንድ ማክሮዎች ትርጓሜ እንቀጥላለን።

// Associa o nome das cores aos valores ዘጋቢዎች #BLACK 0x0000 #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define YELLOW 0xFFE0 #define WHITE 0xFFulo // into doxoDoDousoçoçoçoçoçoçoçoçoçoçoçoçoçoçoçoçoçoçoçoçdçoçoçoçoçoçoçoçoçoçoçoço? const int circle_x = 240; const int circle_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;

ደረጃ 8: ማዋቀር

በማዋቀሩ ውስጥ የእኛን የግራፊክ መቆጣጠሪያ ነገር እናስጀምራለን እና የመጀመሪያ ውቅሮችን እናደርጋለን።

ባዶነት ማዋቀር () {Serial.begin (9600); // reseta o objeto da lib grafica tft.reset (); // inicializa objeto controlador da lib grafica tft.begin (); መዘግየት (500); // rotaciona a tela para የመሬት ገጽታ tft.setRotation (1); // pinta a tela toda de preto tft.fillScreen (ጥቁር); // chama a função para iniciar nossas initialSettings () ን ያዋቅራል ፤ }

ደረጃ 9 - ሉፕ

በሉፕ ውስጥ ፣ ማያ ገጹን የምንነካበትን ነጥብ እናነሳለን ፣ እና ንክኪው በአንደኛው አኃዝ ውስጥ ከተከሰተ እንመለከታለን።

ባዶነት loop () {TSPoint touchPoint = ts.getPoint () ፤ // pega o touch (x ፣ y ፣ z = pressao) pinMode (XM ፣ OUTPUT) ፤ pinMode (YP ፣ ውፅዓት); // mapeia o ponto de touch para o (x, y) grafico // o fato de termos rotacionado a tela para የመሬት አቀማመጥ ኢንኤአአአ 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); // verifica se a pressão no toque foi sufficiente (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 ("Circle")); }}}

ደረጃ 10 ክበቡን ከነካነው ያረጋግጡ

በዚህ ደረጃ ከማያ ገጽ መነሻን ጋር እንገናኛለን እና የሚታዩትን የጽሑፎች ቀለሞች እንገልፃለን።

/ *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 (አረንጓዴ); tft.setTextSize (TEXT_SIZE_L); tft.println ("FERNANDOK. COM"); createRect (); ትሪያንግል (); 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 ሠ ቁመት = 50 ባዶ ባዶ 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) ባዶ ፈጠራTriangle () {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 ኤክስ retangulo if (px> = 10 && px <= 90) {// max/min Y retangulo if (py = 100) {እውነት ይመለሱ ፤ }} ሐሰትን መመለስ ፤ }

ደረጃ 13 ክበቡን ከነካነው ያረጋግጡ

ይህ ከክበቡ ጋር ተመሳሳይ ነው።

// 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) {float distance = sqrt (pow (px - circle_x, 2) + pow (py - circle_y, 2)); ከሆነ (ርቀት <= circle_radius) {እውነት ተመለስ; } ሐሰትን መመለስ; }

ደረጃ 14 - ሶስት ማዕዘኑን ከነካን እንፈትሽ

ሶስት ማዕዘኑን ከነካን ያረጋግጡ
ሶስት ማዕዘኑን ከነካን ያረጋግጡ

የነጥቡ ተመሳሳይ ቼክ እንዲሁ በሦስት ማዕዘኑ ውስጥ ይከሰታል።

// Função que verifica se o ponto p esta dentro do triangulo ኤቢሲ // Se estiver dentro retorna TRUE senão retorna FALSE bool pointInsideTriangle (TSPoint a, TSPoint b, TSPoint c, TSPoint p) {float ABC = triangleArea (ሀ ፣ ለ); ተንሳፋፊ ACP = ትሪያንግልArea (a, c, p); ABP = triangleArea (a, b, p) ተንሳፈፈ; ተንሳፋፊ ሲፒቢ = ትሪያንግል አሬአ (ሐ ፣ ገጽ ፣ ለ); (ኤቢሲ == ACP+ABP+CPB) {እውነት ይመለሱ ፤ } ሐሰትን መመለስ; } // Função que a area de um triangulo com base nos pontos x, y float triangleArea (TSPoint a, TSPoint b, TSPoint c) {fabs (((bx - ax))*(cy - ay) - (cx - መጥረቢያ) * (በ - አይ))/2); }

ደረጃ 15 የነካውን ነገር ስም የማተም ተግባር

እዚህ ጥቅም ላይ የዋለውን የጂኦሜትሪክ ምስል ስም በማያ ገጹ ላይ እንጽፋለን።

// 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 ፣ BLACK) ፤ tft.setCursor (FEEDBACK_TOUCH_X ፣ FEEDBACK_TOUCH_Y); tft.setTextSize (TEXT_SIZE_G); tft.setTextColor (ነጭ); tft.println (ቅርፅ); }

ደረጃ 16 - ፋይሎች

ፋይሎቹን ያውርዱ ፦

INO

ፒዲኤፍ

የሚመከር: