Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

TFT-Shield für Arduino Nano - Start

Komponenten und Verbrauchsmaterialien

Arduino Nano R3
× 1
2,8" TFT SPI 320x240
× 1
TFT-Shield für Arduino Nano
× 1

Über dieses Projekt

Die Geschichte

Es gibt kaum einen Menschen, der nicht gesehen hat und nicht weiß, was ein Farbdisplay ist. Und wahrscheinlich haben viele ein Projekt auf Arduino mit einem Farbdisplay durchgeführt (oder möchten es tun). Darüber hinaus sind solche Displays heute sehr weit verbreitet und erschwinglich. Es gibt viele Displays, die sich in Auflösung, Bildschirmgröße und Schnittstelle unterscheiden. Ich möchte auf eines dieser Displays eingehen. Uns interessiert ein Display mit einer Schnittstelle von SPI, einer Auflösung von 320x240 Pixel und einer Bildschirmdiagonale von 2,8" (sowie 2,4" und 3,2"). Die SPI-Schnittstelle ist sehr praktisch für den Anschluss an einen Mikrocontroller, da hat eine kleine Anzahl von Signalleitungen. Und die Geschwindigkeit von SPI ermöglicht es Ihnen, den Inhalt des Bildschirms schnell zu aktualisieren. Im Allgemeinen viele Vorteile. Aber es gibt unangenehme Momente. Zum Beispiel ist es notwendig, die Logikebenen weiter zu koordinieren. im Falle des Anschlusses des Displays an die Arduino-Boards mit 5-Volt-Strom.Für den schnellen und einfachen Anschluss eines dieser Displays (mit der SPI-Schnittstelle) an Arduino Nano verwenden wir eine geringe Gebühr - TFT-Shield.

Dieses Shield ist die zweite (leichte, für Arduino Nano) Version von TFT Shield für Arduino Uno, über die Sie hier und hier und hier lesen können.

Kurze Beschreibung des TFT-Schilds:

  • Die Größe der Tafel beträgt 64x49 mm,
  • 30-poliger Anschluss zum Anschluss von Arduino Nano,
  • 14-poliger Anschluss zum Anschluss eines TFT-Displays 320x240 mit SPI-Schnittstelle (inkl. Touchscreen),
  • Anschluss für microSD-Karte,
  • Anschluss für das Bluetooth-Modul (HC-06),
  • 20-poliger Anschluss für Kamera OV7670 (und andere),
  • Mini-USB-Anschluss, sowie ein separater 2-Pin-Anschluss für die Stromversorgung 5V.

Also, fangen wir an.

Montage

Das Zusammenbauen von Boards ist sehr einfach. Es ist jedoch darauf zu achten, dass die Kontaktbezeichnungen vor der Installation gelesen werden. Zuerst müssen Sie das Arduino Nano Board wie auf dem Foto gezeigt installieren. Danach wird ein Display angeschlossen, welches beides auf einer Seite des Boards angeschlossen werden kann (Methode 1 ) und zum anderen (Methode 2 ). Danach können Sie die Stromversorgung mit einem Mini-USB-Kabel anschließen. Die folgenden Fotos sind.

Methode 1:

Methode 2:

Nach der Montage können Sie mit dem Herunterladen von Skizzen fortfahren. Vergessen Sie jedoch nicht, die erforderliche Bibliothek für die Arbeit mit dem TFT-Shield zu installieren. Die Bibliothek befindet sich unter dem Link:https://github.com/YATFT/YATFT.

Demo 1. Grafiken und Text.

Dieses Kapitel enthält ein Beispiel für die Arbeit mit Text, Grafiken und einem Touchscreen. Der Einfachheit halber wird empfohlen, dass Sie das Arduino Nano Board zuerst separat programmieren und dann das Gerät zusammenbauen (Sie können das Board aber auch als Teil des Geräts programmieren). Skizze zum Arbeiten mit Text und Grafiken:

