#include <LiquidCrystal_I2C.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#include <Keypad.h>
#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
float nivel1;
float nivel2;
float nivel3;
String txt_vaz1 = " ";
unsigned int vaz1 = 0;
uint8_t cont;
const uint8_t ROWS = 4;
const uint8_t COLS = 4;
char keys[ROWS][COLS] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
uint8_t rowPins[ROWS] = { 52, 50, 48, 46 };
uint8_t colPins[COLS] = { 44, 42, 40, 38 };
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
//byte rowpin[rows] = { 52,50,48,46};
//byte colpin[cols] = {44,42,40,38};
LiquidCrystal_I2C lcd4(I2C_ADDR4, LCD_COLUMNS4, LCD_LINES4);
void Lerdistancia1CM(void)
{
digitalWrite(TRIG_PIN1, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN1, HIGH);
delayMicroseconds(2);
digitalWrite(TRIG_PIN1, LOW);
int duration = pulseIn(ECHO_PIN1, HIGH);
nivel1 = duration * 0.034 / 2;
if(nivel1 >= 300){
digitalWrite(ledverde1, HIGH);
digitalWrite(ledama1, LOW);
digitalWrite(ledverm1, LOW);
} else if(nivel1 >= 50 && nivel1 <= 300){
digitalWrite(ledverde1, LOW);
digitalWrite(ledama1, HIGH);
digitalWrite(ledverm1, LOW);
} else {
digitalWrite(ledverde1, LOW);
digitalWrite(ledama1, LOW);
digitalWrite(ledverm1, HIGH);
}
}
void Lerdistancia2CM(void)
{
digitalWrite(TRIG_PIN2, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN2, HIGH);
delayMicroseconds(2);
digitalWrite(TRIG_PIN2, LOW);
int duration = pulseIn(ECHO_PIN2, HIGH);
nivel2 = duration * 0.034 / 2;
if(nivel2 >= 300){
digitalWrite(ledverde2, HIGH);
digitalWrite(ledama2, LOW);
digitalWrite(ledverm2, LOW);
} else if(nivel2 >= 50 && nivel2 <= 300){
digitalWrite(ledverde2, LOW);
digitalWrite(ledama2, HIGH);
digitalWrite(ledverm2, LOW);
} else {
digitalWrite(ledverde2, LOW);
digitalWrite(ledama2, LOW);
digitalWrite(ledverm2, HIGH);
}
}
void Lerdistancia3CM(void)
{
digitalWrite(TRIG_PIN3, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN3, HIGH);
delayMicroseconds(2);
digitalWrite(TRIG_PIN3, LOW);
int duration = pulseIn(ECHO_PIN3, HIGH);
nivel3 = duration * 0.034 / 2;
if(nivel3 >= 300){
digitalWrite(ledverde3, HIGH);
digitalWrite(ledama3, LOW);
digitalWrite(ledverm3, LOW);
} else if(nivel3 >= 50 && nivel3 <= 300){
digitalWrite(ledverde3, LOW);
digitalWrite(ledama3, HIGH);
digitalWrite(ledverm3, LOW);
} else {
digitalWrite(ledverde3, LOW);
digitalWrite(ledama3, LOW);
digitalWrite(ledverm3, HIGH);
}
}
void Teclado(void)
{
digitalWrite(motor,1);
//for(cont=0;cont<4; )
// {
char key = keypad.getKey();
if (key != NO_KEY)
{
Serial.print(key);
txt_vaz1[cont] = key;
cont++;
if(cont>=4)cont=0;
//Serial.println(cont);
}
// }
Serial.println();
vaz1 = txt_vaz1.toInt();
Serial.println(vaz1);
lcd4.setCursor(0, 1);
lcd4.print(vaz1);
digitalWrite(motor,0);
}
void setup() {
Serial.begin(115200);
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);
lcd4.init();
lcd4.backlight();
lcd4.begin(16, 2);
lcd4.print("Enter Number:");
}
void loop()
{
sensor.requestTemperatures();
Lerdistancia1CM();
Lerdistancia2CM();
Lerdistancia3CM();
Teclado();
if(digitalRead(botao) == 0 )
{
digitalWrite(motor, HIGH);
delay(10000);
digitalWrite(motor, LOW);
}
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("TANQUE 1:");
lcd.setCursor(11, 0);
lcd.print(nivel1);
lcd.setCursor(0, 1);
lcd.print("TANQUE 2:");
lcd.setCursor(11, 1);
lcd.print(nivel2);
lcd.setCursor(0, 2);
lcd.print("TANQUE 3:");
lcd.setCursor(11, 2);
lcd.print(nivel3);
lcd.setCursor(0, 3);
lcd.print(F("Temp:"));
lcd.setCursor(11, 3);
lcd.print(sensor.getTempCByIndex(0));
//delay(1000);
/*
https://wokwi.com/projects/347175788714394195
https://wokwi.com/projects/357382046680658945
https://docs.wokwi.com/pt-BR/parts/wokwi-lcd1602
*/
}