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