#include <TM1637Display.h>
// Pines del display TM1637
#define CLK 6
#define DIO 7
TM1637Display display(CLK, DIO);
// Pines LED
const int ledVerde = 2;
const int ledAmarillo = 3;
const int ledRojo = 4;
void setup() {
pinMode(ledVerde, OUTPUT);
pinMode(ledAmarillo, OUTPUT);
pinMode(ledRojo, OUTPUT);
display.setBrightness(7); // brillo máximo (0-7)
}
void loop() {
// Semáforo verde: 15 segundos
digitalWrite(ledVerde, HIGH);
digitalWrite(ledAmarillo, LOW);
digitalWrite(ledRojo, LOW);
mostrarContador(15);
digitalWrite(ledVerde, LOW);
// Semáforo amarillo: 5 segundos
digitalWrite(ledAmarillo, HIGH);
mostrarContador(5);
digitalWrite(ledAmarillo, LOW);
// Semáforo rojo: 10 segundos
digitalWrite(ledRojo, HIGH);
mostrarContador(10);
digitalWrite(ledRojo, LOW);
}
void mostrarContador(int segundos) {
for (int i = segundos; i >= 0; i--) {
uint8_t segmentos[4];
// Segmento G encendido en las posiciones 0 y 1 (barra central decorativa)
segmentos[0] = 0b01000000; // Solo segmento G
segmentos[1] = 0b01000000;
// Mostrar los dígitos del contador en las posiciones 2 y 3
int decenas = (i / 10) % 10;
int unidades = i % 10;
segmentos[2] = display.encodeDigit(decenas);
segmentos[3] = display.encodeDigit(unidades);
// Mostrar en el display
display.setSegments(segmentos);
delay(1000);
}
display.clear(); // Limpiar display al finalizar
}