#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
pi-pico-w