#include <stdio.h>
#include "pico/stdlib.h"

// Definição dos pinos
#define LED_VERDE_CARROS 2
#define LED_AMARELO_CARROS 3
#define LED_VERMELHO_CARROS 4
#define LED_VERDE_PEDESTRES 5
#define BUZZER 6
#define BOTAO 7

// Função para acender um LED e apagar os outros
void acender_led(int led) {
    gpio_put(LED_VERDE_CARROS, led == LED_VERDE_CARROS);
    gpio_put(LED_AMARELO_CARROS, led == LED_AMARELO_CARROS);
    gpio_put(LED_VERMELHO_CARROS, led == LED_VERMELHO_CARROS);
}

// Função para controlar o buzzer
void acionar_buzzer(int tempo_ms) {
    for (int i = 0; i < tempo_ms / 200; i++) {
        gpio_put(BUZZER, 1);
        sleep_ms(100);
        gpio_put(BUZZER, 0);
        sleep_ms(100);
    }
}

int main() {
    // Inicialização dos pinos
    gpio_init(LED_VERDE_CARROS);
    gpio_init(LED_AMARELO_CARROS);
    gpio_init(LED_VERMELHO_CARROS);
    gpio_init(LED_VERDE_PEDESTRES);
    gpio_init(BUZZER);
    gpio_init(BOTAO);

    gpio_set_dir(LED_VERDE_CARROS, GPIO_OUT);
    gpio_set_dir(LED_AMARELO_CARROS, GPIO_OUT);
    gpio_set_dir(LED_VERMELHO_CARROS, GPIO_OUT);
    gpio_set_dir(LED_VERDE_PEDESTRES, GPIO_OUT);
    gpio_set_dir(BUZZER, GPIO_OUT);
    gpio_set_dir(BOTAO, GPIO_IN);
    gpio_pull_up(BOTAO);

    while (1) {
        // Estado inicial: semáforo de carros funcionando automaticamente
        acender_led(LED_VERDE_CARROS);
        sleep_ms(8000); // 8 segundos no verde

        acender_led(LED_AMARELO_CARROS);
        sleep_ms(2000); // 2 segundos no amarelo

        acender_led(LED_VERMELHO_CARROS);
        sleep_ms(10000); // 10 segundos no vermelho

        // Verificar se o botão foi pressionado
        if (!gpio_get(BOTAO)) {
            // Sequência para pedestres
            acender_led(LED_AMARELO_CARROS);
            sleep_ms(5000); // 5 segundos no amarelo

            acender_led(LED_VERMELHO_CARROS);
            gpio_put(LED_VERDE_PEDESTRES, 1); // LED verde para pedestres
            acionar_buzzer(15000);           // Buzzer intermitente por 15 segundos

            gpio_put(LED_VERDE_PEDESTRES, 0); // Apagar LED verde para pedestres
        }
    }
    return 0;
}
Loading
pi-pico-w