// PROJETO: SEMÁFORO ARDUÍNO UNO
// Define os pinos dos LEDs do semáforo dos carros
#define LED_S_VERDE 2
#define LED_S_AMARELO 4
#define LED_S_VERMELHO 6
// Define os pinos dos LEDs do semáforo dos pedestres
#define LED_P_VERDE 8
#define LED_P_VERMELHO 10
// Define o pino do botão para solicitar a travessia
#define BOTAO 12
void setup() {
// LEDs do semáforo como "saída"
pinMode(LED_S_VERDE, OUTPUT);
pinMode(LED_S_AMARELO, OUTPUT);
pinMode(LED_S_VERMELHO, OUTPUT);
// LEDs do pedestre como "saída"
pinMode(LED_P_VERDE, OUTPUT);
pinMode(LED_P_VERMELHO, OUTPUT);
// Configura o botão como entrada utilizando o resistor de pull-up interno
pinMode(BOTAO, INPUT_PULLUP);
}
void loop() {
// Estado inicial, ambos ligados
digitalWrite(LED_S_VERDE, HIGH);
digitalWrite(LED_P_VERMELHO, HIGH);
// Espera o botão ser pressionado
if (digitalRead(BOTAO) == LOW)
{
// Debounce simples
delay(50);
// Confirma se o botão continua pressionado
if (digitalRead(BOTAO) == LOW)
{
// Mantém o verde do semáforo durante 5 segundos
delay(5000);
// Apaga o verde do semáforo
digitalWrite(LED_S_VERDE, LOW);
// Vermelho do semáforo piscando três "i < 3;" vezes
for (int i = 0; i < 3; i++)
{
// Ligado
digitalWrite(LED_S_VERMELHO, HIGH);
delay(500);
// Desligado
digitalWrite(LED_S_VERMELHO, LOW);
delay(500);
}
for (int i = 0; i < 4; i++)
{
// Ligado
digitalWrite(LED_S_AMARELO, HIGH);
delay(500);
// Desligado
digitalWrite(LED_S_AMARELO, LOW);
delay(500);
}
// Semáfro vermelho ligado
digitalWrite(LED_S_VERMELHO, HIGH);
// Pedestre verde ligado
digitalWrite(LED_P_VERDE, HIGH);
// Pedestre vermelho desligado
digitalWrite(LED_P_VERMELHO, LOW);
// Tempo para o pedestre atravessar
delay(5000);
// LED verde do pedestre desligado
digitalWrite(LED_P_VERDE, LOW);
// LED vermelho do semáforo desligado
digitalWrite(LED_S_VERMELHO, LOW);
}
}
}