#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/gpio.h"
#include "hardware/adc.h"
#include "pico_i2c_lcd.h" //biblioteca lcd
#define I2C_PORT i2c0 //pinagem lcd
#define I2C_SDA 20
#define I2C_SCL 21
#define ADC_NUM2 2 // ADC A2
#define ADC_PIN2 (26 + ADC_NUM2) //26 + 2 = GPIO 28 P1
#define ADC_NUM1 1 // ADC A1
#define ADC_PIN1 (26 + ADC_NUM1) //26 + 1 = GPIO 27 P2
#define ADC_NUM0 0 // ADC A0
#define ADC_PIN0 (26 + ADC_NUM0) //26 + 0 = GPIO 26 L
int main() {
stdio_init_all();
adc_init(); //inicializa ADC
adc_gpio_init(ADC_PIN2); //configura pino 28 como entrada
adc_gpio_init(ADC_PIN1); //configura pino 27 como entrada
adc_gpio_init(ADC_PIN0); //configura pino 26 como entrada
i2c_init(I2C_PORT, 100 * 1000); //configuracao lcd
gpio_set_function(I2C_SDA, GPIO_FUNC_I2C);
gpio_set_function(I2C_SCL, GPIO_FUNC_I2C);
gpio_pull_up(I2C_SDA);
gpio_pull_up(I2C_SCL);
lcd_init(I2C_PORT, 0x27, 16, 2);
lcd_clear();
uint adc_valor2;
uint adc_valor1;
uint adc_valor0;
while (true) {
adc_select_input(ADC_NUM2); //seleciona a entrada A2
adc_valor2 = adc_read(); //faz a leitura do sinal da entrada A2
adc_select_input(ADC_NUM1); //seleciona a entrada A1
adc_valor1 = adc_read(); //faz a leitura do sinal da entrada A1
adc_select_input(ADC_NUM0); //seleciona a entrada A0
adc_valor0 = adc_read(); //faz a leitura do sinal da entrada A0
float P1 = (10*adc_valor2)/4095; //formula para conversao de sinal para 0-10
float P2 = (10*adc_valor1)/4095; //formula para conversao de sinal para 0-10
float L = (10*adc_valor0)/4095; //formula para conversao de sinal para 0-10
float MIC = ((P1*0.3)+(P2*0.5)+(L*0.2)); //formula para media
printf("P1: %.2f [] P2: %.2f [] L: %.2f [] MIC: %.2f\n", P1, P2, L, MIC); //print texto, numero com formato especifico, "espaco", v, pula linha
lcd_set_cursor(0, 0);
lcd_printf ("P1: %.1f P2: %.1f\n", P1, P2);
lcd_set_cursor(0, 1);
lcd_printf ("L: %.1f MIC: %.1f\n", L, MIC);
sleep_ms(500);
}
}