/*
* Unidades 5 a 8
* Tarefa 1:
* Reutilize o circuito no Wokwi criado na sala de aula e
* escreva o código. Abaixo está o lembrete das GPIOs do
* kit bitDogLab.
*
* Aluno: ALESSANDRA KIMIE HIRO
*
* Cap 5 Exemplo 5: O código utiliza uma biblioteca
do Pico para configurar um LED que alterna o estado (liga/desliga)
em intervalos regulares usando um temporizador. Imprime o LED Vermelho, LED Verde, LED Azul e LED Apagado.
*/
#include "pico/stdlib.h" // Biblioteca padrão do Raspberry Pi Pico para controle de GPIO, temporização e comunicação serial.
#include "hardware/timer.h" // Biblioteca para controle de temporizadores de hardware.
#include <stdio.h> // Biblioteca padrão de entrada e saída para uso de funções como printf.
// Definição dos pinos para o LED RGB.
const uint RED_PIN = 13; // GPIO13 - Vermelho
const uint GREEN_PIN = 11; // GPIO11 - Verde
const uint BLUE_PIN = 12; // GPIO12 - Azul
// Função de callback que será chamada a cada intervalo definido pelo temporizador.
bool repeating_timer_callback(struct repeating_timer *t) {
static int current_color = 0; // Controla a cor atual do LED (0: Vermelho, 1: Verde, 2: Azul, 3: Apagado)
// Alterna entre as cores do LED RGB e imprime a legenda correspondente.
if (current_color == 0) {
// Vermelho
gpio_put(RED_PIN, 1); // Liga o vermelho
gpio_put(GREEN_PIN, 0); // Desliga o verde
gpio_put(BLUE_PIN, 0); // Desliga o azul
printf("LED Vermelho\n"); // Mensagem indicando que o LED está na cor vermelha.
current_color = 1;
} else if (current_color == 1) {
// Verde
gpio_put(RED_PIN, 0); // Desliga o vermelho
gpio_put(GREEN_PIN, 1); // Liga o verde
gpio_put(BLUE_PIN, 0); // Desliga o azul
printf("LED Verde\n"); // Mensagem indicando que o LED está na cor verde.
current_color = 2;
} else if (current_color == 2) {
// Azul
gpio_put(RED_PIN, 0); // Desliga o vermelho
gpio_put(GREEN_PIN, 0); // Desliga o verde
gpio_put(BLUE_PIN, 1); // Liga o azul
printf("LED Azul\n"); // Mensagem indicando que o LED está na cor azul.
current_color = 3;
} else {
// Apagar LED
gpio_put(RED_PIN, 0); // Desliga o vermelho
gpio_put(GREEN_PIN, 0); // Desliga o verde
gpio_put(BLUE_PIN, 0); // Desliga o azul
printf("LED Apagado\n"); // Mensagem indicando que o LED está apagado.
current_color = 0;
}
// Retorna true para manter o temporizador repetindo esta função.
return true;
}
int main() {
// Inicializa a comunicação serial, permitindo o uso de 'printf' para depuração.
stdio_init_all();
// Inicializa os pinos do LED RGB como saída.
gpio_init(RED_PIN);
gpio_init(GREEN_PIN);
gpio_init(BLUE_PIN);
gpio_set_dir(RED_PIN, GPIO_OUT);
gpio_set_dir(GREEN_PIN, GPIO_OUT);
gpio_set_dir(BLUE_PIN, GPIO_OUT);
// Declara uma estrutura para armazenar informações sobre o temporizador repetitivo.
struct repeating_timer timer;
// Configura o temporizador repetitivo para chamar a função 'repeating_timer_callback' a cada 1 segundo.
add_repeating_timer_ms(1000, repeating_timer_callback, NULL, &timer);
// Loop principal do programa.
// O temporizador gerencia o controle do LED, portanto, o loop principal está vazio.
while (true) {
// Nenhuma ação necessária no loop principal, pois o temporizador gerencia o LED.
}
return 0;
}