G044 Displays TFT de 1,8”.

Descripción
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.

Es el caso de los displays TFT que empezaron a venderse, en distintos tamaños, para los teléfonos móviles y que han acabado popularizándose como displays en color y  de pequeño tamaño.
 

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.

Montaje

Código
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