//Gabriel Oliveira, Dênis Flores e Arthur Zagretti
#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/bootrom.h"
#include "ssd1306.h"
#include "hardware/adc.h"
#define I2C_PORT i2c0
#define SDA_PIN 20
#define SCL_PIN 21
#define BOTAO_B1 22
#define ADC0_NUM 0
#define ADC0_PIN (26 + ADC0_NUM)
// LEDs de nível
#define LED1 14
#define LED2 13
#define LED3 12
#define LED4 11
#define LED5 10
// Bomba
#define BOMBA 9
uint8_t display_buffer[128 * SSD1306_HEIGHT / 8];
uint16_t adc0_valor;
char buffer[50];
int main(){
gpio_init(BOTAO_B1);
gpio_set_dir(BOTAO_B1, GPIO_IN);
gpio_pull_up(BOTAO_B1);
bool boot = gpio_get(BOTAO_B1);
if(boot == 0){
reset_usb_boot(0,0);
}
stdio_init_all();
SSD1306_init();
ssd1306_clear_buffer(display_buffer);
ssd1306_send_data(display_buffer, sizeof(display_buffer));
// Inicializa ADC
adc_init();
adc_gpio_init(ADC0_PIN);
// Configuração LEDs
gpio_init(LED1); gpio_set_dir(LED1, GPIO_OUT);
gpio_init(LED2); gpio_set_dir(LED2, GPIO_OUT);
gpio_init(LED3); gpio_set_dir(LED3, GPIO_OUT);
gpio_init(LED4); gpio_set_dir(LED4, GPIO_OUT);
gpio_init(LED5); gpio_set_dir(LED5, GPIO_OUT);
// Configuração bomba
gpio_init(BOMBA);
gpio_set_dir(BOMBA, GPIO_OUT);
int tensao;
int nivel;
while(true){
adc_select_input(ADC0_NUM);
adc0_valor = adc_read();
tensao = 3.3 * adc0_valor / 4095;
// -------- cálculo do nível --------
nivel = (adc0_valor * 100) / 4095;
// -------- controle dos LEDs --------
gpio_put(LED1, nivel >= 0);
gpio_put(LED2, nivel >= 25);
gpio_put(LED3, nivel >= 50);
gpio_put(LED4, nivel >= 75);
gpio_put(LED5, nivel >= 100);
// -------- controle da bomba --------
if(nivel < 10){
gpio_put(BOMBA, 1); // liga bomba
}
if(nivel >= 100){
gpio_put(BOMBA, 0); // desliga bomba
}
// -------- OLED --------
ssd1306_clear_buffer(display_buffer);
sprintf(buffer,"ADC: %d",adc0_valor);
ssd1306_write_text(display_buffer,0,0,buffer);
sprintf(buffer,"Tensao: %.2f V",tensao);
ssd1306_write_text(display_buffer,0,16,buffer);
sprintf(buffer,"Nivel: %d %%",nivel);
ssd1306_write_text(display_buffer,0,32,buffer);
if(gpio_get(BOMBA))
ssd1306_write_text(display_buffer,0,48,"Bomba: LIGADA");
else
ssd1306_write_text(display_buffer,0,48,"Bomba: DESLIG.");
ssd1306_send_data(display_buffer,sizeof(display_buffer));
sleep_ms(200);
}
}GPIO14
GPIO 13
GPIO 12
GPIO 11
GPIO 10
GPIO 9
GPIO 8
GP14
GP13
GP12
GP11
GP10
GP9
GP8
RESET
Botão B1
OLED
4.3V
COM
3.3V
GND
GND
GND