Descripción
Casi cualquier proyecto tendrá la necesidad de mostrar información al usuario exterior, y para ello se necesita alguna forma de display.
Casi cualquier proyecto tendrá la necesidad de mostrar información al usuario exterior, y para ello se necesita alguna forma de display.
Hay algunas de las opciones disponibles en el mercado más accesibles para alguien que empieza en Arduino y la electrónica.
Naturalmente, el mercado ofrece un sinfín de posibilidades de displays cuya capacidades y grados de sofisticación son crecientes y conllevan un cierto grado también de complejidad.
Ya hay disponible displays de buenas prestaciones y precios bajos que incorporan algún tipo de bus de control para simplificar su acceso.
Veamos como conectar a Arduino un modelo de 1,8” en color con interface SPI, que son relativamente sencillos de encontrar muy baratos.
Son unos displays magníficos que permite manejar texto y gráficos a color con muy poco esfuerzo, aunque resolución, es baja 128 x 160 puntos en pantalla.
Materiales
Placa de Arduino
5 Resistencias de 1K
1 Display TFT 1,8" con BUS SPI
Protoboard, Cables para conexiones y un cable USB para conectar Arduino al PC y sirve además de alimentación
Esquema
La conexión es muy sencilla tal y como se ve en el esquema. El pin del display, rotulado como BL o Back Light, y se usa para encender la luz de fondo del display y hace que pueda verse lo que hay en pantalla. Yo lo he conectado a 5V directamente, pero se puede usar un pin de Arduino para encenderla y apagarla a voluntad.
La conexión es muy sencilla tal y como se ve en el esquema. El pin del display, rotulado como BL o Back Light, y se usa para encender la luz de fondo del display y hace que pueda verse lo que hay en pantalla. Yo lo he conectado a 5V directamente, pero se puede usar un pin de Arduino para encenderla y apagarla a voluntad.
1ª Linea
Activa la comunicación SPI (hardware del Arduino para hablar con la pantalla)
No tiene parámetros, solo se incluye
#include <SPI.h>
2ª Línea
Librería base de gráficos (texto, formas, colores)
No se modifica normalmente.
#include <Adafruit_GFX.h>
3ª Línea
Driver específico para pantallas ST7735
Aquí se define el controlador de la pantalla TFT.
#include <Adafruit_ST7735.h>
4ª Línea
Pin Chip Select (CS)
Activa/desactiva la pantalla en el bus SPI.
Puedes cambiarlo a cualquier pin digital libre.
#define TFT_CS 9
5ª Línea
Data/Command (DC o RS)
Indica si lo que envías es dato o comando.También configurable a otro pin digital.
#define TFT_DC 8
6ª Línea
Reset de la pantalla
Reinicia el controlador TFT.
Se puede conectar a RESET del Arduino o a otro pin.
#define TFT_RST 7
7ª Línea
Crea el objeto pantalla TFT
Parámetros:
CS → selección del chip
DC → datos/comandos
RST → reset del display
Si RST es -1 significa que está conectado al RESET del Arduino.
Adafruit_ST7735 tft(TFT_CS, TFT_DC, TFT_RST);
8ª Línea
Declaración de función personalizada
const char* → texto en memoria (cadena)
uint16_t → color en formato 16 bits RGB565
Adafruit_ST7735 tft(TFT_CS, TFT_DC, TFT_RST);
9ª Línea
Función setup inicializa todos los parámetros en el momento que
se enciende arduino
void setup(){
10ª Línea
Inicializa la pantalla ST7735
INITR_BLACKTAB es el tipo de pantalla (configuración interna)
Otros valores posibles:
INITR_GREENTAB
INITR_REDTAB
Depende del modelo físico del display
tft.initR(INITR_BLACKTAB);
11ª Línea
Rotación de la pantalla:
0 = vertical normal (128x160)
1 = horizontal (160x128)
2 = vertical invertida
3 = horizontal invertida
tft.setRotation(1);
12ª Línea
Rellena toda la pantalla con un color sólido
Puedes usar:
ST77XX_BLACK, WHITE, RED, GREEN, BLUE, YELLOW, CYAN, MAGENTA
tft.fillScreen(ST77XX_GREEN);
13ª Línea
Dibuja un rectángulo sólido
Parámetros:
(x, y, ancho, alto, color)
x,y → esquina superior izquierda
ancho → en píxeles
alto → en píxeles
color→ ST77XX_BLACK, WHITE, RED, GREEN, BLUE, YELLOW, CYAN, MAGENTA
tft.fillRect(0, 16, 160, 18, ST77XX_WHITE);
14ª Línea
Llama a función que imprime texto
\n = salto de línea
Segundo parámetro = color del texto
testdrawtext(
"Mago Miguelon\n"
"El Mago de la Electronica\n"
"Pantalla ok\n"
"El Mago Andaluz.\n",
ST77XX_BLACK
);
15ª Línea
Otro rectángulo igual que el anterior pero en otra posición y otro color
tft.fillRect(0, 100, 160, 60, ST77XX_MAGENTA);
16ª Línea
Posición del cursor de texto
(x, y) en píxeles
Todo lo que se imprima va desde aquí
tft.setCursor(10, 50);
17ª Línea
Color del texto
Puede llevar segundo parámetro opcional:
tft.setTextColor(color, fondo)
si quieres fondo sólido detrás del texto
tft.setTextColor(ST77XX_BLUE);
18ª Línea
Tamaño del texto:
1 = normal
2 = doble
3 = triple, etc.
tft.setTextSize(1);
19ª Línea
Imprime texto en pantalla en la posición del cursor
tft.print("Display SPI de 1.8\"");
Llave de cierre de la función setup()
}
20ª Línea
void loop()
Vacío: no se ejecuta nada continuamente
void loop(){
Llave de cierre de la función loop()
}
21ª Línea
Función personalizada que formatea el texto que se va a imprimir
void testdrawtext(const char *text, uint16_t color){
22ª Línea
Reinicia posición del texto arriba a la izquierda
tft.setCursor(0, 0);
23ª Línea
Aplica color recibido como parámetro
tft.setTextColor(color);
24ª Línea
Si el texto llega al borde, salta automáticamente a la siguiente línea
tft.setTextWrap(true);
25ª Línea
Imprime toda la cadena recibida
tft.print(text);
26ª Línea
Llave de cierre de la función personalizada
}
Aquí te dejo el código completo
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#define TFT_CS 9
#define TFT_DC 8
#define TFT_RST 7
Adafruit_ST7735 tft(TFT_CS, TFT_DC, TFT_RST);
void testdrawtext(const char *text, uint16_t color);
void setup(){
tft.initR(INITR_BLACKTAB);
tft.setRotation(1);
tft.fillScreen(ST77XX_GREEN);
tft.fillRect(0, 16, 160, 18, ST77XX_WHITE);
testdrawtext(
"Mago Miguelon\n"
"El Mago de la Electronica\n"
"Pantalla ok\n"
"El Mago Andaluz.\n",
ST77XX_BLACK
);
tft.fillRect(0, 100, 160, 60, ST77XX_MAGENTA);
tft.setCursor(10, 50);
tft.setTextColor(ST77XX_BLUE);
tft.setTextSize(1);
tft.print("Display SPI de 1.8\"");
}
void loop(){
}
void testdrawtext(const char *text, uint16_t color){
tft.setCursor(0, 0);
tft.setTextColor(color);
tft.setTextWrap(true);
tft.print(text);
}
No hay comentarios:
Publicar un comentario