Tabla de contenido:

Programa de dibujo Arduino TFT: 4 pasos
Programa de dibujo Arduino TFT: 4 pasos

Video: Programa de dibujo Arduino TFT: 4 pasos

Video: Programa de dibujo Arduino TFT: 4 pasos
Video: Tutorial Pantalla LCD táctil ILI9341 240x320 con Arduino y ESP32 (XPT2046) 2024, Noviembre
Anonim
Programa de dibujo Arduino TFT
Programa de dibujo Arduino TFT
Programa de dibujo Arduino TFT
Programa de dibujo Arduino TFT
Programa de dibujo Arduino TFT
Programa de dibujo Arduino TFT

Este instructable detalla el código que se utiliza para hacer un programa de dibujo para una pantalla Arduino TFT. Sin embargo, este programa es único porque permite guardar un dibujo en la tarjeta SD y cargarlo más tarde para realizar más ediciones.

Suministros

  1. Arduino Uno: clon original o compatible
  2. Pantalla táctil TFT: utilicé una pantalla Elegoo, lo que significa que necesitaba controladores Elegoo.
  3. Placa lectora micro SD: se utiliza para almacenar datos de dibujo en la tarjeta SD. Mi pantalla tenía un lector integrado debajo de la pantalla.
  4. Stylus - mi pantalla vino con uno. Las uñas también funcionan bien.
  5. Tarjeta Micro SD: no más de 32 GB, debido a limitaciones de formato exFAT (el Arduino puede leer tarjetas formateadas FAT32 pero NO exFAT. La mayoría de las tarjetas más grandes están formateadas con exFAT). Este es el tipo que colocaría en un teléfono con almacenamiento expandible.
  6. Computadora con Arduino IDE
  7. Cable de programación - USB A a USB B. Mi Arduino vino con uno.
  8. Adaptador de tarjeta SD: se utiliza para convertir la tarjeta Micro SD en una SD normal para colocar en la ranura SD O una que conecta una tarjeta SD a una ranura USB.

Paso 1: formatee la tarjeta SD

Formatear la tarjeta SD
Formatear la tarjeta SD
Formatear la tarjeta SD
Formatear la tarjeta SD
  1. Tome la tarjeta Micro SD y conéctela a su computadora usando su lector de tarjetas SD
  2. Abra el Explorador de archivos y busque la tarjeta SD.
  3. Haga clic con el botón derecho y seleccione Formato.
  4. Configure las opciones según la captura de pantalla.
  5. Haga clic en Inicio.
  6. Expulsa la tarjeta cuando se complete el proceso.

Si no está ejecutando Windows, intente usar SD Formatter de la asociación SD.

Paso 2: prepara el Arduino

Prepara el Arduino
Prepara el Arduino
Prepara el Arduino
Prepara el Arduino
  1. Presione el protector de pantalla hacia abajo sobre el Arduino, teniendo cuidado de alinear los pines.
  2. Inserte la tarjeta SD en el lector debajo de la pantalla.

Paso 3: Boceto de Arduino

Aunque la lista de piezas es bastante simple, hay un montón de código. Lo revisaré paso a paso aquí.

#incluir

#incluir #incluir #incluir #incluir

Elegoo_GFX, _TFTLCD y TouchScreen son todos específicos del hardware. Si usa una pantalla diferente, use las bibliotecas proporcionadas por el fabricante.

SPI y SD se utilizan para comunicarse con la tarjeta SD. SPI es el protocolo utilizado por el controlador de la tarjeta SD.

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

Esto también es específico del hardware.

#define YP A3 // debe ser un pin analógico # define XM A2 // debe ser un pin analógico #define YM 9 #define XP 8

// Toque para nuevo 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

Cada una de estas declaraciones #define hace que el IDE reemplace el nombre por el valor. Aquí, configuraron los pines de E / S de LCD y SD.

// Asignar nombres a algunos valores de color de 16 bits: #define BLACK 0x0000 #define WHITE 0xFFFF #define RED 0xF800 #define BLUE 0x001F #define GREEN 0x07E0

Estos son algunos de los colores utilizados en el código. # definirlos facilita la lectura del código.

#define PENRADIUS 3

Esto define el tamaño del lápiz de dibujo.

#define MINPRESSURE 10 # defina MAXPRESSURE 1000

// Para una mejor precisión de la presión, necesitamos conocer la resistencia

// entre X + y X- Use cualquier multímetro para leerlo // Para el que estoy usando, sus 300 ohmios en la placa X TouchScreen ts = TouchScreen (XP, YP, XM, YM, 300);

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

Estas declaraciones definen la presión necesaria para registrar un toque, inicializar la función táctil e iniciar la pantalla.

Almacenamiento de archivos, int storageSize; int stoX = 1; int stoY = 1;

Estas son variables para la parte de almacenamiento del programa.

configuración vacía (void) {Serial.begin (9600); Serial.println ("Programa de pintura");

tft.reset ();

uint16_t identificador = tft.readID ();

if (identificador == 0x0101) {identificador = 0x9341; Serial.println (F ("Se encontró el controlador LCD 0x9341")); }

// Iniciar la pantalla

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

pinMode (13, SALIDA);

// Iniciar tarjeta SD

if (! SD.begin (CSPIN)) {Serial.println ("Error al inicializar SD"); regreso; } Serial.println ("SD inicializado");

// Dibuja el fondo

drawBackground (); }

La función de configuración inicia Serial si está disponible, restablece la pantalla, detecta el controlador TFT, inicia la pantalla, inicia la tarjeta y llama a una función para dibujar el fondo.

Saltaré a la parte principal de la función de bucle. Todo lo demás se usa para manejar la pantalla táctil.

// Detectar pantalla presionar y almacenar en variables if (p.z> MINPRESSURE && p.z <MAXPRESSURE) {// Scale p.x = map (p.x, TS_MINX, TS_MAXX, tft.width (), 0); p.y = (tft.height () - mapa (p.y, TS_MINY, TS_MAXY, tft.height (), 0));

//Dibujar

if (p.y> 21) {// Guardar datos en el almacenamiento de la tarjeta SD = SD.open ("storage.txt", FILE_WRITE); almacenamiento.impresión (p.x); almacenamiento.impresión (","); storage.println (p.y); storage.close ();

// Punto en la posición táctil

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

// Botón Eliminar

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

// Cargar acción del botón

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

Si se detecta una prensa, establezca variables para la ubicación de la prensa.

Luego, si la prensa está dentro del área de dibujo, guarde el punto en la tarjeta SD en storage.txt y dibuje un círculo en el punto presionado, con un tamaño y color definidos.

Luego, si la prensa está en la ubicación del botón Eliminar, ejecute una función que elimine el dibujo almacenado. Si está utilizando una pantalla de diferente tamaño, intente jugar con los valores de ubicación de los botones.

Luego, si la prensa está en la ubicación del botón de carga, ejecute una función que cargue el dibujo almacenado. Si está utilizando una pantalla de diferente tamaño, intente jugar con los valores de ubicación de los botones.

Ahora, explicaré las funciones.

La primera función se llama en la configuración para dibujar el fondo y los botones.

void drawBackground () {// Establecer el fondo tft.fillScreen (BLACK);

// Pintar texto

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

// Botón de carga

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

// Botón de borrar

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

Llena la pantalla de negro, escribe la palabra Paint y dibuja cuadrados de colores para los botones. Si está utilizando una pantalla de diferente tamaño, intente jugar con los valores de ubicación de los botones.

void deleteStorage () {// Elimina el archivo SD.remove ("storage.txt");

// Establecer el fondo

tft.fillScreen (NEGRO);

// Eliminar texto de éxito

tft.setTextColor (BLANCO); tft.setTextSize (2); tft.setCursor (0, 0); tft.println ("almacenamiento.txt eliminado");

// Deja que el usuario lo lea

retraso (2000);

// Continuar dibujando

drawBackground (); }

La función deleteStorage elimina el archivo storage.txt, llena la pantalla en negro y da un mensaje de éxito para la eliminación. Luego llama a la función drawBackground para permitirle comenzar a pintar otra cosa.

void loadStorage () {// Evita las repeticiones de los dedos lentos delay (250);

// Verificar el archivo de almacenamiento

if (! SD.exists ("storage.txt")) {Serial.println ("Sin archivo storage.txt"); regreso; }

// Abrir archivo en modo de solo lectura

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

// Mientras haya datos, while (stoY> 0) {// Actualizar las variables de posición stoX = storage.parseInt (); stoY = almacenamiento.parseInt ();

// Extraer del almacenamiento

tft.fillCircle (stoX, stoY, PENRADIUS, BLANCO); } // Cierre el archivo storage.close (); }

Finalmente, la función loadStorage busca un archivo de almacenamiento, lo abre en modo de solo lectura y luego repite este ciclo:

Mientras haya más datos,

  1. Actualice las variables de posición con los datos analizados de storage.txt
  2. Dibuja un círculo en el punto cargado

Cuando el ciclo se completa y no hay más datos, cierra el archivo de almacenamiento.

El código de este boceto se puede encontrar a continuación. ¡Simplemente descárguelo, ábralo en Arduino y cárguelo en su placa!

Paso 4: uso de este programa

Usando este programa
Usando este programa

Simplemente conecte su Arduino a una fuente de alimentación: computadora, batería, verruga de pared, etc. y comience a dibujar. Para borrar su dibujo y sus datos almacenados, presione el botón rojo. Para cargar un dibujo desde el almacenamiento y continuar trabajando en él, haga clic en el botón verde. ¡De esta manera, puede iterar muchas veces en un dibujo!

Como extensión, intente trazar el dibujo en su computadora:

  1. Conecte la tarjeta SD con datos a su computadora.
  2. Abra storage.txt en su editor de texto / código favorito.
  3. Copie todos los valores en storage.txt.
  4. Siga este enlace a un programa de trazado de puntos.
  5. Elimine los dos puntos de ejemplo de la izquierda.
  6. Pegue sus datos donde estaban los puntos de ejemplo.

Esta es una buena manera de mostrar sus dibujos, ¡tal vez incluso intente cambiar el color del punto en el Arduino o en el trazador de puntos!

Se agradecen las modificaciones y me encantaría ver algunas sugerencias en los comentarios. ¡Gracias por echarle un vistazo a esto y espero que le encuentres buenos usos en tus propios proyectos!

Recomendado: