#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
#define led_normal 2
#define led_alerta 1
#define led_perigo 0
#define led_ventilador 13
int main() {
stdio_init_all();
gpio_init(led_normal); //configuracao pinos dos leds
gpio_set_dir(led_normal, GPIO_OUT);
gpio_init(led_alerta);
gpio_set_dir(led_alerta, GPIO_OUT);
gpio_init(led_perigo);
gpio_set_dir(led_perigo, GPIO_OUT);
gpio_init(led_ventilador);
gpio_set_dir(led_ventilador, GPIO_OUT);
adc_init(); //inicializa ADC
adc_gpio_init(ADC_PIN2); //configura pino 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();
lcd_set_cursor(0, 0); //na primeira metade d cima
lcd_printf("Temperatura:");
uint adc_valor2;
while (true) {
adc_select_input(ADC_NUM2); //seleciona a entrada A2
adc_valor2 = adc_read(); //faz a leitura do sinal da entrada A2
float temp = (100*adc_valor2)/4095; //formula para conversao de sinal para tensao
if(temp>80){
lcd_set_cursor(0, 1); //na segunda metade d baixo
lcd_printf("Perigo: %.1f oC", temp);
gpio_put(led_normal, 0);
gpio_put(led_alerta, 0);
gpio_put(led_perigo, 1);
gpio_put(led_ventilador, 1);
}
else if(temp<79 && temp>60){
lcd_set_cursor(0, 1); //na segunda metade d baixo
lcd_printf("Alerta: %.1f oC", temp);
gpio_put(led_normal, 0);
gpio_put(led_alerta, 1);
gpio_put(led_perigo, 0);
gpio_put(led_ventilador, 0);
}
else if(temp<60){
lcd_set_cursor(0, 1); //na segunda metade d baixo
lcd_printf("Normal: %.1f oC", temp);
gpio_put(led_normal, 1);
gpio_put(led_alerta, 0);
gpio_put(led_perigo, 0);
gpio_put(led_ventilador, 0);
}
sleep_ms(500);
}
}