Indholdsfortegnelse:

Arduino TFT -tegningsprogram: 4 trin
Arduino TFT -tegningsprogram: 4 trin

Video: Arduino TFT -tegningsprogram: 4 trin

Video: Arduino TFT -tegningsprogram: 4 trin
Video: Arduino Geekcreit 2.8" TFT LCD 2024, November
Anonim
Arduino TFT tegneprogram
Arduino TFT tegneprogram
Arduino TFT tegningsprogram
Arduino TFT tegningsprogram
Arduino TFT tegningsprogram
Arduino TFT tegningsprogram

Denne instruerbare beskriver koden, der går til at lave et tegneprogram til en Arduino TFT -skærm. Dette program er imidlertid unikt, fordi det giver mulighed for at gemme en tegning på SD -kortet og indlæse det senere for at foretage flere redigeringer!

Forbrugsvarer

  1. Arduino Uno - original eller en kompatibel klon
  2. TFT touchscreen - Jeg brugte en Elegoo skærm, hvilket betyder, at jeg havde brug for Elegoo drivere.
  3. Micro SD -læserkort - bruges til at gemme tegningsdata til SD -kort. Min skærm havde en indbygget læser under skærmen.
  4. Stylus - min skærm fulgte med en. Fingernegle fungerer også godt.
  5. Micro SD -kort - ikke mere end 32 GB på grund af exFAT -formateringsbegrænsninger (Arduino kan læse FAT32 -formaterede kort, men IKKE exFAT. De fleste større kort er formateret med exFAT.). Det er den slags, du ville sætte i en telefon med udvideligt lager.
  6. Computer med Arduino IDE
  7. Programmeringskabel - USB A til USB B. Min Arduino fulgte med.
  8. SD -kortadapter - bruges til at konvertere Micro SD -kortet til et normalt SD til at sætte i SD -slot ELLER et, der forbinder et SD -kort til et USB -slot.

Trin 1: Formater SD -kortet

Formater SD -kortet
Formater SD -kortet
Formater SD -kortet
Formater SD -kortet
  1. Tag Micro SD -kortet, og tilslut det til din computer ved hjælp af din SD -kortlæser
  2. Åbn File Explorer og find SD -kortet.
  3. Højreklik på det, og vælg Format.
  4. Indstil indstillingerne baseret på skærmbilledet.
  5. Klik på Start.
  6. Skub kortet ud, når processen er fuldført.

Hvis du ikke kører Windows, kan du prøve at bruge SD -formatter fra SD -foreningen.

Trin 2: Forbered Arduino

Forbered Arduino
Forbered Arduino
Forbered Arduino
Forbered Arduino
  1. Tryk din skærm ned på Arduino, og pas på at stille stifterne op.
  2. Indsæt SD -kortet i læseren under skærmen.

Trin 3: Arduino Sketch

Selvom delelisten var ret enkel, er der masser af kode. Jeg gennemgår det trin for trin her.

#omfatte

#include #include #include #include

Elegoo_GFX, _TFTLCD og TouchScreen er alle hardware-specifikke. Hvis du bruger en anden skærm, skal du bruge de biblioteker, der leveres af producenten.

SPI og SD bruges til at kommunikere med SD -kortet. SPI er den protokol, der bruges af SD -kortcontrolleren.

#if defineret (_ SAM3X8E _) #undef _FlashStringHelper:: F (string_literal) #define F (string_literal) string_literal #endif

Dette er også hardware-specifikt.

#define YP A3 // skal være en analog pin #definere XM A2 // skal være en analog pin #define YM 9 #define XP 8

// Tryk for ny ILI9341 TP

#definer TS_MINX 120 #definer TS_MAXX 900 #definer TS_MINY 70 #definer TS_MAXY 920

#define CSPIN 10

#definer LCD_CS A3

#definer LCD_CD A2 #definer LCD_WR A1 #definer LCD_RD A0 #definer LCD_RESET A4

Hver af disse #define -sætninger får IDE til at erstatte navnet med værdien. Her indstiller de LCD- og SD I/O -benene.

// Tildel navne til nogle 16-bit farveværdier: #define BLACK 0x0000 #define WHITE 0xFFFF #define RED 0xF800 #define BLUE 0x001F #define GREEN 0x07E0

Dette er et par af de farver, der bruges i koden. #at definere dem gør det lettere at læse koden.

#define PENRADIUS 3

Dette definerer størrelsen på tegnestiften.

#define MINPRESSURE 10#definere MAXPRESSURE 1000

// For bedre trykpræcision skal vi kende modstanden

// mellem X+ og X- Brug et hvilket som helst multimeter til at læse det // For den, jeg bruger, er dens 300 ohm på tværs af X-pladen TouchScreen ts = TouchScreen (XP, YP, XM, YM, 300);

Elegoo_TFTLCD tft (LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

Disse udsagn definerer det tryk, der er nødvendigt for at registrere et tryk, initialisere berøringsfunktionen og starte skærmen.

Filopbevaring; int storageSize; int stoX = 1; int stoY = 1;

Disse er variabler for lagringsdelen af programmet.

void setup (void) {Serial.begin (9600); Serial.println ("Malingsprogram");

tft.reset ();

uint16_t identifier = tft.readID ();

hvis (identifier == 0x0101) {identifier = 0x9341; Serial.println (F ("Fundet 0x9341 LCD -driver")); }

// Start skærmen

tft.begin (identifikator); tft.setRotation (2);

pinMode (13, OUTPUT);

// Start SD -kort

hvis (! SD.begin (CSPIN)) {Serial.println ("SD -initialisering mislykkedes"); Vend tilbage; } Serial.println ("SD initialiseret");

// Tegn baggrunden

drawBackground (); }

Opsætningsfunktionen starter Seriel, hvis den er tilgængelig, nulstiller skærmen, registrerer TFT -driveren, starter skærmen, starter kortet og kalder en funktion for at tegne baggrunden.

Jeg vil springe til hovedparten af loop -funktionen. Alt andet bruges bare til at køre berøringsskærmen.

// Find skærmtryk, og gem det i variabler, hvis (p.z> MINPRESSURE && p.z <MAXPRESSURE) {// Scale p.x = map (p.x, TS_MINX, TS_MAXX, tft.width (), 0); p.y = (tft.height () - map (p.y, TS_MINY, TS_MAXY, tft.height (), 0));

//Tegne

hvis (p.y> 21) {// Gem data på SD -kortlagring = SD.open ("storage.txt", FILE_WRITE); storage.print (s.x); storage.print (","); storage.println (p.y); storage.close ();

// Prik ved berøringspositionen

tft.fillCircle (p.x, p.y, PENRADIUS, WHITE); }

// Slet -knap

hvis ((s. 198) && (s. x <219)) {deleteStorage (); }

// Indlæs knaphandling

hvis ((s. 219)) {loadStorage (); }}

Hvis der registreres et tryk, skal du angive variabler for pressens placering.

Hvis pressen derefter er inden for tegneområdet, skal du gemme punktet på SD -kortet i storage.txt og tegne en cirkel på det sted, der trykkes, med en defineret størrelse og farve.

Hvis der derefter trykkes på stedet for sletteknappen, skal du køre en funktion, der sletter den lagrede tegning. Hvis du bruger en skærm i en anden størrelse, kan du prøve at spille med knappens placeringsværdier.

Hvis trykket er på stedet for indlæsningsknappen, skal du derefter køre en funktion, der indlæser den gemte tegning. Hvis du bruger en skærm i en anden størrelse, kan du prøve at spille med knappens placeringsværdier.

Nu vil jeg forklare funktionerne.

Den første funktion kaldes i opsætningen for at tegne baggrunden og knapperne.

void drawBackground () {// Indstil baggrunden tft.fillScreen (SORT);

// Mal tekst

tft.setTextColor (HVID); tft.setTextSize (3); tft.setCursor (0, 0); tft.println ("Paint");

// Indlæs -knap

tft.fillRect (219, 0, 21, 21, GRØN);

// Ryd knap

tft.fillRect (198, 0, 21, 21, RØD); }

Det fylder skærmen sort, skriver ordet Paint og tegner farvede firkanter til knapperne. Hvis du bruger en skærm i en anden størrelse, kan du prøve at spille med knappens placeringsværdier.

void deleteStorage () {// Slet filen SD.remove ("storage.txt");

// Indstil baggrunden

tft.fillScreen (SORT);

// Slet succestekst

tft.setTextColor (HVID); tft.setTextSize (2); tft.setCursor (0, 0); tft.println ("storage.txt slettet");

// Lad brugeren læse det

forsinkelse (2000);

// Fortsæt med at tegne

drawBackground (); }

DeleteStorage -funktionen fjerner storage.txt, fylder skærmen sort og giver en succesbesked om sletning. Det kalder derefter drawBackground -funktionen, så du kan begynde at male noget andet.

void loadStorage () {// Undgå gentagelser fra langsom fingers forsinkelse (250);

// Kontroller, om der er en lagringsfil

hvis (! SD.exists ("storage.txt")) {Serial.println ("Ingen storage.txt -fil"); Vend tilbage; }

// Åbn fil i skrivebeskyttet tilstand

storage = SD.open ("storage.txt", FILE_READ);

// Mens der er data, mens (stoY> 0) {// Opdater positionsvariabler stoX = storage.parseInt (); stoY = storage.parseInt ();

// Tegn fra opbevaring

tft.fillCircle (stoX, stoY, PENRADIUS, WHITE); } // Luk filen storage.close (); }

Endelig søger loadStorage-funktionen efter en lagringsfil, åbner den i skrivebeskyttet tilstand og gentager derefter denne loop:

Så længe der er flere data,

  1. Opdater positionsvariablerne med de analyserede data fra storage.txt
  2. Tegn en cirkel ved det indlæste punkt

Når sløjfen er færdig, og der ikke er flere data, lukker den lagringsfilen.

Koden til denne skitse kan findes nedenfor. Bare download det, åbn det i Arduino, og upload det til dit bord!

Trin 4: Brug af dette program

Brug af dette program
Brug af dette program

Tilslut bare din Arduino til en strømkilde - computer, batteri, vægvorter osv. Og begynd at tegne. Tryk på den røde knap for at slette din tegning og dens gemte data. Klik på den grønne knap for at indlæse en tegning fra lageret og fortsætte med at arbejde på den. På denne måde kan du gentage mange gange på en tegning!

Som en udvidelse kan du prøve at tegne tegningen på din computer:

  1. Slut SD -kortet med data til din computer.
  2. Åbn storage.txt i din foretrukne tekst/kode editor.
  3. Kopier alle værdierne i storage.txt.
  4. Følg dette link til et punktplanlægningsprogram.
  5. Slet de to eksempelpunkter til venstre.
  6. Indsæt dine data, hvor eksempelpunkterne var.

Dette er en pæn måde at vise dine tegninger frem på - måske endda prøve at ændre punktfarven på Arduino eller i punktplotteren!

Ændringer modtages gerne, og jeg vil meget gerne se nogle forslag i kommentarerne. Tak fordi du kiggede på dette, og jeg håber, at du finder pæne anvendelser til det i dine egne projekter!

Anbefalede: