#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h> // Usamos ILI9341 en Wokwi para simular el área de 135x240
#include "logos.h"
// =========================================================================
// CORRECCIÓN COINCIDENTE CON TU DIAGRAM.JSON (PANTALLA)
// =========================================================================
#define TFT_CS 5 // [lcd1:CS -> esp:5] ¡CORREGIDO!
#define TFT_DC 4 // [lcd1:D/C -> esp:4] ¡CORREGIDO!
#define TFT_RST 2 // [lcd1:RST -> esp:2] ¡CORREGIDO!
// Los pines de hardware SPI (MOSI 23 y SCK 18) coinciden perfectamente en tu JSON
#define TFT_MOSI 23
#define TFT_SCK 18
// Pines de Periféricos (Cuarta Secuencia)
#define PIN_BOTON 14 // Pin asignado para tu botón físico externo (Configurado con Pull-Up)
#define PIN_ADC 25 // Pin de salida analógica (DAC1 nativo del ESP32)
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
// Color naranja en formato RGB565 para los bloques patrones de los logos
#define COLOR_NARANJA 0xFD20
// Variables de estado para la cuarta secuencia
bool estadoDispositivo = false;
bool ultimoEstadoBoton = HIGH;
// Declaración previa de funciones auxiliares
void dibujarCuadroLogo(const char* nombreLogo);
void actualizarPantallaCuartaSecuencia();
void setup() {
tft.begin();
tft.setRotation(0); // Orientación vertical estándar
// Configuración de entradas y salidas numéricas
pinMode(PIN_BOTON, INPUT_PULLUP); // El botón leerá LOW al ser presionado
pinMode(PIN_ADC, OUTPUT);
// =========================================================================
// SECUENCIA 1: HD Technology (Pantalla Blanca, texto Negro arriba)
// =========================================================================
tft.fillScreen(ILI9341_WHITE);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(1);
tft.setCursor(2, 5); tft.println("Desarrollado por:");
tft.setCursor(2, 15); tft.println("Henry Daniel");
tft.setCursor(2, 25); tft.println("Rodriguez C.");
dibujarCuadroLogo("HD TECNOLOGY");
delay(2250); // Esperar 5 segundos ;el valor original era 5000
// =========================================================================
// SECUENCIA 2: UCS (Parpadeo rápido, Pantalla Blanca, letras Rojas arriba)
// =========================================================================
tft.fillScreen(ILI9341_BLACK); delay(100);
tft.fillScreen(ILI9341_WHITE); delay(100);
tft.setTextColor(ILI9341_RED);
tft.setTextSize(1);
tft.setCursor(2, 20); tft.println("Desarrollo Tecnologico");
// Centramos el logo real de la UCS (135x180) en el eje X para el simulador
// X = 52, Y = 50 (Ubicado justo debajo de tu texto original de la línea 64)
tft.drawBitmap(52, 50, logo_ucs_real, 135, 180, ILI9341_RED);
delay(2500); // Esperar 4 segundos ;el valor original era 4000
// =========================================================================
// SECUENCIA 3: Dr. Stone (Pantalla Negra, letras Blancas arriba)
// =========================================================================
tft.fillScreen(ILI9341_BLACK);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(1.5);
tft.setCursor(2, 5); tft.println("Ingenieria Biomedica");
tft.setCursor(5, 25); tft.println("Iniciando dispositivo...");
dibujarCuadroLogo("DR. STONE");
delay(2500); // Esperar 3 segundos ;el valor original era 3000
// Limpieza inicial para la interfaz fija de la cuarta secuencia
tft.fillScreen(ILI9341_BLACK);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(1);
tft.setCursor(10, 15);
tft.print("SISTEMA DE CONTROL");
// Dibujar el recuadro fijo de bordes blancos en la zona inferior (Y=180, Alto=45)
tft.drawRect(10, 180, 115, 45, ILI9341_WHITE);
actualizarPantallaCuartaSecuencia();
}
void loop() {
bool lecturaBoton = digitalRead(PIN_BOTON);
// Detectar pulsación
if (lecturaBoton == LOW && ultimoEstadoBoton == HIGH) {
delay(50); // Antirrebote básico
estadoDispositivo = !estadoDispositivo; // Alternar el estado
if (estadoDispositivo) {//recordar q se cambio a modo dogital por limitacion del simulador
pinMode(PIN_ADC, OUTPUT); // Asegura el pin como salida digital
digitalWrite(PIN_ADC, HIGH);
} else {
digitalWrite(PIN_ADC, LOW);
} // dacWrite(PIN_ADC, 255); // Activar salida DAC al máximo valor (3.3V)
//} else {
// dacWrite(PIN_ADC, 0); // Apagar la salida analógica
//}
actualizarPantallaCuartaSecuencia();
}
ultimoEstadoBoton = lecturaBoton;
}
void dibujarCuadroLogo(const char* nombreLogo) {
tft.fillRect(0, 60, 135, 180, COLOR_NARANJA);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(2);
tft.setCursor(40, 130);
tft.print("LOGO");
tft.setTextSize(1);
tft.setCursor(20, 160);
tft.print(nombreLogo);
}
void actualizarPantallaCuartaSecuencia() {
if (estadoDispositivo) {
tft.fillRect(11, 181, 113, 43, ILI9341_YELLOW);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(2);
tft.setCursor(32, 195);
tft.print("ACTIVA");
} else {
tft.fillRect(11, 181, 113, 43, ILI9341_BLACK);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.setCursor(20, 195);
tft.print("INACTIVA");
}
}