Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-23 15:04
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
- Arduino Uno - original sau o clonă compatibilă
- Ecran tactil TFT - am folosit un ecran Elegoo, adică aveam nevoie de drivere Elegoo.
- Placă de citire Micro SD - utilizată pentru stocarea datelor de desen pe cardul SD. Ecranul meu avea un cititor încorporat sub afișaj.
- Stylus - ecranul meu a venit cu unul. Unghiile funcționează și ele bine.
- 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.
- Computer cu Arduino IDE
- Cablu de programare - USB A la USB B. Arduino a venit cu unul.
- 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
- Luați cardul Micro SD și atașați-l la computer utilizând cititorul de card SD
- Deschideți File Explorer și găsiți cardul SD.
- Faceți clic dreapta pe el și selectați Format.
- Setați opțiunile pe baza capturii de ecran.
- Faceți clic pe Start.
- 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
- Apăsați ecranul ecranului în jos pe Arduino, având grijă să aliniați pinii.
- 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,
- Actualizați variabilele de poziție cu datele analizate din storage.txt
- 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
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:
- Conectați cardul SD cu date la computer.
- Deschideți storage.txt în editorul de text / cod preferat.
- Copiați toate valorile din storage.txt.
- Urmați acest link către un program de punctare a punctelor.
- Ștergeți cele două puncte de exemplu din stânga.
- 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:
5 în 1 Arduino Robot - Urmează-mă - Urmărirea liniei - Sumo - Desen - Evitarea obstacolelor: 6 pași
5 în 1 Arduino Robot | Urmează-mă | Urmărirea liniei | Sumo | Desen | Evitarea obstacolelor: Această placă de control a robotului conține un microcontroler ATmega328P și un driver de motor L293D. Desigur, nu diferă de placa Arduino Uno, dar este mai utilă, deoarece nu are nevoie de un alt scut pentru a acționa motorul! Este liber de salt
Utilizarea unui robot de desen pentru Arduino cu tutoriale de oră de cod: 3 pași
Utilizarea unui robot de desen pentru Arduino cu ore de cod Tutoriale: Am creat un robot de desen Arduino pentru un atelier pentru a ajuta fetele adolescente să se intereseze de subiectele STEM (consultați https://www.instructables.com/id/Arduino-Drawing-Robot/ ). Robotul a fost conceput pentru a utiliza comenzi de programare în stil Turtle, cum ar fi forward (distanța
Robot de desen pentru Arduino: 18 pași (cu imagini)
Desenarea robotului pentru Arduino: Notă: Am o nouă versiune a acestui robot care folosește o placă cu circuite imprimate, este mai ușor de construit și are detectarea IR a obstacolelor! Verificați-l la http://bit.ly/OSTurtle Am proiectat acest proiect pentru un atelier de 10 ore pentru ChickTech.org al cărui scop este să
Plotter CNC Arduino (MAȘINĂ DE DESEN): 10 pași (cu imagini)
Plotter CNC Arduino (MASINA DE DESEN): Hei baieti! Sper că ți-a plăcut deja instructabilul meu „Cum să-ți faci propria platformă de antrenament Arduino” și sunteți gata pentru unul nou, ca de obicei, am făcut acest tutorial pentru a vă ghida pas cu pas în timp ce fac acest gen de super uimitor
Robot de desen ieftin, compatibil Arduino: 15 pași (cu imagini)
Robot de desen low-cost, compatibil Arduino: Notă: Am o nouă versiune a acestui robot care folosește o placă cu circuite imprimate, este mai ușor de construit și are detecție IR a obstacolelor! Verificați-l la http://bit.ly/OSTurtle Am proiectat acest proiect pentru un atelier de 10 ore pentru ChickTech.org al cărui scop este să