Taula de continguts:

Programa de dibuix TFT Arduino: 4 passos
Programa de dibuix TFT Arduino: 4 passos

Vídeo: Programa de dibuix TFT Arduino: 4 passos

Vídeo: Programa de dibuix TFT Arduino: 4 passos
Vídeo: Arduino GIGA Display Shield 2024, De novembre
Anonim
Programa de dibuix TFT Arduino
Programa de dibuix TFT Arduino
Programa de dibuix TFT Arduino
Programa de dibuix TFT Arduino
Programa de dibuix TFT Arduino
Programa de dibuix TFT Arduino

En aquest instructiu es detalla el codi que s’utilitza per fer un programa de dibuix per a una pantalla TFT Arduino. Aquest programa és únic, però, perquè permet guardar un dibuix a la targeta SD i carregar-lo més tard per fer-ne més edicions.

Subministraments

  1. Arduino Uno: original o un clon compatible
  2. Pantalla tàctil TFT: he utilitzat una pantalla Elegoo, és a dir, que necessitava conductors Elegoo.
  3. Tauler lector Micro SD: s’utilitza per emmagatzemar dades de dibuix a la targeta SD. La meva pantalla tenia un lector integrat a sota de la pantalla.
  4. Llapis òptic: la meva pantalla va venir amb una. Les ungles també funcionen bé.
  5. Targeta Micro SD: no més de 32 GB, a causa de les limitacions de format exFAT (Arduino pot llegir targetes formatades FAT32 però NO exFAT. La majoria de les targetes més grans es formaten amb exFAT.). Aquest és el tipus que posareu en un telèfon amb emmagatzematge ampliable.
  6. Ordinador amb IDE Arduino
  7. Cable de programació: USB A a USB B. El meu Arduino venia amb un.
  8. Adaptador de targeta SD: s’utilitza per convertir la targeta Micro SD en una SD normal per col·locar-la a la ranura SD O que connecta una targeta SD a una ranura USB.

Pas 1: formatar la targeta SD

Formateu la targeta SD
Formateu la targeta SD
Formateu la targeta SD
Formateu la targeta SD
  1. Agafeu la targeta Micro SD i connecteu-la a l'ordinador mitjançant el lector de targetes SD
  2. Obriu l'Explorador de fitxers i cerqueu la targeta SD.
  3. Feu-hi clic amb el botó dret i seleccioneu Format.
  4. Definiu les opcions segons la captura de pantalla.
  5. Feu clic a Inicia.
  6. Expulseu la targeta quan finalitzi el procés.

Si no esteu executant Windows, proveu d'utilitzar SD Formatter de l'associació SD.

Pas 2: prepareu l'Arduino

Prepareu l’Arduino
Prepareu l’Arduino
Prepareu l’Arduino
Prepareu l’Arduino
  1. Premeu l'escut de la pantalla cap avall cap a l'Arduino, tenint cura de alinear els pins.
  2. Introduïu la targeta SD al lector situat a sota de la pantalla.

Pas 3: Arduino Sketch

Tot i que la llista de peces era bastant senzilla, hi ha un munt de codi. Aquí ho passaré pas a pas.

#incloure

#include #include #include #include

Elegoo_GFX, _TFTLCD i TouchScreen són específics per al maquinari. Si utilitzeu una pantalla diferent, utilitzeu les biblioteques proporcionades pel fabricant.

SPI i SD s’utilitzen per comunicar-se amb la targeta SD. SPI és el protocol utilitzat pel controlador de la targeta SD.

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

Això també és específic del maquinari.

# definir YP A3 // ha de ser un pin analògic # definir XM A2 // ha de ser un pin analògic # definir YM 9 # definir XP 8

// Toca per obtenir un nou ILI9341 TP

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

#defineix CSPIN 10

#define LCD_CS A3

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

Cadascuna d'aquestes declaracions #define fan que l'IDE substitueixi el nom pel valor. Aquí configuren els pins d'E / S LCD i SD.

// Assigneu noms a alguns valors de color de 16 bits: #define BLACK 0x0000 #define WHITE 0xFFFF #define RED 0xF800 #define BLUE 0x001F #define GREEN 0x07E0

Aquests són alguns dels colors que s’utilitzen al codi. # definir-los facilita la lectura del codi.

#define PENRADIUS 3

Això defineix la mida de la ploma de dibuix.

#define MINPRESSURE 10 # define MAXPRESSURE 1000

// Per a una millor precisió de la pressió, hem de conèixer la resistència

// entre X + i X- Feu servir qualsevol multímetre per llegir-lo // Per al que estic fent servir, els seus 300 ohms a la placa X Pantalla tàctil ts = Pantalla tàctil (XP, YP, XM, YM, 300);

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

Aquestes afirmacions defineixen la pressió necessària per registrar un toc, inicialitzar la funció tàctil i iniciar la pantalla.

Emmagatzematge de fitxers; int storageSize; int stoX = 1; int stoY = 1;

Són variables per a la part d'emmagatzematge del programa.

configuració de buit (buit) {Serial.begin (9600); Serial.println ("Programa de pintura");

tft.reset ();

uint16_t identificador = tft.readID ();

if (identificador == 0x0101) {identificador = 0x9341; Serial.println (F ("Controlador LCD 0x9341 trobat")); }

// Inicieu la pantalla

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

pinMode (13, OUTPUT);

// Inicieu la targeta SD

if (! SD.begin (CSPIN)) {Serial.println ("Ha fallat la inicialització SD"); tornar; } Serial.println ("SD inicialitzada");

// Dibuixa el fons

drawBackground (); }

