#include <Adafruit_GFX.h> // Importa la biblioteca de gráficos Adafruit
#include <Adafruit_ILI9341.h> // Importa la biblioteca para el TFT LCD ILI9341
#include <SPI.h>
// Definición de pines para el TFT LCD
#define TFT_CS 10
#define TFT_RST 9
#define TFT_DC 8
// Inicializa el objeto para el TFT LCD ILI9341
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
// Colores predefinidos para el semáforo
#define RED ILI9341_RED
#define YELLOW ILI9341_YELLOW
#define GREEN ILI9341_GREEN
#define BLACK ILI9341_BLACK
#define WHITE ILI9341_WHITE
void setup() {
Serial.begin(9600);
// Inicializa la pantalla TFT
tft.begin();
// Llena la pantalla de un color inicial (opcional)
tft.fillScreen(BLACK);
// Puedes ajustar la orientación de la pantalla si es necesario
tft.setRotation(3); // 0 a 3, dependiendo de la orientación física de tu pantalla
// Configura el color del texto y tamaño de fuente
tft.setTextColor(WHITE);
tft.setTextSize(2);
// Dibuja el semáforo inicialmente en rojo
drawTrafficLight(RED);
}
void loop() {
// Cambia el estado del semáforo cada cierto tiempo
delay(3000); // 3 segundos
// Dibuja el semáforo en amarillo
drawTrafficLight(YELLOW);
delay(1000); // 1 segundo
// Dibuja el semáforo en verde
drawTrafficLight(GREEN);
delay(3000); // 3 segundos
// Dibuja el semáforo en amarillo nuevamente antes de volver a rojo
drawTrafficLight(YELLOW);
delay(1000); // 1 segundo
// Dibuja el semáforo en rojo para comenzar de nuevo
drawTrafficLight(RED);
}
void drawTrafficLight(uint16_t color) {
// Borra el área del semáforo
tft.fillRect(100, 50, 80, 200, BLACK);
// Dibuja el poste del semáforo
tft.fillRect(120, 50, 40, 200, ILI9341_DARKGREY);
// Dibuja los círculos de los colores del semáforo
int circleX = 140;
int circleYRed = 70;
int circleYYellow = 130;
int circleYGreen = 190;
int circleRadius = 30;
// Círculo rojo
if (color == RED || color == YELLOW) {
tft.fillCircle(circleX, circleYRed, circleRadius, RED);
} else {
tft.fillCircle(circleX, circleYRed, circleRadius, BLACK);
}
// Círculo amarillo
if (color == YELLOW) {
tft.fillCircle(circleX, circleYYellow, circleRadius, YELLOW);
} else {
tft.fillCircle(circleX, circleYYellow, circleRadius, BLACK);
}
// Círculo verde
if (color == GREEN || color == YELLOW) {
tft.fillCircle(circleX, circleYGreen, circleRadius, GREEN);
} else {
tft.fillCircle(circleX, circleYGreen, circleRadius, BLACK);
}
}