Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

TFT Shield voor Arduino Nano - Start

Componenten en benodigdheden

Arduino Nano R3
× 1
2,8" TFT SPI 320x240
× 1
TFT-schild voor Arduino Nano
× 1

Over dit project

Het verhaal

Er is bijna niemand die niet heeft gezien en niet weet wat een kleurendisplay is. En waarschijnlijk hebben velen een project op Arduino gedaan (of willen doen) met behulp van een kleurendisplay. Bovendien zijn dergelijke displays tegenwoordig zeer wijdverbreid en betaalbaar. Er zijn veel beeldschermen die verschillen in resolutie, schermgrootte, interface. Ik wil graag stilstaan ​​bij een van deze displays. We zullen geïnteresseerd zijn in een display met een interface van SPI, een resolutie van 320x240 pixels en een schermdiagonaal van 2,8 "(evenals 2,4" en 3,2 "). De SPI-interface is erg handig voor aansluiting op een microcontroller, aangezien heeft een klein aantal signaallijnen. En met de snelheid van SPI kunt u snel de inhoud van het scherm bijwerken. Over het algemeen veel voordelen. Maar er zijn ongemakkelijke momenten. Het is bijvoorbeeld noodzakelijk om de logische niveaus verder te coördineren in het geval van aansluiting van het display op de Arduino-boards met een stroom van 5 volt. Voor een snelle en gemakkelijke aansluiting van een van deze displays (met de SPI-interface) op Arduino Nano, zullen we een kleine vergoeding gebruiken - TFT-shield.

Dit schild is de tweede (lichtgewicht, voor Arduino Nano) versie van TFT Shield voor Arduino Uno, waarover u hier en hier en hier kunt lezen.

Korte beschrijving van TFT-schild:

  • De afmeting van het bord is 64x49 mm,
  • 30-pins connector voor het aansluiten van Arduino Nano,
  • 14-pins connector voor het aansluiten van een TFT-scherm 320x240 met een SPI-interface (inclusief een touchscreen),
  • Connector voor microSD-kaart,
  • Connector voor de Bluetooth-module (HC-06),
  • 20-pins connector voor camera OV7670 (evenals andere),
  • Mini USB-connector, evenals een aparte 2-pins connector voor voeding van 5V.

Laten we beginnen.

Montage

Het monteren van borden is heel eenvoudig. Maar voor de installatie moet u ervoor zorgen dat u de contactaanduidingen leest. Eerst moet u het Arduino Nano-bord installeren zoals op de foto wordt getoond. Daarna wordt een display aangesloten, die beide aan één kant van het bord kan worden aangesloten (methode 1 ) en anderzijds (methode 2 ). Daarna kunt u de stroom aansluiten met een mini-USB-kabel. Hieronder volgen foto's.

Methode 1:

Methode 2:

Na de montage kunt u doorgaan met het downloaden van schetsen, maar vergeet niet eerst de benodigde bibliotheek te installeren om met het TFT-schild te werken. De bibliotheek bevindt zich op de link:https://github.com/YATFT/YATFT.

Demo 1. Afbeeldingen en tekst.

Dit hoofdstuk geeft een voorbeeld van het werken met tekst, afbeeldingen en een aanraakscherm. Voor het gemak is het aan te raden om eerst het Arduino Nano board apart te programmeren en daarna het apparaat in elkaar te zetten (maar je kunt het board ook als onderdeel van het apparaat programmeren). Schets voor het werken met tekst en afbeeldingen:

/******************************************* *********************************** SOFTWARE EN DOCUMENTATIE WORDEN GELEVERD "AS IS" ZONDER ENIGE GARANTIE* SOORT, EXPLICIET OF IMPLICIET, INCLUSIEF MAAR NIET BEPERKT TOT ENIGE GARANTIE* VAN VERKOOPBAARHEID, TITEL, NIET-INBREUK EN GESCHIKTHEID VOOR EEN BEPAALD* DOEL. IN GEEN GEVAL ZULLEN DE AUTEUR OF HAAR LICENTIEGEVERS AANSPRAKELIJK OF* VERPLICHT ZIJN ONDER CONTRACT, NALATIGHEID, STRIKTE AANSPRAKELIJKHEID, BIJDRAGE,* SCHENDING VAN GARANTIE, OF ANDERE JURIDISCHE GELIJKE THEORIE IN ENIGE RECHTSTREEKS OF INDIRECTE* SCHADE INCLUSIEF OF KOSTEN ,* INDIRECTE, BEPAALDE OF GEVOLGSCHADE, WINSTVERLIES OF GEGEVENSVERLIES,* KOSTEN VAN INKOOP VAN VERVANGENDE GOEDEREN, TECHNOLOGIE, DIENSTEN OF ENIGE* CLAIMS VAN DERDEN (INCLUSIEF MAAR NIET BEPERKT TOT ANDERE GELIJKTIJDIGE GOEDEREN) .************************************************** ******************************/#include  // Hardwarespecifieke bibliotheek#include  // Include Adafruit-GFX library#include  // Include Adafruit fonts#include #include YATFT tft(0);uint32_t total_time; Kleur[4] ={BRIGHTBLUE, BRIGHTGREEN, BRIGHTRED, BRIGHTYELLOW};uint16_t Grijs[7] ={GRAY0, GRAY1, GRAY2, GRAY3, GRAY4, GR AY5, GRIJS6};/********************************************* ***********************************/void ClearScreen (void){ tft.SetColor(BLACK); // Stel fone-kleur in tft.ClearDevice (); // Vul alle scherm} ongeldige setup () { Serial.begin (115200); // initialiseer de seriële poort Serial.println ("Arduino TFT_shield Voorbeeld 1!"); tft.begin(); // initialiseer de weergave}void loop(){uint16_t x, y, x2, y2, mask_gray; uint16_t ik; Scherm wissen(); // Lettertypen Serial.print("1) Lettertypen weergeven ("); totale_tijd =millis(); tft.SetColor (HELDERBLAUW); tft.SetFont(NULL); tft.OutTextXY(5, 5, "Demonstratie van werken met het TFT-scherm."); tft.SetColor (HELDERGROEN); tft.SetFont(&FreeSerif9pt7b); tft.OutTextXY(5, 20, "Het voorbeeld gebruikt lettertypen van Adafruit."); tft.SetFont(&FreeSerifItalic24pt7b); tft.SetColor(HELDERCYAAN); tft.OutTextXY(5, 45, "3,5''"); tft.SetColor (HELDERROOD); tft.OutTextXY(90, 45, "QVGA"); tft.SetColor(HELDERMAGENTA); tft.OutTextXY(230, 45, "disp."); tft.SetColor (HELDERGEEL); tft.SetFont(&FreeSans24pt7b); tft.OutTextXY(5, 100, "A R D U I N O + T F T"); tft.SetFont(NULL); for (i =0; i <7; i++) { tft.SetColor(Gray[i]); tft.OutTextXY(5, 170+10*i, "Demonstratie van werken met het TFT-scherm."); } PrintTotalTime(); vertraging (3000); Scherm wissen(); // Circle Serial.print("2) Teken cirkel ("); totale_tijd =millis(); tft.SetColor (HELDERROOD); for (i =10; i >1; i +=10) { tft.DrawCirc(GetMaxX()>>1, GetMaxY()>>1, i); } PrintTotalTime(); vertraging (1000); // DrawFillCircle &DrawFillRect Serial.print("3) Draw FillCircle en FillRect ("); totale_tijd =millis(); tft.SetColor (HELDERROOD); tft.DrawFillCirc(GetMaxX()>>1,GetMaxY()>>1.110); tft.SetColor(HELDERCYAAN); tft.DrawFillRect(GetMaxX()/2-77,GetMaxY()/2-77, GetMaxX()/2+77,GetMaxY()/2+77); tft.SetColor (HELDERGROEN); tft.DrawFillCirc(GetMaxX()>>1,GetMaxY()>>1,77); tft.SetColor(HELDERMAGENTA); tft.DrawFillRect(GetMaxX()/2-54,GetMaxY()/2-54, GetMaxX()/2+54,GetMaxY()/2+54); tft.SetColor (HELDERBLAUW); tft.DrawFillCirc(GetMaxX()>>1,GetMaxY()>>1,54); tft.SetColor (HELDERGEEL); tft.DrawFillRect(GetMaxX()/2-37,GetMaxY()/2-37, GetMaxX()/2+37,GetMaxY()/2+37); PrintTotale Tijd(); vertraging (1000); Scherm wissen(); // Arc Serial.print("4) Teken boog ("); totale_tijd =millis(); Scherm wissen(); tft.SetColor (HELDERBLAUW); tft.DrawArc((GetMaxX()>>1)-60,(GetMaxY()>>1)-60,(GetMaxX()>>1)+60,(GetMaxY()>>1)+60,20, 30,0xFF); tft.SetColor (HELDERGROEN); tft.DrawArc((GetMaxX()>>1)-40,(GetMaxY()>>1)-40,(GetMaxX()>>1)+40,(GetMaxY()>>1)+40,20, 30,0xFF); tft.SetColor (HELDERROOD); tft.DrawArc((GetMaxX()>>1)-20,(GetMaxY()>>1)-20,(GetMaxX()>>1)+20,(GetMaxY()>>1)+20,20, 30,0xFF); PrintTotale Tijd(); vertraging (1000); Serial.print("5) Draw FillBevel ("); totale_tijd =millis(); tft.SetColor (HELDERBLAUW); tft.DrawFillBevel((GetMaxX()>>1)-60,(GetMaxY()>>1)-60,(GetMaxX()>>1)+60,(GetMaxY()>>1)+60,30); tft.SetColor (HELDERGROEN); tft.DrawFillBevel((GetMaxX()>>1)-40,(GetMaxY()>>1)-40,(GetMaxX()>>1)+40,(GetMaxY()>>1)+40,30); tft.SetColor (HELDERROOD); tft.DrawFillBevel((GetMaxX()>>1)-20,(GetMaxY()>>1)-20,(GetMaxX()>>1)+20,(GetMaxY()>>1)+20,30); PrintTotale Tijd(); vertraging (1000); Scherm wissen(); Serial.print("6) Teken boog ("); totale_tijd =millis(); for (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< 

