/*
* 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 4: Este código configura um temporizador que
chama a função `repeating_timer_callback` a cada 1 segundo. A
função imprime a mensagem “1 segundo passou” e é executada
repetidamente. Enquanto isso, o código principal fica em um
loop infinito, com o processador aguardando 1 segundo em cada
iteração.
*/
#include "pico/stdlib.h" // Biblioteca padrão para funcionalidades básicas de GPIO e temporização
#include "pico/time.h" // Biblioteca para manipulação de tempo
// 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
int main() {
// Inicializa a comunicação padrão (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);
// Define o intervalo de tempo para alternar as cores (1 segundo)
uint32_t interval = 1000; // 1000 milissegundos = 1 segundo
absolute_time_t next_wake_time = delayed_by_us(get_absolute_time(), interval * 1000);
// Variáveis para controlar a cor atual
int current_color = 0; // 0: Vermelho, 1: Verde, 2: Azul, 3: Desligado
while (true) {
// Verifica se o tempo de alternância foi atingido
if (time_reached(next_wake_time)) {
// Alterna entre as cores do LED RGB
if (current_color == 0) {
// Vermelho
gpio_put(RED_PIN, 1);
gpio_put(GREEN_PIN, 0);
gpio_put(BLUE_PIN, 0);
current_color = 1;
} else if (current_color == 1) {
// Verde
gpio_put(RED_PIN, 0);
gpio_put(GREEN_PIN, 1);
gpio_put(BLUE_PIN, 0);
current_color = 2;
} else if (current_color == 2) {
// Azul
gpio_put(RED_PIN, 0);
gpio_put(GREEN_PIN, 0);
gpio_put(BLUE_PIN, 1);
current_color = 3;
} else {
// Desligado
gpio_put(RED_PIN, 0);
gpio_put(GREEN_PIN, 0);
gpio_put(BLUE_PIN, 0);
current_color = 0;
}
// Calcula o próximo tempo de alternância
next_wake_time = delayed_by_us(next_wake_time, interval * 1000);
}
// Introduz um pequeno delay para reduzir o uso da CPU
sleep_ms(1);
}
return 0;
}