/******************************************** ********************************** SOFTWARE UND DOKUMENTATION WERDEN "WIE BESEHEN" OHNE JEGLICHE GEWÄHRLEISTUNG BEREITGESTELLT* ART, ENTWEDER AUSDRÜCKLICH ODER STILLSCHWEIGEND, EINSCHLIESSLICH, OHNE EINSCHRÄNKUNG, JEGLICHE GARANTIE* DER MARKTFÄHIGKEIT, TITEL, NICHTVERLETZUNG UND EIGNUNG FÜR EINEN BESTIMMTEN* ZWECK. IN KEINEM FALL KÖNNEN DER AUTOR ODER SEINE LIZENZGEBER VERPFLICHTET ODER VERPFLICHTET WERDEN, FAHRLÄSSIGKEIT, STRENG HAFTUNG, BEITRAG,* GEWÄHRLEISTUNGSVERLETZUNG ODER ANDERE RECHTSGEMÄßE THEORIE JEGLICHE DIREKTE ODER INDIREKTE* SCHÄDEN ODER KOSTEN, DIE NICHT BEZÜGLICH VON A ,* INDIREKTE, STRAFEN- ODER FOLGESCHÄDEN, GEWINN- ODER DATENVERLUST,* KOSTEN FÜR DIE BESCHAFFUNG VON ERSATZWAREN, TECHNOLOGIE, DIENSTLEISTUNGEN ODER ALLE* ANSPRÜCHE DRITTER (EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF VERTEIDIGUNGSKOSTEN ODER ANDERES),*LAR .**************************************************** *****************************/#include  // Hardwarespezifische Bibliothek#include  // Adafruit-GFX-Bibliothek einbinden#include  // Adafruit-Fonts einbinden#include #include YATFT tft(0); .uint32_t total__ttime; Farbe[4] ={HELLBLAU, HELLGRÜN, HELLROT, HELLGELB};uint16_t Grau[7] ={GRAU0, GRAU1, GRAU2, GRAU3, GRAU4, GR AY5, GRAU6};/************************************************ *********************************/void ClearScreen (void) {tft.SetColor (SCHWARZ); // Fone-Farbe setzen tft.ClearDevice(); // Füllen Sie den gesamten Bildschirm}void setup () { Serial.begin (115200); // Initialisieren Sie den seriellen Port Serial.println ( "Arduino TFT_shield Beispiel 1!"); tft.begin(); // Display initialisieren}void loop () { uint16_t x, y, x2, y2, mask_gray; uint16_t i; ClearScreen(); // Schriftarten Serial.print ( "1) Schriftarten anzeigen ("); total_time =millis(); tft.SetColor (HELLBLAU); tft.SetFont(NULL); tft.OutTextXY(5, 5, "Demonstration der Arbeit mit dem TFT-Display."); tft.SetColor (HELLGRÜN); tft.SetFont(&FreeSerif9pt7b); tft.OutTextXY(5, 20, "Das Beispiel verwendet Schriftarten von Adafruit."); tft.SetFont(&FreeSerifItalic24pt7b); tft.SetColor(BRIGHTCYAN); tft.OutTextXY(5, 45, "3,5''"); tft.SetColor(BRIGHTRED); tft.OutTextXY(90, 45, "QVGA"); tft.SetColor(BRIGHTMAGENTA); tft.OutTextXY(230, 45, "disp."); tft.SetColor (HELLGELB); tft.SetFont(&FreeSans24pt7b); tft.OutTextXY(5, 100, "A R D U I N O + T F T"); tft.SetFont(NULL); für (i =0; i <7; i ++) { tft.SetColor (Gray[i]); tft.OutTextXY(5, 170+10*i, "Demonstration der Arbeit mit dem TFT-Display."); } PrintTotalTime(); Verzögerung (3000); ClearScreen(); // Kreis Serial.print ("2) Kreis zeichnen ("); total_time =millis(); tft.SetColor(BRIGHTRED); for (i =10; i >1; i +=10) { tft.DrawCirc(GetMaxX()>>1, GetMaxY()>>1, i); } PrintTotalTime(); Verzögerung (1000); // DrawFillCircle &DrawFillRect Serial.print ("3) Draw FillCircle und FillRect ("); total_time =millis(); tft.SetColor(BRIGHTRED); tft.DrawFillCirc(GetMaxX()>>1,GetMaxY()>>1,110); tft.SetColor(BRIGHTCYAN); tft.DrawFillRect(GetMaxX()/2-77,GetMaxY()/2-77, GetMaxX()/2+77,GetMaxY()/2+77); tft.SetColor (HELLGRÜN); tft.DrawFillCirc(GetMaxX()>>1,GetMaxY()>>1,77); tft.SetColor(BRIGHTMAGENTA); tft.DrawFillRect(GetMaxX()/2-54,GetMaxY()/2-54, GetMaxX()/2+54,GetMaxY()/2+54); tft.SetColor (HELLBLAU); tft.DrawFillCirc(GetMaxX()>>1,GetMaxY()>>1,54); tft.SetColor (HELLGELB); tft.DrawFillRect(GetMaxX()/2-37,GetMaxY()/2-37, GetMaxX()/2+37,GetMaxY()/2+37); PrintTotalTime(); Verzögerung (1000); ClearScreen(); // Bogen Serial.print ("4) Bogen zeichnen ("); total_time =millis(); ClearScreen(); tft.SetColor (HELLBLAU); tft.DrawArc((GetMaxX()>>1)-60,(GetMaxY()>>1)-60,(GetMaxX()>>1)+60,(GetMaxY()>>1)+60,20, 30,0xFF); tft.SetColor (HELLGRÜN); tft.DrawArc((GetMaxX()>>1)-40,(GetMaxY()>>1)-40,(GetMaxX()>>1)+40,(GetMaxY()>>1)+40,20, 30,0xFF); tft.SetColor(BRIGHTRED); tft.DrawArc((GetMaxX()>>1)-20,(GetMaxY()>>1)-20,(GetMaxX()>>1)+20,(GetMaxY()>>1)+20,20, 30,0xFF); PrintTotalTime(); Verzögerung (1000); Serial.print("5) FillBevel zeichnen ("); total_time =millis(); tft.SetColor (HELLBLAU); tft.DrawFillBevel((GetMaxX()>>1)-60,(GetMaxY()>>1)-60,(GetMaxX()>>1)+60,(GetMaxY()>>1)+60,30); tft.SetColor (HELLGRÜN); tft.DrawFillBevel((GetMaxX()>>1)-40,(GetMaxY()>>1)-40,(GetMaxX()>>1)+40,(GetMaxY()>>1)+40,30); tft.SetColor(BRIGHTRED); tft.DrawFillBevel((GetMaxX()>>1)-20,(GetMaxY()>>1)-20,(GetMaxX()>>1)+20,(GetMaxY()>>1)+20,30); PrintTotalTime(); Verzögerung (1000); ClearScreen(); Serial.print("6) Bogen zeichnen ("); total_time =millis(); für (i =0; i <4; i ++) { tft.SetColor (Color[i]); tft.DrawArc((GetMaxX()>>1),(GetMaxY()>>1)-50,(GetMaxX()>>1),(GetMaxY()>>1)+50,50,60,0x11<>1),(GetMaxY()>>1)-30,(GetMaxX()>>1),(GetMaxY()>>1)+30,35,45,0x11<>1),(GetMaxY()>>1),(GetMaxX()>>1),(GetMaxY()>>1),20,30,0x11< 

Einige Screenshots:

Demo 2. Touchscreen.

/******************************************** ********************************** SOFTWARE UND DOKUMENTATION WERDEN "WIE BESEHEN" OHNE JEGLICHE GEWÄHRLEISTUNG BEREITGESTELLT* ART, ENTWEDER AUSDRÜCKLICH ODER STILLSCHWEIGEND, EINSCHLIESSLICH, OHNE EINSCHRÄNKUNG, JEGLICHE GARANTIE* DER MARKTFÄHIGKEIT, TITEL, NICHTVERLETZUNG UND EIGNUNG FÜR EINEN BESTIMMTEN* ZWECK. IN KEINEM FALL KÖNNEN DER AUTOR ODER SEINE LIZENZGEBER VERPFLICHTET ODER VERPFLICHTET WERDEN, FAHRLÄSSIGKEIT, STRENG HAFTUNG, BEITRAG,* GEWÄHRLEISTUNGSVERLETZUNG ODER ANDERE RECHTSGEMÄßE THEORIE JEGLICHE DIREKTE ODER INDIREKTE* SCHÄDEN ODER KOSTEN, DIE NICHT BEZÜGLICH VON A ,* INDIREKTE, STRAFEN- ODER FOLGESCHÄDEN, GEWINN- ODER DATENVERLUST,* KOSTEN FÜR DIE BESCHAFFUNG VON ERSATZWAREN, TECHNOLOGIE, DIENSTLEISTUNGEN ODER ALLE* ANSPRÜCHE DRITTER (EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF VERTEIDIGUNGSKOSTEN ODER ANDERES),*LAR .**************************************************** *****************************/#include  // Hardwarespezifische Bibliothek#include  // SPI-Bibliothek einschließen#include  // Touchscreen-Bibliothek einschließen#include  // Adafruit-GFX-Bibliothek einschließen#include  // Adafruit-Fonts einschließen#include #include // Touchscreen:MOSI=11, MISO=12, SCK=13, CS=2#define CS_PI N A0XPT2046_Touchscreen ts(CS_PIN, 255);YATFT tft(0);#define Y_BAR_TOP (GetMaxY()-50)#define Y_BAR_BOT GetMaxY()/* Bei Verwendung des Shields sind alle Steuer- und Datenleitungen fixiert und eine einfachere Deklaration kann optional verwendet werden:*/uint16_t pos_x[] ={0,0,0,0};uint16_t pos_y[] ={0,0,0,0};uint8_t pos_x_cnt =0;uint8_t pos_y_cnt =0;uint16_t pos_x_mid =0;uint16_t pos_y_mid =0;uint16_t color_paint =WEISS;uint8_t buttons =0;uint16_t Color[4] ={HELLBLAU, HELLGRÜN, HELLROT, HELLGELB};uint16_t Grau[7] ={GRAY0, GRAU1, GRAU2, GRAU4,3, GRAU GRAU5, GRAU6};/************************************************ ************************************************* ***/void ClearScreen (void) {tft.SetColor (BLACK); // Fone-Farbe setzen tft.ClearDevice(); // Füllen Sie den gesamten Bildschirm}void setup () { Serial.begin (115200); // Initialisieren Sie den seriellen Port Serial.println ("Arduino TFT_shield Example1!"); ts.begin(); // Init Touchscreen SPI.end(); // SPI für korrekte Arbeit deaktivieren DB2 (SS) Pin tft.begin (); // Anzeige initialisieren RefreshWindow();}void loop(){ uint16_t x, y; // Touch // Wenn der SS-Pin als OUTPUT eingestellt ist, kann er als // universeller Ausgangsport verwendet werden (er beeinflusst nicht // SPI-Operationen). SPI.begin(); if (ts.touched()) { TS_Point p =ts.getPoint(); Serial.print (F ("Druck =")); Serial.print (p.z); Serial.print (F (, x =")); Serial.print (p.x); Serial.print (F (, y =")); Serial.print (p.y); Serial.println(); Verzögerung(3); // Verzögerung beim Filtern von SPI.end(); // SPI für korrekte Arbeit deaktivieren DB2 (SS) Pin // Berechnen Sie die Koordinaten x, y aus dem Code ADC Serial.print (F ("Pressure =")); Serial.print (p.z); Serial.print (F (, x =")); Serial.print (p.x); Serial.print (F (, ")); Serial.print (x); Serial.print (F (, y =")); Serial.print (p.y); Serial.print (F (, ")); Serial.print (y); Serial.println(); wenn (p.x <350) p.x =350; wenn (p.x> 3850) p.x =3850; wenn (p.y <250) p.y =250; wenn (p.y> 3850) p.y =3850; x =(uint16_t)(320L – ((uint32_t)p.x – 350L)*100L/1094L); y =(uint16_t)(240L – ((uint32_t)p.y – 250L)*100L/1510L); // Filtern pos_x_mid =(pos_x[0] + pos_x[1] + pos_x[2] + pos_x[3])/4; pos_y_mid =(pos_y[0] + pos_y[1] + pos_y[2] + pos_y[3])/4; pos_x[pos_x_cnt++] =x; pos_y[pos_y_cnt++] =y; pos_x_cnt &=0x03; pos_y_cnt &=0x03; if (x> (pos_x_mid - 10) &&x <(pos_x_mid + 10) &&y> (pos_y_mid - 10) &&y <(pos_y_mid + 10 )) { if (y> Y_BAR_TOP &&y  