Enkele screenshots:

Demo 2. Touchscreen.

/******************************************* *********************************** SOFTWARE EN DOCUMENTATIE WORDEN GELEVERD "AS IS" ZONDER ENIGE GARANTIE* SOORT, EXPLICIET OF IMPLICIET, INCLUSIEF MAAR NIET BEPERKT TOT ENIGE GARANTIE* VAN VERKOOPBAARHEID, TITEL, NIET-INBREUK EN GESCHIKTHEID VOOR EEN BEPAALD* DOEL. IN GEEN GEVAL ZULLEN DE AUTEUR OF HAAR LICENTIEGEVERS AANSPRAKELIJK OF* VERPLICHT ZIJN ONDER CONTRACT, NALATIGHEID, STRIKTE AANSPRAKELIJKHEID, BIJDRAGE,* SCHENDING VAN GARANTIE, OF ANDERE JURIDISCHE GELIJKE THEORIE IN ENIGE RECHTSTREEKS OF INDIRECTE* SCHADE INCLUSIEF OF KOSTEN ,* INDIRECTE, BEPAALDE OF GEVOLGSCHADE, WINSTVERLIES OF GEGEVENSVERLIES,* KOSTEN VAN INKOOP VAN VERVANGENDE GOEDEREN, TECHNOLOGIE, DIENSTEN OF ENIGE* CLAIMS VAN DERDEN (INCLUSIEF MAAR NIET BEPERKT TOT ANDERE GELIJKTIJDIGE GOEDEREN) .************************************************** ******************************/#include  // Hardwarespecifieke bibliotheek#include  // Include SPI library#include  // Include Touchscreen library#include  // Include Adafruit-GFX library#include  // Include Adafruit fonts#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()/* Als u het schild gebruikt, zijn alle besturings- en datalijnen vast en is de aangifte eenvoudiger kan optioneel worden gebruikt:*/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 =WIT;uint8_t buttons =0;uint16_t Color[4] ={BRIGHTBLUE, BRIGHTGREEN, BRIGHTRED, BRIGHTYELLOW};uint16_t Gray[7] ={GRAY0, GRAY1, GRAY2, GRAY3, GREY3, GREY GRIJS5, GRIJS6};/********************************************* ********************************************** ***/void ClearScreen (void){ tft.SetColor(BLACK); // Stel fone-kleur in tft.ClearDevice (); // Vul alle scherm} ongeldige setup () { Serial.begin (115200); // initialiseer de seriële poort Serial.println ("Arduino TFT_shield Voorbeeld1!"); ts.begin(); // Init Touchscreen SPI.end(); // Schakel SPI uit voor correct werk DB2 (SS) pin tft.begin(); // initialiseer de weergave RefreshWindow();}void loop(){ uint16_t x, y; // Raak // aan als de SS-pin is ingesteld als OUTPUT, kan deze worden gebruikt als // een uitvoerpoort voor algemene doeleinden (het heeft geen invloed op // SPI-bewerkingen). SPI.begin(); if (ts.touched()) { TS_Point p =ts.getPoint(); Serial.print(F("Druk =")); Seriële.afdruk (p.z); Serial.print(F(", x =")); Seriële.afdruk (p.x); Serial.print(F(", y =")); Serial.print(p.y); Serieel.println(); vertraging (3); // Vertraging voor het filteren van SPI.end(); // Schakel SPI uit voor correct werk DB2 (SS) pin // Bereken coördinaten x, y uit code ADC Serial.print (F ("Pressure =")); Seriële.afdruk (p.z); Serial.print(F(", x =")); Seriële.afdruk (p.x); Serial.print(F(", ")); Serie.print(x); Serial.print(F(", y =")); Serial.print(p.y); Serial.print(F(", ")); Seriële.print(y); Serieel.println(); als (p.x <350) p.x =350; als (p.x> 3850) p.x =3850; als (py <250) p.y =250; als (py> 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); // Filteren 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  