La funció de configuració s'inicia en sèrie si està disponible, restableix la pantalla, detecta el controlador TFT, inicia la pantalla, inicia la targeta i crida a una funció per dibuixar el fons.

Passaré a la part principal de la funció de bucle. La resta només s’utilitza per conduir la pantalla tàctil.

// Detecteu la pantalla i premeu-la a les variables si (p.z> MINPRESSURE && p.z <MAXPRESSURE) {// Escala p.x = mapa (p.x, TS_MINX, TS_MAXX, tft.width (), 0); p.y = (tft.height () - mapa (p.y, TS_MINY, TS_MAXY, tft.height (), 0));

// Dibuixar

if (p.y> 21) {// Desa les dades a l’emmagatzematge de la targeta SD = SD.open ("storage.txt", FILE_WRITE); storage.print (p.x); storage.print (","); storage.println (p.y); storage.close ();

// Punt a la posició tàctil

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

// Botó Suprimeix

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

// Acció del botó de càrrega

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

Si es detecta una premsa, configureu les variables per a la ubicació de la premsa.

A continuació, si la premsa es troba dins de l'àrea de dibuix, deseu el punt a la targeta SD a storage.txt i dibuixeu un cercle en el punt premut, amb una mida i un color definits.

A continuació, si premeu a la ubicació del botó de supressió, executeu una funció que suprimeixi el dibuix emmagatzemat. Si feu servir una pantalla de mides diferents, proveu de jugar amb els valors d'ubicació del botó.

A continuació, si premeu a la ubicació del botó de càrrega, executeu una funció que carregui el dibuix emmagatzemat. Si feu servir una pantalla de mides diferents, proveu de jugar amb els valors d'ubicació del botó.

Ara, explicaré les funcions.

La primera funció es diu a la configuració per dibuixar el fons i els botons.

void drawBackground () {// Estableix el fons tft.fillScreen (NEGRE);

// Pinta text

tft.setTextColor (BLANC); tft.setTextSize (3); tft.setCursor (0, 0); tft.println ("Pintar");

// Botó de càrrega

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

// Botó Esborra

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

Omple la pantalla de negre, escriu la paraula Paint i dibuixa quadrats de colors per als botons. Si feu servir una pantalla de mides diferents, proveu de jugar amb els valors d'ubicació del botó.

void deleteStorage () {// Suprimiu el fitxer SD.remove ("storage.txt");

// Estableix el fons

tft.fillScreen (NEGRE);

// Suprimeix el text correctament

tft.setTextColor (BLANC); tft.setTextSize (2); tft.setCursor (0, 0); tft.println ("storage.txt eliminat");

// Permet que l’usuari el llegeixi

endarreriment (2000);

// Continuar dibuixant

drawBackground (); }

La funció deleteStorage elimina storage.txt, omple la pantalla de negre i proporciona un missatge d’èxit per a la supressió. A continuació, crida a la funció drawBackground per permetre-li començar a pintar una altra cosa.

void loadStorage () {// Eviteu les repeticions de retard lent dels dits (250);

// Comproveu si hi ha fitxer d'emmagatzematge

if (! SD.exists ("storage.txt")) {Serial.println ("No hi ha fitxer storage.txt"); tornar; }

// Obre el fitxer en mode de només lectura

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

// Mentre hi ha dades, while (stoY> 0) {// Actualitza les variables de posició stoX = storage.parseInt (); stoY = storage.parseInt ();

// Dibuixa des de l’emmagatzematge

tft.fillCircle (stoX, stoY, PENRADIUS, BLANC); } // Tanca el fitxer storage.close (); }

Finalment, la funció loadStorage comprova si hi ha un fitxer d’emmagatzematge, l’obre en mode de només lectura i després repeteix aquest bucle:

Mentre hi hagi més dades,

  1. Actualitzeu les variables de posició amb les dades analitzades des de storage.txt
  2. Dibuixa un cercle en el punt carregat

Quan es completa el bucle i ja no hi ha dades, es tanca el fitxer d'emmagatzematge.

El codi d’aquest esbós es pot trobar a continuació. Només heu de descarregar-lo, obrir-lo a Arduino i carregar-lo al vostre tauler.

Pas 4: utilitzar aquest programa

Utilitzant aquest programa
Utilitzant aquest programa

Només cal que connecteu l’Arduino a una font d’alimentació: ordinador, bateria, berruga de la paret, etc. i comenceu a dibuixar. Per esborrar el dibuix i les dades emmagatzemades, premeu el botó vermell. Per carregar un dibuix des de l’emmagatzematge i continuar treballant-hi, feu clic al botó verd. D’aquesta manera, podeu repetir moltes vegades un dibuix.

Com a extensió, proveu de dibuixar el dibuix a l'ordinador:

  1. Connecteu la targeta SD amb dades a l'ordinador.
  2. Obriu storage.txt al vostre editor de text / codi preferit.
  3. Copieu tots els valors de storage.txt.
  4. Seguiu aquest enllaç a un programa de traçat de punts.
  5. Suprimiu els dos punts d'exemple de l'esquerra.
  6. Enganxeu les dades on es trobaven els punts d'exemple.

Aquesta és una manera ordenada de mostrar els vostres dibuixos; potser fins i tot proveu de canviar el color del punt a l'Arduino o al traçador de punts.

Les modificacions són ben rebudes i m’agradaria veure alguns suggeriments als comentaris. Gràcies per fer una ullada a això i espero que hi trobeu uns usos adequats en els vostres propis projectes.

Recomanat: