#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/pwm.h"
#include "hardware/gpio.h"
#include "hardware/clocks.h"

#define led_esq 0
#define led_dir 1

#define key_lant 2
#define key_break 3

#define GPIO_HIGH 1
#define GPIO_LOW 0

#define FREQ 1000.0f
#define WRAP 4095

void system_init(void) {
    gpio_init(key_lant);
    gpio_set_dir(key_lant, GPIO_IN);
    gpio_pull_up(key_lant);

    gpio_init(key_break);
    gpio_set_dir(key_break, GPIO_IN);
    gpio_pull_up(key_break);
}

int main() {
    stdio_init_all();
    system_init();

    uint16_t val = 250;
    uint16_t val100 = 4095;
    uint16_t val0 = 0;
    uint sts_key_lant = 1;
    uint sts_key_brake = 1;

    uint slice_esq = pwm_gpio_to_slice_num(led_esq);
    uint chan_esq = pwm_gpio_to_channel(led_esq);

    uint slice_dir = pwm_gpio_to_slice_num(led_dir);
    uint chan_dir = pwm_gpio_to_channel(led_dir);

    float fsys = frequency_count_khz(CLOCKS_FC0_SRC_VALUE_CLK_SYS) * 1000.0f;
    float div = fsys / (FREQ * (WRAP + 1));
    printf("Teste\n");
    sleep_ms(50);
    pwm_config config = pwm_get_default_config();
    pwm_config_set_wrap(&config, WRAP);
    pwm_config_set_clkdiv(&config, div);
    pwm_config_set_phase_correct(&config, false);
    pwm_config_set_clkdiv_mode(&config, PWM_DIV_FREE_RUNNING);

    // Inicializa e configura PWM para os LEDs
    pwm_init(slice_esq, &config, false);
    gpio_set_function(led_esq, GPIO_FUNC_PWM);
    pwm_set_chan_level(slice_esq, chan_esq, val0);
    pwm_set_enabled(slice_esq, true);

    pwm_init(slice_dir, &config, false);
    gpio_set_function(led_dir, GPIO_FUNC_PWM);
    pwm_set_chan_level(slice_dir, chan_dir, val0);
    pwm_set_enabled(slice_dir, true);

    while (true) {
        sts_key_lant = gpio_get(key_lant);
        sts_key_brake = gpio_get(key_break);

        if (sts_key_lant == 1 && sts_key_brake == 1) 
        {
            pwm_set_chan_level(slice_esq, chan_esq, val0);
            pwm_set_chan_level(slice_dir, chan_dir, val0);
            
            
        } if (sts_key_brake == 0 && sts_key_lant == 1) {
            pwm_set_chan_level(slice_esq, chan_esq, val100);
            pwm_set_chan_level(slice_dir, chan_dir, val100);
        } 
        if(sts_key_lant == 0 && sts_key_brake == 0)
        {
            pwm_set_chan_level(slice_esq, chan_esq, val100);
            pwm_set_chan_level(slice_dir, chan_dir, val100);
        }
        if (sts_key_lant == 0 && sts_key_brake == 1){
            pwm_set_chan_level(slice_esq, chan_esq, val);
            pwm_set_chan_level(slice_dir, chan_dir, val);
        }
        sleep_ms(10);
    }
    return 0;
}
BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT