// ==========================================
// Controle de Semáforo com ESP32
// ==========================================
// ----- Definição dos pinos -----
// Via A
#define VERDE_A 23
#define AMARELO_A 22
#define VERMELHO_A 21
// Via B
#define VERDE_B 25
#define AMARELO_B 26
#define VERMELHO_B 27
// ----- Tempos (em milissegundos) -----
#define TEMPO_VERDE 5000
#define TEMPO_AMARELO 2000
void setup() {
// Configura pinos da Via A
pinMode(VERDE_A, OUTPUT);
pinMode(AMARELO_A, OUTPUT);
pinMode(VERMELHO_A, OUTPUT);
// Configura pinos da Via B
pinMode(VERDE_B, OUTPUT);
pinMode(AMARELO_B, OUTPUT);
pinMode(VERMELHO_B, OUTPUT);
// Estado inicial:
// Via A verde e Via B vermelha
digitalWrite(VERDE_A, HIGH);
digitalWrite(AMARELO_A, LOW);
digitalWrite(VERMELHO_A, LOW);
digitalWrite(VERDE_B, LOW);
digitalWrite(AMARELO_B, LOW);
digitalWrite(VERMELHO_B, HIGH);
}
void loop() {
// ==========================================
// VIA A ABERTA
// ==========================================
// Verde A ligado
digitalWrite(VERDE_A, HIGH);
digitalWrite(AMARELO_A, LOW);
digitalWrite(VERMELHO_A, LOW);
// Via B permanece vermelha
digitalWrite(VERDE_B, LOW);
digitalWrite(AMARELO_B, LOW);
digitalWrite(VERMELHO_B, HIGH);
delay(TEMPO_VERDE);
// Transição: Verde -> Amarelo -> Vermelho
digitalWrite(VERDE_A, LOW);
digitalWrite(AMARELO_A, HIGH);
// Via B continua vermelha
digitalWrite(VERMELHO_B, HIGH);
delay(TEMPO_AMARELO);
// Via A fecha
digitalWrite(AMARELO_A, LOW);
digitalWrite(VERMELHO_A, HIGH);
// ==========================================
// VIA B ABERTA
// ==========================================
// Via B verde
digitalWrite(VERDE_B, HIGH);
digitalWrite(AMARELO_B, LOW);
digitalWrite(VERMELHO_B, LOW);
// Via A permanece vermelha
digitalWrite(VERDE_A, LOW);
digitalWrite(AMARELO_A, LOW);
digitalWrite(VERMELHO_A, HIGH);
delay(TEMPO_VERDE);
// Transição: Verde -> Amarelo -> Vermelho
digitalWrite(VERDE_B, LOW);
digitalWrite(AMARELO_B, HIGH);
// Via A continua vermelha
digitalWrite(VERMELHO_A, HIGH);
delay(TEMPO_AMARELO);
// Via B fecha
digitalWrite(AMARELO_B, LOW);
digitalWrite(VERMELHO_B, HIGH);
}