Einige Screenshots:

Demo 3. Logikspiel "Columns".

/******************************************** ********************************** SOFTWARE UND DOKUMENTATION WERDEN "WIE BESEHEN" OHNE JEGLICHE GEWÄHRLEISTUNG BEREITGESTELLT* ART, ENTWEDER AUSDRÜCKLICH ODER STILLSCHWEIGEND, EINSCHLIESSLICH, OHNE EINSCHRÄNKUNG, JEGLICHE GARANTIE* DER MARKTFÄHIGKEIT, TITEL, NICHTVERLETZUNG UND EIGNUNG FÜR EINEN BESTIMMTEN* ZWECK. IN KEINEM FALL KÖNNEN DER AUTOR ODER SEINE LIZENZGEBER VERPFLICHTET ODER VERPFLICHTET WERDEN, FAHRLÄSSIGKEIT, STRENG HAFTUNG, BEITRAG,* GEWÄHRLEISTUNGSVERLETZUNG ODER ANDERE RECHTSGEMÄßE THEORIE JEGLICHE DIREKTE ODER INDIREKTE* SCHÄDEN ODER KOSTEN, DIE NICHT BEZÜGLICH VON A ,* INDIREKTE, STRAFEN- ODER FOLGESCHÄDEN, GEWINN- ODER DATENVERLUST,* KOSTEN FÜR DIE BESCHAFFUNG VON ERSATZWAREN, TECHNOLOGIE, DIENSTLEISTUNGEN ODER ALLE* ANSPRÜCHE DRITTER (EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF VERTEIDIGUNGSKOSTEN ODER ANDERES),*LAR .**************************************************** ******************************/#include #include #include #include  // Kerngrafikbibliothek#include #include #define CS_PIN A0// MOSI=11, MISO=12, SCK=13XPT2046 ._Touchscreent (CS_PIN, 255);YATFT tft(0);/* Bei Verwendung des Shields sind alle Steuer- und Datenleitungen fixiert, optional kann eine einfachere Deklaration verwendet werden :*/long randNumber;#define KEY_EMPTY 0#define KEY_SWAP 1#define KEY_FALL 2#define KEY_LEFT 3#define KEY_RIGHT 4#define DISPLAY_MAX_X 320#define DISPLAY_MAX_Y 240#define MaxCol 8 #define MaxSmeX 3# .define #define razmer 15#define LL 250#define NumCol 6#define MaxLevel 8#define PeriodLevel 80#define DISP_LEFT ((DISPLAY_MAX_X - MaxCol*razmer)/2 - 2)#define DISP_RIGHT ((DISPLAY_MAX_X + MaxCol*razmer)/2 + 2)#define DISP_TOP ((DISPLAY_MAX_Y - (MaxRow-4)*razmer)/2 - 2 - 10)#define DISP_BOT ((DISPLAY_MAX_Y + (MaxRow-4)*razmer)/2 + 2 - 10)uint8_t MasSt[MaxCol ][MaxRow], MasTmp[MaxCol][MaxRow], MasOld[MaxCol][MaxRow], fignext[3];uint8_t Level=1, OldLevel, tr, flfirst=1;uint16_t MasCol[]={WEISS, SCHWARZ, HELLROT , BRIGHTBLUE, BRIGHTGREEN, BRIGHTYELLOW, BRIGHTMAGENTA, BRIGHTCYAN};unsigned long Counter,Score=0, TScore=0, Record=0, OldRecord, OldScore, myrecord;uint16_t tempspeed;bool fl, Demo=true, myfl=false, Arbeiten=false, FlNew, FlZ=false;int8_t VAL, Mp, x,y;int8_t mmm [4][2]={ {-1,0},{0,-1},{1,0},{0,1}};uint16_t MasSpeed[MaxLevel]={500,450,400,350,300,250,200,100};/************ ************************************************* ****/void setup (void) {// Initialisieren des seriellen Ports Serial.begin (115200); Serial.println("TFT_shield_Game1 Beispiel!"); ts.begin(); // Init Touchscreen SPI.end(); tft.begin(); // die Anzeige initialisieren randomSeed (analogRead (5)); tft.SetColor (WEISS); tft.ClearDevice(); tft.SetColor (ROT); tft.SetFont(&FreeSerif9pt7b); tft.OutTextXY( 20, 20, "LEVEL"); tft.OutTextXY(240, 20, "WEITER"); tft.OutTextXY( 20, 75, "BEWERTUNG"); tft.OutTextXY( 25, 130, "TOP"); FlNeu =wahr; ViewStacan(); GetNext(); Verzögerung (100); tft.SetColor (SCHWARZ); tft.DrawLine(DISP_LEFT + 1, DISP_TOP + 0, DISP_LEFT + 1, DISP_BOT - 1); tft.DrawLine(DISP_LEFT + razmer*MaxCol+5-MaxCol,DISP_TOP + 0,DISP_LEFT + razmer*MaxCol+5-MaxCol, DISP_BOT - 1); tft.DrawLine(DISP_LEFT + 1, DISP_BOT - 1, DISP_LEFT + 1+razmer*MaxCol+5-MaxCol-1, DISP_BOT - 1);}void loop(void){ if (Demo) ProcDemo(); else { if (Arbeiten) { mydelay(tempspeed); figmove(0,1); } else if (mypush()==KEY_SWAP) NewGame(); }}uint8_t mypush(void){ unsigned long tpr =millis(); uint8_t res =KEY_EMPTY; uint8_t-Schaltfläche =0; statisch uint8_t button_old; statisch uint8_t cnt =0; Taste =Berühren (); wenn (Schaltfläche) {cnt =5; Serial.print ("Scan-Taste:"); Serial.print (Taste, HEX); Serial.println(); if (button !=button_old) { if (button &0x01) res =KEY_SWAP; if (Schaltfläche &0x02) res =KEY_FALL; if (Schaltfläche &0x04) {}; if (Schaltfläche &0x08) res =KEY_LEFT; if (Schaltfläche &0x10) res =KEY_RIGHT; button_old =Schaltfläche; } } if (!cnt) { button_old =button; } sonst { cnt--; } return(res); }void ViewQuad(uint8_t i,uint8_t j,uint8_t mycolor){ if (j<3) return; uint16_twy =DISP_TOP + SmeY + (j-3)*razmer - j; uint16_t wx =DISP_LEFT + SmeX + i*razmer - i; if (mycolor!=0) { tft.SetColor (BLACK); tft.DrawRect(wx, wy, wx+razmer-1, wy+razmer-1); tft.SetColor(MasCol[mycolor]); tft.DrawFillRect(wx+1, wy+1, wx+1+razmer-3, wy+1+razmer-3); aufrechtzuerhalten. Sonst { tft.SetColor (WEISS); tft.DrawFillRect(wx+1, wy+0, wx+1+razmer-3, wy+1+razmer-3); }}void ViewStacan(void){ char myStr2[5]; uint8_th =tft.GetTextHeight(&FreeMonoBoldOblique12pt7b); tft.SetFont(&FreeMonoBoldOblique12pt7b); if (OldScore!=Score || FlNew) { sprintf(myStr2,"%05d",Score); int16_t w =tft.GetTextWidth(myStr2, &FreeMonoBoldOblique12pt7b); tft.SetColor (WEISS); tft.DrawFillRect(20,100,20+w+5.100+h); tft.SetColor (GRÜN); tft.OutTextXY(20,100,myStr2); OldScore=Score; } if (OldRecord!=Record || FlNew) { sprintf(myStr2,"%05d",Record); int16_t w =tft.GetTextWidth(myStr2, &FreeMonoBoldOblique12pt7b); tft.SetColor (WEISS); tft.DrawFillRect(20,155,20+w+5.155+h); tft.SetColor (GRÜN); tft.OutTextXY(20,155,myStr2); OldRecord=Record; } if (OldLevel!=Level || FlNew) { sprintf(myStr2,"%01d",Level); int16_t w =tft.GetTextWidth(myStr2, &FreeMonoBoldOblique12pt7b); tft.SetColor (WEISS); tft.DrawFillRect(25,45,25+w+5,45+h); tft.SetColor (GRÜN); tft.OutTextXY(25,45,myStr2); OldLevel=Level; } FlNew=false; for (byte j=3;j=0 &&ny>=0 &&nx1 || MasTmp[i][j]>2 )) { MasTmp[nx][ny]=3; MasTmp[i][j]=3; } else if (mode==3 &&MasTmp[nx][ny]==3) { if (MasTmp[i][j]!=3) { MasTmp[i][j]=3; fl=wahr; } } }}void Sos(int i,int j, byte mode){ for (byte k=0;k<4;k++) Sosed(i,j,mmm[k][0],mmm[k][1 ],Modus); }bool FindFull(void){ byte i,j,k; bool res; res =falsch; for (Byte k=2;k<8;k++) { ClearMas(MasTmp); for (j=3;j1) Sos(i,j,2); tun { fl=falsch; for (j=3;j0) Sos(i,j,3); } while (fl); for (j=3;j0) { ViewStacan(); FlZ=wahr; meine Verzögerung (500); } for (j=0;jMaxLevel) Level=MaxLevel; } tempspeed=MasSpeed[Level-1]; }}void MyScore(void){ TScore=0; while(FindFull()) { if (TScore>7) Score=Score+TScore+(TScore-8)*2; sonst Punktzahl =Punktzahl + TPunkte; ViewStacan(); FlZ=wahr; mydelay(1000); } FlZ=false;}void ProcDemo(void){ Score=0; GetNext(); for (Byte j=3;jMaxCol-1) return(false); if (dx!=0) if (MasSt[x+dx][y+dy+2]==0) return(true); sonst return(falsch); if (dy>0) { if (y+dy+2>MaxRow-1 || MasSt[x+dx][y+dy+2]>0) { if (y<3) gameover(); sonst fff=true; } else { for (Byte i=0;i<3;i++) MasSt[x][y+2-i+dy]=MasSt[x][y+2-i]; MasSt[x][y]=0; y=y+dy; } if (fff) { MyScore(); GetNext(); } ViewStacan(); } return(true);}uint8_t Touch(void){ uint16_t x, y; uint8_t-Schaltfläche =0; // Berühren // Wenn der SS-Pin als OUTPUT eingestellt ist, kann er als // universeller Ausgangsport verwendet werden (er beeinflusst nicht // SPI-Operationen). SPI.begin(); if (ts.touched()) { TS_Point p =ts.getPoint(); Verzögerung(3); // Verzögerung beim Filtern von SPI.end(); // Koordinaten x, y aus Code ADC berechnen if (p.x <450) p.x =450; wenn (p.y <500) p.y =500; x =(uint16_t)(320L – ((uint32_t)p.x – 450L)*10L/106L); y =(uint16_t)(240L – ((uint32_t)p.y – 500L)*10L/140L); if (x <80) {// Linke Taste =0x08; aufrechtzuerhalten. Sonst if (x> 240) {// Rechte Taste =0x10; aufrechtzuerhalten. Sonst if (y <120) {// Schaltfläche austauschen =0x01; } Else-Schaltfläche =0x02; // Fallen} SPI.end(); Zurück-Taste;} 

