#include <LiquidCrystal_I2C.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#include <Keypad.h>
String txt_vaz1 = " ";
unsigned int vaz1 = 0;
uint8_t cont;
#define motor 2
#define botao 18
#define TRIG_PIN2 13
#define ECHO_PIN2 12
#define ledverde2 9
#define ledama2 10
#define ledverm2 11
#define TRIG_PIN1 15
#define ECHO_PIN1 14
#define ledverde1 3
#define ledama1 4
#define ledverm1 5
#define TRIG_PIN3 17
#define ECHO_PIN3 16
#define ledverde3 6
#define ledama3 7
#define ledverm3 8
LiquidCrystal_I2C lcd(0X27, 20, 4);
OneWire oneWire(24);
DallasTemperature sensor(&oneWire);
#define I2C_ADDR4 0x29
#define LCD_COLUMNS4 16
#define LCD_LINES4 2
LiquidCrystal_I2C lcd4(I2C_ADDR4, LCD_COLUMNS4, LCD_LINES4);
// IGOR
unsigned long time;
#define rows 4
#define cols 4
char keys [rows][cols] =
{{ '1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}};
byte rowpin[rows] = { 52,50,48,46};
byte colpin[cols] = {44,42,40,38};
Keypad keypad = Keypad( makeKeymap(keys), rowpin, colpin, rows, cols);
// FUNÇÕES ____________________________
float led_Distancia(short TRIG_PIN, short ECHO_PIN, short led_Verde, short led_Amarelo, short led_Vermelho) {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
float nivel = duration * 0.034 / 2;
if(nivel >= 300){
digitalWrite(led_Verde, HIGH);
digitalWrite(led_Amarelo, LOW);
digitalWrite(led_Vermelho, LOW);
} else if(nivel >= 50 && nivel <= 300){
digitalWrite(led_Verde, LOW);
digitalWrite(led_Amarelo, HIGH);
digitalWrite(led_Vermelho, LOW);
} else {
digitalWrite(led_Verde, LOW);
digitalWrite(led_Amarelo, LOW);
digitalWrite(led_Vermelho, HIGH);
}
return nivel;
}
void Teclado() {
for(cont=0;cont<4; )
{
char key = keypad.getKey();
if (key != NO_KEY)
{
Serial.print(key);
txt_vaz1[cont] = key;
cont++;
Serial.println(cont);
}
}
}
// FIM FUNÇÕES ____________________________
void setup() {
time = millis();
// Porta Serial
Serial.begin(115200);
// Definição dos Pinos
pinMode(TRIG_PIN2, OUTPUT);
pinMode(ECHO_PIN2, INPUT);
pinMode(ledverde2, OUTPUT);
pinMode(ledama2, OUTPUT);
pinMode(ledverm2, OUTPUT);
pinMode(TRIG_PIN1, OUTPUT);
pinMode(ECHO_PIN1, INPUT);
pinMode(ledverde1, OUTPUT);
pinMode(ledama1, OUTPUT);
pinMode(ledverm1, OUTPUT);
pinMode(TRIG_PIN3, OUTPUT);
pinMode(ECHO_PIN3, INPUT);
pinMode(ledverde3, OUTPUT);
pinMode(ledama3, OUTPUT);
pinMode(ledverm3, OUTPUT);
pinMode(botao, INPUT_PULLUP);
pinMode(motor, OUTPUT);
// Definindo LCD
lcd4.init();
lcd4.backlight();
lcd4.begin(16, 2);
lcd4.print("Enter Number:");
}
void loop() {
vaz1 = txt_vaz1.toInt();
Serial.println(vaz1);
lcd4.setCursor(0, 1);
lcd4.print(vaz1);
sensor.requestTemperatures();
Teclado();
// vai dar ruim esse delay, arruma isso ai
if(digitalRead(botao) == 0 )
{
digitalWrite(motor, HIGH);
delay(10000);
digitalWrite(motor, LOW);
}
int tempo = 3000; // TEMPO PARA ATUALIZAR EM (MS)
if((millis() - time ) >= tempo){
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("TANQUE 1:");
lcd.setCursor(11, 0);
lcd.print(led_Distancia(TRIG_PIN1, ECHO_PIN1, ledverde1, ledama1, ledverm1));
lcd.setCursor(0, 1);
lcd.print("TANQUE 2:");
lcd.setCursor(11, 1);
lcd.print(led_Distancia(TRIG_PIN2, ECHO_PIN2, ledverde2, ledama2, ledverm2));
lcd.setCursor(0, 2);
lcd.print("TANQUE 3:");
lcd.setCursor(11, 2);
lcd.print(led_Distancia(TRIG_PIN3, ECHO_PIN3, ledverde3, ledama3, ledverm3));
lcd.setCursor(0, 3);
lcd.print(F("Temp:"));
lcd.setCursor(11, 3);
lcd.print(sensor.getTempCByIndex(0));
time = millis();
}
/*
https://wokwi.com/projects/347175788714394195
https://wokwi.com/projects/357382046680658945
https://docs.wokwi.com/pt-BR/parts/wokwi-lcd1602
*/
}