#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/adc.h"
#include "hardware/pwm.h"
// ---------- DEFINIÇÃO DOS PINOS ----------
#define POT_R 26 // ADC0 (GPIO26)
#define POT_G 27 // ADC1 (GPIO27) LED Catodo
#define POT_B 28 // ADC2 (GPIO28)
#define LED_R 13 // PWM canal R
#define LED_G 12 // PWM canal G
#define LED_B 11 // PWM canal B
// ---------- FUNÇÃO PARA CONFIGURAR PWM ----------
uint pwm_setup(uint pin) {
gpio_set_function(pin, GPIO_FUNC_PWM);
uint slice = pwm_gpio_to_slice_num(pin);
pwm_set_wrap(slice, 4095); // 12 bits para combinar com ADC
pwm_set_enabled(slice, true);
return slice;
}
int main() {
stdio_init_all();
// ---------- CONFIGURA ADC ----------
adc_init();
adc_gpio_init(POT_R);
adc_gpio_init(POT_G);
adc_gpio_init(POT_B);
// ---------- CONFIGURA PWM NOS LEDS ----------
uint slice_r = pwm_setup(LED_R);
uint slice_g = pwm_setup(LED_G);
uint slice_b = pwm_setup(LED_B);
while (true) {
// ---------- LEITURA DO POTENCIÔMETRO R ----------
adc_select_input(0); // POT_R → ADC0
uint16_t valR = adc_read(); // valor 0–4095
// ---------- LEITURA DO POTENCIÔMETRO G ----------
adc_select_input(1); // POT_G → ADC1
uint16_t valG = adc_read();
// ---------- LEITURA DO POTENCIÔMETRO B ----------
adc_select_input(2); // POT_B → ADC2
uint16_t valB = adc_read();
// ---------- ATUALIZA PWM DO LED ----------
pwm_set_gpio_level(LED_R, valR);
pwm_set_gpio_level(LED_G, valG);
pwm_set_gpio_level(LED_B, valB);
// ---------- IMPRIME VALORES ----------
printf("R=%d G=%d B=%d\n", valR, valG, valB);
sleep_ms(50);
}
}