#include "pico/stdlib.h"
#include <stdio.h>
// Definição dos pinos dos LEDs
#define LED_RED 11 // LED vermelho no pino 11
#define LED_YELLOW 12 // LED amarelo no pino 12
#define LED_GREEN 13 // LED verde no pino 13
// Estados do semáforo
typedef enum {
RED,
YELLOW,
GREEN
} LuzSemaforo;
// Variável global para armazenar o estado atual do semáforo
LuzSemaforo current_state = RED;
// Função de callback do temporizador
bool repeating_timer_callback(struct repeating_timer *t) {
// Desliga todos os LEDs
gpio_put(LED_RED, 0);
gpio_put(LED_YELLOW, 0);
gpio_put(LED_GREEN, 0);
// Muda o estado do semáforo
switch (current_state) {
case RED:
current_state = YELLOW;
gpio_put(LED_YELLOW, 1); // Liga o LED amarelo
break;
case YELLOW:
current_state = GREEN;
gpio_put(LED_GREEN, 1); // Liga o LED verde
break;
case GREEN:
current_state = RED;
gpio_put(LED_RED, 1); // Liga o LED vermelho
break;
}
return true; // Continua o temporizador
}
int main() {
// Inicializa a comunicação serial (para debug)
stdio_init_all();
// Configura os pinos dos LEDs como saída
gpio_init(LED_RED);
gpio_init(LED_YELLOW);
gpio_init(LED_GREEN);
gpio_set_dir(LED_RED, GPIO_OUT);
gpio_set_dir(LED_YELLOW, GPIO_OUT);
gpio_set_dir(LED_GREEN, GPIO_OUT);
// Inicializa o semáforo com o LED vermelho ligado
gpio_put(LED_RED, 1);
gpio_put(LED_YELLOW, 0);
gpio_put(LED_GREEN, 0);
// Configura o temporizador periódico (3 segundos)
struct repeating_timer timer;
add_repeating_timer_ms(3000, repeating_timer_callback, NULL, &timer);
// Loop principal
while (true) {
// Imprime uma mensagem a cada segundo
printf("Semáforo em funcionamento...\n");
sleep_ms(1000);
}
return 0;
}
Raspberry Pi Pico