#include <WiFi.h>
#include <HTTPClient.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
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 colPins[COLS] = { 15, 27, 2, 17 };
uint8_t rowPins[ROWS] = { 4, 5, 16, 18 };
LiquidCrystal_I2C lcd(0x27, 20, 4);
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
//-------------------
#define TRIG 12
#define ECHO 14
//-------------------
int posBox = 0;
int distancia = 0;
long duration;
int distance;
bool sel = 0;
int Pag = 0;
int Pag_s = 1;
int menu = 0;
int menu_s1 = 1;
int menu_Limite = 30;
//-------------------
//-------------------
String tex1 = "teste 1 ";
String tex2 = "teste 2 ";
String tex3 = "teste 3 ";
String tex4 = "teste 4 ";
String tex5 = "teste 5 ";
String tex6 = "teste 6 ";
String tex7 = "teste 7 ";
String tex8 = "teste 8 ";
String tex9 = "teste 9 ";
String tex10 = "teste 10";
String tex11 = "teste 11";
String tex12 = "teste 12";
String tex13 = "teste 13";
String tex14 = "teste 14";
String tex15 = "teste 15";
String tex16 = "teste 16";
String tex17 = "teste 17";
String tex18 = "teste 18";
String tex19 = "teste 19";
String tex20 = "teste 20";
String tex21 = "teste 21";
String tex22 = "teste 22";
String tex23 = "teste 23";
String tex24 = "teste 24";
String tex25 = "teste 25";
String tex26 = "teste 26";
String tex27 = "teste 27";
String tex28 = "teste 28";
String tex29 = "teste 29";
String tex30 = "teste 30";
void setup(){
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
Serial.begin(115200);
lcd.begin(20, 4);
lcd.init();
lcd.clear();
lcd.backlight();
lcd.cursor();
logoEmpresa();
}
void loop(){
switch(menu){
case 0: Pag = 0; break;
case 1: Pag = 0; break;
case 2: Pag = 0; break;
case 3: Pag = 1; break;
case 4: Pag = 1; break;
case 5: Pag = 1; break;
case 6: Pag = 2; break;
case 7: Pag = 2; break;
case 8: Pag = 2; break;
case 9: Pag = 3; break;
case 10: Pag = 3; break;
case 11: Pag = 3; break;
case 12: Pag = 4; break;
case 13: Pag = 4; break;
case 14: Pag = 4; break;
case 15: Pag = 5; break;
case 16: Pag = 5; break;
case 17: Pag = 5; break;
case 18: Pag = 6; break;
case 19: Pag = 6; break;
case 20: Pag = 6; break;
case 21: Pag = 7; break;
case 22: Pag = 7; break;
case 23: Pag = 7; break;
case 24: Pag = 8; break;
case 25: Pag = 8; break;
case 26: Pag = 8; break;
case 27: Pag = 9; break;
case 28: Pag = 9; break;
case 29: Pag = 9; break;
case 30: Pag =10; break;
}
//posBox = numberBox(posBox, 0, 1, 5);
sensor();
if(menu != menu_s1){
menu_s1 = menu;
textBoxSeletion(tex1 ,0,0, 0,0);
textBoxSeletion(tex2 ,0,1, 1,0);
textBoxSeletion(tex3 ,0,2, 2,0);
textBoxSeletion(tex4 ,0,0, 3,1);
textBoxSeletion(tex5 ,0,1, 4,1);
textBoxSeletion(tex6 ,0,2, 5,1);
textBoxSeletion(tex7 ,0,0, 6,2);
textBoxSeletion(tex8 ,0,1, 7,2);
textBoxSeletion(tex9 ,0,2, 8,2);
textBoxSeletion(tex10,0,0, 9,3);
textBoxSeletion(tex11,0,1,10,3);
textBoxSeletion(tex12,0,2,11,3);
textBoxSeletion(tex13,0,0,12,4);
textBoxSeletion(tex14,0,1,13,4);
textBoxSeletion(tex15,0,2,14,4);
textBoxSeletion(tex16,0,0,15,5);
textBoxSeletion(tex17,0,1,16,5);
textBoxSeletion(tex18,0,2,17,5);
textBoxSeletion(tex19,0,0,18,6);
textBoxSeletion(tex20,0,1,19,6);
textBoxSeletion(tex21,0,2,20,6);
textBoxSeletion(tex22,0,0,21,7);
textBoxSeletion(tex23,0,1,22,7);
textBoxSeletion(tex24,0,2,23,7);
textBoxSeletion(tex25,0,0,24,8);
textBoxSeletion(tex26,0,1,25,8);
textBoxSeletion(tex27,0,2,26,8);
textBoxSeletion(tex27,0,0,27,9);
textBoxSeletion(tex28,0,1,28,9);
textBoxSeletion(tex29,0,2,29,9);
textBoxSeletion(tex30,0,0,30,10);
}
menu++;
delay(1000);
if(menu > menu_Limite)menu = 0;
if(menu < 0)menu = menu_Limite;
}
void sensor(){
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
duration = pulseIn(ECHO, HIGH);
distance = duration * 0.017;
if(distancia != distance){
distancia = distance;
}
}
long numberBox(long valorInicial, int x, int y, int tamMax) {
char confirma ='A';
char cancela ='B';
char apaga = 'C';
String input = String(valorInicial);
if (input.length() > tamMax) input = input.substring(0, tamMax);
bool editando = true;
lcd.cursor(); // Ativa o cursor
// Desenho inicial
lcd.setCursor(x, y);
lcd.print(input);
while (editando) {
// Lógica para posicionar o cursor EM CIMA do último dígito
if (input.length() > 0) {
lcd.setCursor(x + input.length() - 1, y);
} else {
lcd.setCursor(x, y);
}
lcd.cursor(); // Ativa o cursor
char key = keypad.getKey();
if (key) {
if (key >= '0' && key <= '9') {
if (input.length() < tamMax) {
input += key;
lcd.setCursor(x, y);
lcd.noCursor();
lcd.print(input);
}
}
else if (key == apaga) {
if (input.length() > 0) {
// Limpa o caractere visualmente antes de remover da String
lcd.setCursor(x + input.length() - 1, y);
lcd.noCursor();
lcd.print(" ");
input.remove(input.length() - 1);
// Reimprime a String atualizada para garantir alinhamento
lcd.setCursor(x, y);
lcd.noCursor();
lcd.print(input);
}
}
else if (key == confirma) {
editando = false;
}
else if (key == cancela) {
lcd.noCursor();
lcd.setCursor(x, y);
lcd.print(valorInicial);
return valorInicial;
}
}
delay(30);
}
lcd.noCursor(); // Desliga o cursor ao sair
return input.length() > 0 ? input.toInt() : 0;
}
void logoEmpresa(){
int i = 0;
byte Bar_Ini[8] = {
B01111,
B10000,
B10111,
B10111,
B10111,
B10111,
B10000,
B01111
};
byte Bar_Mid_Clear[8] = {
B11111,
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B11111
};
byte Bar_Mid_Full[8] = {
B11111,
B00000,
B11111,
B11111,
B11111,
B11111,
B00000,
B11111
};
byte Bar_End_Clear[8] = {
B11110,
B00001,
B00001,
B00001,
B00001,
B00001,
B00001,
B11110
};
byte Bar_End_Full[8] = {
B11110,
B00001,
B11101,
B11101,
B11101,
B11101,
B00001,
B11110
};
//declara caracters especiais
lcd.createChar(1, Bar_Ini);
lcd.createChar(2, Bar_Mid_Clear);
lcd.createChar(3, Bar_Mid_Full);
lcd.createChar(4, Bar_End_Clear);
lcd.createChar(5, Bar_End_Full);
lcd.noCursor();
EscreveTexto("Familia",6,0,1);
EscreveTexto("Luz",8,1,1);
lcd.setCursor(0,3);
lcd.write(1);
while(i<18){
i++;
lcd.write(2);
}
lcd.setCursor(19,3);
lcd.write(4);
lcd.display();
delay(100);
i = 0;
lcd.setCursor(1,3);
while(i<18){
i++;
lcd.write(3);
delay(50);
}
lcd.setCursor(19,3);
lcd.write(5);
delay(2000);
lcd.clear();
}
void EscreveTexto(String Tex, int nc, int nl, int serial){
lcd.setCursor(nc,nl);
lcd.print(Tex);
switch(serial){
case 1: Serial.println(Tex); break;
case 2: Serial.print (Tex); break;
default:break;
}
}
void WriteNumberInt(int n,int c,int r,int serial){
lcd.setCursor(c,r);
if(n < 10)lcd.print(" "+String(n));
else if(n < 100)lcd.print(" "+String(n));
else lcd.print(String(n));
switch(serial){
case 1: Serial.println(n); break;
case 2: Serial.print (n); break;
default:break;
}
}
void textBoxSeletion(String text,int Cl,int Ln,int Seletion,int Page){
if(Page == Pag && !sel){
if(menu == Seletion)EscreveTexto(">"+text, Cl,Ln,1);
else EscreveTexto(" "+text, Cl,Ln,1);
}
}