Cuprins:

Program de desen Arduino TFT: 4 pași
Program de desen Arduino TFT: 4 pași
Anonim
Program de desen Arduino TFT
Program de desen Arduino TFT
Programul de desen Arduino TFT
Programul de desen Arduino TFT
Program de desen Arduino TFT
Program de desen Arduino TFT

Această instrucțiune detaliază codul care intră în realizarea unui program de desen pentru un ecran TFT Arduino. Cu toate acestea, acest program este unic, deoarece permite salvarea unui desen pe cardul SD și încărcarea acestuia mai târziu pentru a face mai multe editări!

Provizii

  1. Arduino Uno - original sau o clonă compatibilă
  2. Ecran tactil TFT - am folosit un ecran Elegoo, adică aveam nevoie de drivere Elegoo.
  3. Placă de citire Micro SD - utilizată pentru stocarea datelor de desen pe cardul SD. Ecranul meu avea un cititor încorporat sub afișaj.
  4. Stylus - ecranul meu a venit cu unul. Unghiile funcționează și ele bine.
  5. Card Micro SD - nu mai mult de 32 GB, din cauza limitărilor de formatare exFAT (Arduino poate citi carduri formatate FAT32, dar NU exFAT. Majoritatea cardurilor mai mari sunt formatate cu exFAT.). Acesta este genul pe care l-ați pune într-un telefon cu spațiu de stocare extensibil.
  6. Computer cu Arduino IDE
  7. Cablu de programare - USB A la USB B. Arduino a venit cu unul.
  8. Adaptor pentru card SD - folosit pentru a converti cardul Micro SD într-un SD normal pentru a fi introdus în slotul SD SAU unul care conectează un card SD la un slot USB.

Pasul 1: Formatați cardul SD

Formatați cardul SD
Formatați cardul SD
Formatați cardul SD
Formatați cardul SD
  1. Luați cardul Micro SD și atașați-l la computer utilizând cititorul de card SD
  2. Deschideți File Explorer și găsiți cardul SD.
  3. Faceți clic dreapta pe el și selectați Format.
  4. Setați opțiunile pe baza capturii de ecran.
  5. Faceți clic pe Start.
  6. Scoateți cardul când procesul este finalizat.

Dacă nu rulați Windows, încercați să utilizați SD Formatter din asociația SD.

Pasul 2: Pregătiți Arduino

Pregătește Arduino
Pregătește Arduino
Pregătește Arduino
Pregătește Arduino
  1. Apăsați ecranul ecranului în jos pe Arduino, având grijă să aliniați pinii.
  2. Introduceți cardul SD în cititorul de sub ecran.

Pasul 3: Arduino Sketch

Deși lista pieselor a fost destul de simplă, există o tonă de cod. O voi parcurge pas cu pas aici.

#include

#include #include #include #include

Elegoo_GFX, _TFTLCD și TouchScreen sunt toate specifice hardware-ului. Dacă utilizați un ecran diferit, utilizați bibliotecile furnizate de producător.

SPI și SD sunt utilizate pentru a comunica cu cardul SD. SPI este protocolul utilizat de controlerul cardului SD.

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

Acest lucru este, de asemenea, specific hardware-ului.

#define YP A3 // trebuie să fie un pin analogic # define XM A2 // trebuie să fie un pin analogic #define YM 9 #define XP 8

// Atingeți pentru noul ILI9341 TP

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

#define CSPIN 10

#define LCD_CS A3

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

Fiecare dintre aceste declarații #define determină IDE să înlocuiască numele cu valoarea. Aici, au setat pinii I / O LCD și SD.

// Atribuie nume unor valori de culoare pe 16 biți: #define BLACK 0x0000 #define WHITE 0xFFFF #define RED 0xF800 #define BLUE 0x001F #define GREEN 0x07E0

Acestea sunt câteva dintre culorile utilizate în cod. # definirea acestora facilitează citirea codului.

#define PENRADIUS 3

Aceasta definește dimensiunea stiloului de desen.

#define MINPRESSURE 10 # define MAXPRESSURE 1000

// Pentru o mai bună precizie a presiunii, trebuie să cunoaștem rezistența

// între X + și X- Folosiți orice multimetru pentru ao citi // Pentru cel pe care îl folosesc, 300 de ohmi pe placa X TouchScreen ts = TouchScreen (XP, YP, XM, YM, 300);

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

Aceste afirmații definesc presiunea necesară pentru a înregistra o atingere, pentru a inițializa funcția tactilă și pentru a porni ecranul.

Stocare fișiere; stocare int Dimensiune; int stoX = 1; int stoY = 1;

Acestea sunt variabile pentru partea de stocare a programului.

configurare nulă (nulă) {Serial.begin (9600); Serial.println („Programul Paint”);

tft.reset ();

uint16_t identificator = tft.readID ();

if (identificator == 0x0101) {identificator = 0x9341; Serial.println (F ("Driver LCD 0x9341 găsit")); }

// Porniți ecranul

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

pinMode (13, OUTPUT);

// Porniți cardul SD

if (! SD.begin (CSPIN)) {Serial.println ("Initializarea SD a eșuat"); întoarcere; } Serial.println ("SD inițializat");

// Desenați fundalul

drawBackground (); }

