#include <EEPROM.h> // incluir a biblioteca
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
int addr = 0; // endereço de escrita na memória
#define botaoSet 2
#define botaoUp 3
#define botaoDown 4
//variaveis
unsigned long botaoInicio = 0;
unsigned long botaoTempo = 0;
bool configuracao = false;
bool configuracao_umidade = false;
bool configuracao_temperatura = false;
int configuracao_opcao = 1;
int valor_umidade = 0;
int valor_temperatura = 0;
void setup() {
pinMode(botaoSet, INPUT);
pinMode(botaoUp, INPUT);
pinMode(botaoDown, INPUT);
//setpoint_max
if (EEPROM.read(1)>80) // limita umidade a 80%
{
EEPROM.update(1 , 80);
}
if (EEPROM.read(2)>30)//limita temperatura a 30
{
EEPROM.update(2, 30);
}
lcd.init();
lcd.backlight();
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Umidade " + (String)EEPROM.read(1) + "%");
lcd.setCursor(1, 1);
lcd.print("Temperat " + (String)EEPROM.read(2) + "c");
Serial.begin(115200);
}
void loop() {
//Ao apertar o botão SET
if (botaoInicio == 0 && digitalRead(botaoSet) == HIGH)
{
botaoInicio = millis();
}
//Ao soltar o botão SET
if (botaoInicio > 0 && digitalRead(botaoSet) == LOW)
{
botaoTempo = millis() - botaoInicio;
botaoInicio = 0;
}
//entra e sai da configuração
if (botaoTempo > 1000)
{
switch (configuracao)
{
case false: //entra no menu configuracao
digitalWrite(LED_BUILTIN, HIGH);
configuracao = true;
botaoTempo = 0;
configuracao_opcao = 1;
valor_umidade = EEPROM.read(1);
valor_temperatura = EEPROM.read(2);
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Config umidade");
lcd.setCursor(1, 1);
lcd.print((String)valor_umidade + "%");
break;
case true: //sai do menu configuracao
configuracao = false;
digitalWrite(LED_BUILTIN, LOW);
botaoTempo = 0;
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Umidade " + (String)valor_umidade + "%");
EEPROM.update(1, valor_umidade);
lcd.setCursor(1, 1);
lcd.print("Temperat " + (String)valor_temperatura + "c");
EEPROM.update(2, valor_temperatura);
valor_umidade=0;
valor_temperatura=0;
break;
}
}
//navega na configuracao
if (botaoTempo > 0 && botaoTempo < 1000 && configuracao == true)
{
if (configuracao_opcao == 2)
{
configuracao_opcao = 1;
botaoTempo = 0;
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Config umidade");
lcd.setCursor(1, 1);
lcd.print((String)valor_umidade + "%");
}
else
{
configuracao_opcao = 2;
botaoTempo = 0;
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Config temperatura");
lcd.setCursor(1, 1);
lcd.print((String)valor_temperatura + "c");
}
}
//configura umidade
if (configuracao_opcao ==1 && configuracao==true)
{
if (digitalRead(botaoUp) == HIGH && valor_umidade < 80)
{
valor_umidade=valor_umidade+1;
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Config umidade");
lcd.setCursor(1, 1);
lcd.print((String)valor_umidade + "%");
delay(10);
}
if (digitalRead(botaoDown) == HIGH && valor_umidade > 0)
{
valor_umidade=valor_umidade-1;
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Config umidade");
lcd.setCursor(1, 1);
lcd.print((String)valor_umidade + "%");
delay(10);
}
}
//Configura temperatura
if (configuracao_opcao ==2 && configuracao==true)
{
if (digitalRead(botaoUp) == HIGH && valor_temperatura < 30)
{
valor_temperatura=valor_temperatura+1;
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Config temperatura");
lcd.setCursor(1, 1);
lcd.print((String)valor_temperatura + "c");
delay(10);
}
if (digitalRead(botaoDown) == HIGH && valor_temperatura > 0)
{
valor_temperatura=valor_temperatura-1;
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Config temperatura");
lcd.setCursor(1, 1);
lcd.print((String)valor_temperatura + "c");
delay(10);
}
}
delay(100);
}