//exercicio 6
//Felipe Vieira Conway Baccarat
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define PIN_TRIG 3
#define PIN_ECHO 2
#define led 7
int distanciaCM = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
bool bombaLigada = false;
float minVolume = 18841; //cm cubicos
float maxVolume = 123088;//cm cubicos
void setup() {
lcd.init();
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
pinMode(led, OUTPUT);
}
void loop() {
lcd.setBacklight(HIGH);
lcd.clear();
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
// Leia o resultado:
int duration = pulseIn(PIN_ECHO, HIGH);
distanciaCM = (duration / 58);
//calcula a altura
int altura = map(distanciaCM, 10, 110, 100, 0);
//calcula o volume
float volume = altura * 3.14 * (20 * 20);
//liga a bomba se o volume for minimo e a bomba estiver desligada
if (volume <= minVolume && !bombaLigada) {
digitalWrite(led, 1);
bombaLigada = true;
}
//desliga a bomba se o volume for maximo e a bomba estiver ligada
else if (volume >= maxVolume && bombaLigada) {
digitalWrite(led, 0);
bombaLigada = false;
}
//escreve a primeira tela e aguarda 5 segundos antes de escrever a proxima
lcd.setCursor(1,0);
lcd.print("volmin: ");
lcd.setCursor(10,0);
lcd.print("18840");
lcd.setCursor(1,1);
lcd.print("volmax:");
lcd.setCursor(9,1);
lcd.print("123088");
delay(5000);
lcd.clear();
delay(50);
lcd.setCursor(0,0);
lcd.print("volmed:");
lcd.print(volume);
lcd.print("cm3");
lcd.setCursor(0,1);
lcd.print("estado: ");
//escreve "ligada" se a bomba estivera ligada
if (bombaLigada == true) {
lcd.print("ligada");
}
//escreve "desligada" se a bomba estiver desligada
else if (bombaLigada == false) {
lcd.print("desligada");
}
delay(5000);
lcd.clear();
delay(50);
}