#include <stdio.h>
#include "pico/stdlib.h"   // Inclui a biblioteca padrão para funcionalidades básicas como GPIO, temporização e comunicação serial.
#include "hardware/timer.h" // Inclui a biblioteca para gerenciamento de temporizadores de hardware.

#define LED_PIN_RED 13
#define LED_PIN_BLUE 12
#define LED_PIN_GREEN 11

// Função de callback que será chamada repetidamente pelo temporizador
// O tipo bool indica que a função deve retornar verdadeiro ou falso para continuar ou parar o temporizador.
bool repeating_timer_callback(struct repeating_timer *t) {
    printf("Sinal mudou\n");

    if (gpio_get(LED_PIN_RED)) {
        gpio_put(LED_PIN_RED, 0);
        gpio_put(LED_PIN_BLUE, 1);
    } else if (gpio_get(LED_PIN_BLUE)) {
        gpio_put(LED_PIN_BLUE, 0);
        gpio_put(LED_PIN_GREEN, 1);
    } else if (gpio_get(LED_PIN_GREEN)) {
        gpio_put(LED_PIN_GREEN, 0);
        gpio_put(LED_PIN_RED, 1);
    }

    // Retorna true para manter o temporizador repetindo. Se retornar false, o temporizador para.
    return true;
}

int main() {
    stdio_init_all();

    gpio_init(LED_PIN_RED);
    gpio_set_dir(LED_PIN_RED,true);
    gpio_put(LED_PIN_RED, 1);

    gpio_init(LED_PIN_BLUE);
    gpio_set_dir(LED_PIN_BLUE,true);
    gpio_put(LED_PIN_BLUE, 0);

    gpio_init(LED_PIN_GREEN);
    gpio_set_dir(LED_PIN_GREEN,true);
    gpio_put(LED_PIN_GREEN, 0);

    // Declaração de uma estrutura de temporizador de repetição.
    // Esta estrutura armazenará informações sobre o temporizador configurado.
    struct repeating_timer timer;

    // Configura o temporizador para chamar a função de callback a cada 3 segundos.
    add_repeating_timer_ms(3000, repeating_timer_callback, NULL, &timer);

    // Loop infinito que mantém o programa em execução.
    while (true) {
        sleep_ms(1000); // Pausa de 1 segundo.
        printf("+ 1 segundo se passou\n");
    }
    return 0;
}
pico:GP0
pico:GP1
pico:GND.1
pico:GP2
pico:GP3
pico:GP4
pico:GP5
pico:GND.2
pico:GP6
pico:GP7
pico:GP8
pico:GP9
pico:GND.3
pico:GP10
pico:GP11
pico:GP12
pico:GP13
pico:GND.4
pico:GP14
pico:GP15
pico:GP16
pico:GP17
pico:GND.5
pico:GP18
pico:GP19
pico:GP20
pico:GP21
pico:GND.6
pico:GP22
pico:RUN
pico:GP26
pico:GP27
pico:GND.7
pico:GP28
pico:ADC_VREF
pico:3V3
pico:3V3_EN
pico:GND.8
pico:VSYS
pico:VBUS
led1:A
led1:C
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
led2:A
led2:C
led3:A
led3:C