Enkele screenshots:

Demo 3. Logisch spel "Kolommen".

/******************************************* *********************************** SOFTWARE EN DOCUMENTATIE WORDEN GELEVERD "AS IS" ZONDER ENIGE GARANTIE* SOORT, EXPLICIET OF IMPLICIET, INCLUSIEF MAAR NIET BEPERKT TOT ENIGE GARANTIE* VAN VERKOOPBAARHEID, TITEL, NIET-INBREUK EN GESCHIKTHEID VOOR EEN BEPAALD* DOEL. IN GEEN GEVAL ZULLEN DE AUTEUR OF HAAR LICENTIEGEVERS AANSPRAKELIJK OF* VERPLICHT ZIJN ONDER CONTRACT, NALATIGHEID, STRIKTE AANSPRAKELIJKHEID, BIJDRAGE,* SCHENDING VAN GARANTIE, OF ANDERE JURIDISCHE GELIJKE THEORIE IN ENIGE RECHTSTREEKS OF INDIRECTE* SCHADE INCLUSIEF OF KOSTEN ,* INDIRECTE, BEPAALDE OF GEVOLGSCHADE, WINSTVERLIES OF GEGEVENSVERLIES,* KOSTEN VAN INKOOP VAN VERVANGENDE GOEDEREN, TECHNOLOGIE, DIENSTEN OF ENIGE* CLAIMS VAN DERDEN (INCLUSIEF MAAR NIET BEPERKT TOT ANDERE GELIJKTIJDIGE GOEDEREN) .************************************************** ******************************/#include #include #include #include  // Core grafische bibliotheek#include #include #define CS_PIN A0// MOSI=11, MISO=12, SCK=13XPT2046_Touchscreen ts (CS_PIN, 255);YATFT tft(0);/* Als het schild wordt gebruikt, zijn alle controle- en datalijnen vast en kan optioneel een eenvoudigere declaratie worden gebruikt :*/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 SmeYX 3#define SmeYX 3#define SmeYX #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[]={WIT, ZWART, HELDERROOD , 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) { // initialiseer de seriële poort Serial.begin (115200); Serial.println("TFT_shield_Game1 voorbeeld!"); ts.begin(); // Init Touchscreen SPI.end(); tft.begin(); // initialiseer het display randomSeed (analogRead (5)); tft.SetColor (WIT); tft.ClearDevice(); tft.SetColor(ROOD); tft.SetFont(&FreeSerif9pt7b); tft.OutTextXY( 20, 20, "LEVEL"); tft.OutTextXY(240, 20, "VOLGENDE"); tft.OutTextXY( 20, 75, "SCORE"); tft.OutTextXY( 25, 130, "TOP"); VlNieuw =waar; BekijkStacan(); GetNext(); vertraging (100); tft.SetColor(ZWART); 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-knop =0; statisch uint8_t button_old; statisch uint8_t cnt =0; knop =Raak(); if (knop) { cnt =5; Serial.print("Scan-knop:"); Serial.print (knop, HEX); Serieel.println(); if (button !=button_old) { if (button &0x01) res =KEY_SWAP; if (knop &0x02) res =KEY_FALL; if (knop &0x04) {}; if (knop &0x08) res =KEY_LEFT; if (knop &0x10) res =KEY_RIGHT; button_old =knop; } } if (!cnt) { button_old =button; } anders { cnt--; } retour (res); }void ViewQuad(uint8_t i,uint8_t j,uint8_t mijnkleur){ if (j<3) return; uint16_t wy =DISP_TOP + SmeY + (j-3)*razmer - j; uint16_t wx =DISP_LEFT + SmeX + i*razmer - i; if (mijnkleur!=0) { tft.SetColor(ZWART); tft.DrawRect(wx, wy, wx+razmer-1, wy+razmer-1); tft.SetColor(MasCol[mijnkleur]); tft.DrawFillRect(wx+1, wy+1, wx+1+razmer-3, wy+1+razmer-3); } else { tft.SetColor(WIT); tft.DrawFillRect(wx+1, wy+0, wx+1+razmer-3, wy+1+razmer-3); }}void ViewStacan(void){ char myStr2[5]; uint8_t h =tft.GetTextHeight(&FreeMonoBoldOblique12pt7b); tft.SetFont(&FreeMonoBoldOblique12pt7b); if (OldScore!=Score || FlNew) { sprintf(myStr2,"%05d",Score); int16_t w =tft.GetTextWidth(myStr2, &FreeMonoBoldOblique12pt7b); tft.SetColor (WIT); tft.DrawFillRect(20,100,20+w+5,100+h); tft.SetColor (GROEN); tft.OutTextXY(20,100,myStr2); OudeScore=Score; } if (OldRecord!=Record || FlNew) { sprintf(myStr2,"%05d",Record); int16_t w =tft.GetTextWidth(myStr2, &FreeMonoBoldOblique12pt7b); tft.SetColor (WIT); tft.DrawFillRect(20,155,20+w+5,155+h); tft.SetColor (GROEN); tft.OutTextXY(20,155,myStr2); OldRecord=Record; } if (OldLevel!=Niveau || FlNew) { sprintf(myStr2,"%01d",Level); int16_t w =tft.GetTextWidth(myStr2, &FreeMonoBoldOblique12pt7b); tft.SetColor (WIT); tft.DrawFillRect(25,45,25+w+5,45+h); tft.SetColor (GROEN); tft.OutTextXY(25,45,myStr2); OldLevel=Niveau; } FlNieuw=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 =waar; } } }}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 =onwaar; voor (byte k=2;k<8;k++) { ClearMas(MasTmp); for (j=3;j1) Sos(i,j,2); doen { fl =onwaar; for (j=3;j0) Sos(i,j,3); } terwijl (fl); for (j=3;j0) { ViewStacan(); FlZ=waar; mijnvertraging (500); } for (j=0;jMaxLevel) Level=MaxLevel; } tempspeed=MasSpeed[Niveau-1]; }} mijnscore ongeldig maken (ongeldig){ TScore=0; while(FindFull()) { if (TScore>7) Score=Score+TScore+(TScore-8)*2; anders Score=Score+Tscore; BekijkStacan(); FlZ=waar; mijnvertraging (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); anders retour (onwaar); if (dy>0) { if (y+dy+2>MaxRow-1 || MasSt[x+dx][y+dy+2]>0) { if (y<3) gameover(); anders fff=waar; } 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) { MijnScore(); GetNext(); } ViewStacan(); } return(true);}uint8_t Touch(void){ uint16_t x, y; uint8_t-knop =0; // Raak // aan als de SS-pin is ingesteld als OUTPUT, kan deze worden gebruikt als // een uitvoerpoort voor algemene doeleinden (het heeft geen invloed op // SPI-bewerkingen). SPI.begin(); if (ts.touched()) { TS_Point p =ts.getPoint(); vertraging (3); // Vertraging voor het filteren van SPI.end(); // Bereken coördinaten x, y uit code ADC als (p.x <450) p.x =450; als (py <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) {// Linkerknop =0x08; } else if (x> 240) { // Rechterknop =0x10; } else if (y <120) { // Swap-knop =0x01; } else-knop =0x02; // Herfst} SPI.end(); return-knop;} 

Enkele screenshots:

Demovideo

Wordt vervolgd.

Bedankt voor de aandacht!

Vorige artikelen:

1) Uniek TFT-schild voor Arduino Uno - Start,

2) Uniek TFT-schild voor Arduino Uno - OV7670 Cam Live View,

3) Uniek TFT-schild voor Arduino Uno - Arduino Bluetooth-camera (ABC).

Volgende artikelen:

4) Foto's en RGB-video op TFT SPI-display.

Update 01.04.2021:

Welkom terug! Er is een bijgewerkte bibliotheek voor een reeks schermen, die momenteel bestaat uit twee schilden en twee breakout-borden. Afhankelijk van de gekozen versie (van 1 tot 4) en het type microcontroller (MegaAVR of ESP-32) wordt de schets samengesteld. Foto's, voorbeelden toegevoegd. Meer informatie is te vinden op https://github.com/Ekaburg/EkaTFT.

Code

Bibliotheek
https://github.com/YATFT/YATFT

Productieproces

  1. Bitmap-animatie op ILI9341 TFT Touchscreen Display Shield
  2. Web-gestuurde DMX-controller
  3. Arduino Spybot
  4. Bloemen - Arduino Nano, CrazyCircuits, DFRobot
  5. Arduino Nano:bedien 2 stappenmotoren met joystick
  6. START:een zelfstandige ARduino-terminal
  7. Handheld geigerteller met Arduino Nano
  8. SMART temperatuurbewaking voor scholen
  9. 8-bit IO-poortbibliotheek voor Arduino
  10. BLUE_P:Wireless Arduino Programming Shield
  11. 64-Key Prototyping Keyboard Matrix voor Arduino