// ================================
// Definição dos pinos
// ================================
int ledVerdeCarro = 3;
int ledAmareloCarro = 2;
int ledVermelhoCarro = 1;
int ledVerdePedestre = 5 ;
int ledVermelhoPedestre = 6 ;
int botao = 4;
// ================================
// Configuração inicial
// ================================
void setup() {
pinMode(ledVerdeCarro, OUTPUT);
pinMode(ledAmareloCarro, OUTPUT);
pinMode(ledVermelhoCarro, OUTPUT);
pinMode(ledVerdePedestre, OUTPUT);
pinMode(ledVermelhoPedestre, OUTPUT);
pinMode(botao, INPUT_PULLUP);
// Estado inicial do semáforo
digitalWrite(ledVerdeCarro, HIGH);
digitalWrite(ledVermelhoPedestre, HIGH);
}
// ================================
// Loop principal
// ================================
void loop() {
// Verifica se o botão foi pressionado
if (digitalRead(botao) == LOW) {
// Pequeno tempo de espera antes da troca
delay(1000);
// Carro: verde -> amarelo
digitalWrite(ledVerdeCarro, LOW);
digitalWrite(ledAmareloCarro, HIGH);
delay(2000);
// Carro: amarelo -> vermelho
digitalWrite(ledAmareloCarro, LOW);
digitalWrite(ledVermelhoCarro, HIGH);
// Pedestre: vermelho -> verde
digitalWrite(ledVermelhoPedestre, LOW);
digitalWrite(ledVerdePedestre, HIGH);
// Tempo para atravessar
delay(5000);
// Pisca o verde do pedestre
for (int i = 0; i < 5; i++) {
digitalWrite(ledVerdePedestre, LOW);
delay(500);
digitalWrite(ledVerdePedestre, HIGH);
delay(500);
}
// Fecha passagem do pedestre
digitalWrite(ledVerdePedestre, LOW);
digitalWrite(ledVermelhoPedestre, HIGH);
// Libera carros novamente
digitalWrite(ledVermelhoCarro, LOW);
digitalWrite(ledVerdeCarro, HIGH);
// Evita múltiplos acionamentos
delay(1000);
}
}