Einige Screenshots:

Demovideo

Fortsetzung folgt.

Danke für die Aufmerksamkeit!

Vorherige Artikel:

1) Einzigartiges TFT-Shield für Arduino Uno - Start,

2) Einzigartiges TFT-Schild für Arduino Uno - OV7670 Cam Live View,

3) Einzigartiges TFT-Shield für Arduino Uno - Arduino Bluetooth-Kamera (ABC).

Nächste Artikel:

4) Fotos und RGB-Video auf TFT-SPI-Display.

Update 01.04.2021:

Hallo wieder! Es gibt eine aktualisierte Bibliothek für eine Reihe von Bildschirmen, die derzeit aus zwei Shields und zwei Breakout-Boards besteht. Die Skizze wird je nach gewählter Version (von 1 bis 4) und der Art des Mikrocontrollers (MegaAVR oder ESP-32) zusammengestellt. Fotos, Beispiele hinzugefügt. Weitere Informationen finden Sie in der https://github.com/Ekaburg/EkaTFT.

Code

Bibliothek
https://github.com/YATFT/YATFT

Herstellungsprozess

  1. Bitmap-Animation auf dem ILI9341 TFT-Touchscreen-Displayschild
  2. Webbetriebener DMX-Controller
  3. Arduino Spybot
  4. Blumen - Arduino Nano, CrazyCircuits, DFRobot
  5. Arduino Nano:Steuerung von 2 Schrittmotoren mit Joystick
  6. START:Ein eigenständiges ARduino-Terminal
  7. Handheld-Geigerzähler mit Arduino Nano
  8. SMART-Temperaturüberwachung für Schulen
  9. 8-Bit-IO-Port-Bibliothek für Arduino
  10. BLUE_P:Drahtloses Arduino-Programmierschild