/*
 * Este programa utiliza una pantalla TTGO con el chip controlador ST7735 y un microcontrolador ESP32.
 * El programa realiza las siguientes acciones:
 * - Inicializa la pantalla y la configura.
 * - Cada segundo, selecciona un color aleatorio (rojo, azul o verde) y dibuja un círculo en la pantalla con ese color.
 * - Muestra el texto "Hello" en el centro de la pantalla con el mismo color del círculo.
 * El programa repite estas acciones en un bucle infinito, actualizando el círculo y el texto cada segundo.
 */

#include <TFT_eSPI.h> // Incluye la librería para gráficos y fuentes para el chip controlador ST7735
#include <SPI.h> // Incluye la librería para la interfaz SPI

TFT_eSPI tft = TFT_eSPI();  // Crea un objeto de la clase TFT_eSPI, los pines están definidos en User_Setup.h

uint32_t targetTime = 0;  // Variable para el tiempo objetivo del siguiente timeout de 1 segundo

uint16_t colors[3] = {TFT_RED, TFT_BLUE, TFT_GREEN};  // Arreglo que contiene tres colores: rojo, azul y verde

uint8_t sel;  // Variable para seleccionar un color aleatorio del arreglo

void setup(void) {  // Función de configuración que se ejecuta una vez al inicio
  tft.init();  // Inicializa la pantalla
  tft.setRotation(1);  // Establece la orientación de la pantalla
  tft.fillScreen(TFT_BLACK);  // Llena la pantalla con el color negro

  tft.setTextColor(TFT_YELLOW, TFT_BLACK); // Establece el color del texto en amarillo con fondo negro

  targetTime = millis() + 1000;  // Establece el tiempo objetivo al tiempo actual más 1 segundo (1000 ms)
}

void loop() {  // Función principal que se ejecuta en bucle continuamente
  if (targetTime < millis()) {  // Comprueba si ha pasado 1 segundo
    targetTime = millis() + 1000;  // Actualiza el tiempo objetivo al tiempo actual más 1 segundo
    sel = random(3);  // Selecciona un número aleatorio entre 0 y 2
    tft.fillCircle(120, 120, 40, colors[sel]);  // Dibuja un círculo en la posición (120, 120) con radio 40 y un color aleatorio del arreglo
    tft.setTextColor(colors[sel], TFT_BLACK);  // Establece el color del texto al mismo color aleatorio del círculo con fondo negro
    tft.drawCentreString("Hello", 115, 180, 4); // Dibuja el texto "Hello" centrado en la posición (115, 180) con fuente de tamaño 4
  }
}