Funcția de configurare pornește Serial dacă este disponibilă, resetează ecranul, detectează driverul TFT, pornește ecranul, pornește cardul și apelează o funcție pentru a desena fundalul.

Voi trece la cea mai mare parte a funcției de buclă. Orice altceva este folosit doar pentru a conduce ecranul tactil.

// Detectați ecranul apăsați și stocați-l în variabile dacă (p.z> MINPRESSURE && p.z <MAXPRESSURE) {// Scară p.x = hartă (p.x, TS_MINX, TS_MAXX, tft.width (), 0); p.y = (tft.height () - hartă (p.y, TS_MINY, TS_MAXY, tft.height (), 0));

//A desena

if (p.y> 21) {// Salvați datele în stocarea cardului SD = SD.open („storage.txt”, FILE_WRITE); storage.print (p.x); storage.print (","); storage.println (p.y); storage.close ();

// Punctați la poziția tactilă

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

// Butonul Șterge

if ((p.y 198) && (p.x <219)) {deleteStorage (); }

// Încărcați acțiunea butonului

if ((p.y 219)) {loadStorage (); }}

Dacă este detectată o presă, setați variabile pentru locația presei.

Apoi, dacă presa se află în zona de desen, salvați punctul pe cardul SD în storage.txt și desenați un cerc în punctul apăsat, cu o dimensiune și culoare definite.

Apoi, dacă presa se află în locația butonului de ștergere, rulați o funcție care șterge desenul stocat. Dacă utilizați un ecran de dimensiuni diferite, încercați să jucați cu valorile locației butonului.

Apoi, dacă presa se află în locația butonului de încărcare, rulați o funcție care încarcă desenul stocat. Dacă utilizați un ecran de dimensiuni diferite, încercați să jucați cu valorile locației butonului.

Acum, voi explica funcțiile.

Prima funcție este apelată în configurare pentru a desena fundalul și butoanele.

void drawBackground () {// Setați fundalul tft.fillScreen (NEGRU);

// Pictează text

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

// Butonul de încărcare

tft.fillRect (219, 0, 21, 21, VERDE);

// Butonul Șterge

tft.fillRect (198, 0, 21, 21, RED); }

Umple ecranul în negru, scrie cuvântul Paint și desenează pătrate colorate pentru butoane. Dacă utilizați un ecran de dimensiuni diferite, încercați să jucați cu valorile locației butonului.

void deleteStorage () {// Ștergeți fișierul SD.remove ("storage.txt");

// Setați fundalul

tft.fillScreen (NEGRU);

// Ștergeți textul de succes

tft.setTextColor (ALB); tft.setTextSize (2); tft.setCursor (0, 0); tft.println („storage.txt șters”);

// Lasă-l pe utilizator să-l citească

întârziere (2000);

// Continuați desenul

drawBackground (); }

Funcția deleteStorage elimină storage.txt, umple ecranul în negru și oferă un mesaj de succes pentru ștergere. Apelează apoi funcția drawBackground pentru a vă permite să începeți să pictați altceva.

void loadStorage () {// Evitați repetările de la întârzierea lentă a degetelor (250);

// Verificați dacă există fișier de stocare

if (! SD.exists ("storage.txt")) {Serial.println ("Fără fișier storage.txt"); întoarcere; }

// Deschideți fișierul în modul numai citire

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

// În timp ce există date, while (stoY> 0) {// Actualizați variabilele de poziție stoX = storage.parseInt (); stoY = storage.parseInt ();

// Desenați din stocare

tft.fillCircle (stoX, stoY, PENRADIUS, WHITE); } // Închideți fișierul storage.close (); }

În cele din urmă, funcția loadStorage verifică dacă există un fișier de stocare, îl deschide în modul numai citire, apoi repetă această buclă:

Atâta timp cât există mai multe date,

  1. Actualizați variabilele de poziție cu datele analizate din storage.txt
  2. Desenați un cerc în punctul încărcat

Când bucla se finalizează și nu mai există date, aceasta închide fișierul de stocare.

Codul pentru această schiță poate fi găsit mai jos. Doar descărcați-l, deschideți-l în Arduino și încărcați-l pe tablă!

Pasul 4: Utilizarea acestui program

Folosind acest program
Folosind acest program

Conectați-vă Arduino la o sursă de alimentare - computer, baterie, neg negru etc. și începeți să desenați. Pentru a șterge desenul și datele stocate, apăsați butonul roșu. Pentru a încărca un desen din stocare și a continua să lucrați la el, faceți clic pe butonul verde. În acest fel, puteți itera de multe ori pe un desen!

Ca extensie, încercați să plasați desenul pe computer:

  1. Conectați cardul SD cu date la computer.
  2. Deschideți storage.txt în editorul de text / cod preferat.
  3. Copiați toate valorile din storage.txt.
  4. Urmați acest link către un program de punctare a punctelor.
  5. Ștergeți cele două puncte de exemplu din stânga.
  6. Inserați datele unde au fost punctele de exemplu.

Acesta este un mod îngrijit de a vă arăta desenele - poate chiar încercați să schimbați culoarea punctelor pe Arduino sau în plotterul de puncte!

Modificările sunt binevenite și mi-ar plăcea să văd câteva sugestii în comentarii. Vă mulțumim că ați aruncat o privire la acest lucru și sper că veți găsi utilizări îngrijite pentru acesta în propriile dvs. proiecte!

Recomandat: