#include <LiquidCrystal.h>
#include <DHT.h>
#define DHTPIN 8 // Pino de dados conectado ao DHT22
#define DHTTYPE DHT22 // Tipo do sensor DHT
#define BOTAO 7 // Pino do botão
#define BUTTON_MIN_PIN 10 // Pino do botão para ajustar o valor mínimo da temperatura
#define BUTTON_MAX_PIN 9 // Pino do botão para ajustar o valor máximo da temperatura
// Inicializa o objeto LiquidCrystal
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Inicializa o objeto DHT
DHT dht(DHTPIN, DHTTYPE);
int temp_min = 20;
int temp_max = 37;
int time = 0;
unsigned int tela = 0;
unsigned int aux = 0;
// Lógica do botão (tela 2)
void DimAumTemp(){
// Limpando LCD (limpando tela 0)
lcd.clear();
// Exibir tela 1
ajuste_temp();
// Ajuste de temperatura mínima
while(!(digitalRead(BOTAO) == LOW)){ // Enquanto botão (preto) não for pressionado
if(digitalRead(BUTTON_MIN_PIN) == LOW) { // Se botão (esquerda) for apertado
temp_min -= 1.0; // decrementa
delay(200);
ajuste_temp(); // atualiza lcd com a nova temperatura
}
if(digitalRead(BUTTON_MAX_PIN) == LOW) { // Se botão (direita) for apertado
temp_min += 1.0; // incrementa
delay(200);
ajuste_temp(); // atualiza lcd com a nova temperatura
}
}
// Espera um segundo
delay(300);
// Ajuste de temperatura máxima
while(!(digitalRead(BOTAO) == LOW)){ // Enquanto botão (preto) não for pressionado
if(digitalRead(BUTTON_MIN_PIN) == LOW) { // Se botão (esquerda) for apertado
temp_max -= 1.0; // decrementa
delay(200);
ajuste_temp(); // atualiza lcd com a nova temperatura
}
if(digitalRead(BUTTON_MAX_PIN) == LOW) { // Se botão (esquerda) for apertado
temp_max += 1.0; // incrementa
delay(200);
ajuste_temp(); // atualiza lcd com a nova temperatura
}
}
// Chama função para ler temperatura do sensor, e incrementa a tela
setAlarme();
tela++;
delay(200);
}
// Tela 0: (P&R tech's)
void showHelloMessage() {
// Limpa o display LCD
lcd.clear();
// Escreve a mensagem "Olá" no display LCD
lcd.print("Ola, P&R tech's");
// Espera 2 segundos
delay(2000);
// Incrementa para próxima tela (1)
tela++;
// Limpando LCD (limpando tela 0)
lcd.clear();
// // Exibir tela 1
configuracao();
// Exibe tela 1
//ajuste_temp();
}
// Tela 1: (Escolha a escala de temperatura)
void configuracao(){
// Limpa o display LCD
lcd.clear();
// Na primeira linha e coluna, seta "Escolha:"
lcd.print("Escolha o modo:");
// Na segunda linha primeira coluna, seta "Celsius" como primeira opção
lcd.setCursor(0, 1);
lcd.print("1(C)");
// Na segunda linha e sexta coluna, seta "Kelvin" como segunda opção
lcd.setCursor(6, 1);
lcd.print("2(K)");
// Na segunda linha e coluna doze, seta "Fahrenheit" como terceira opção
lcd.setCursor(12, 1);
lcd.print("3(F)");
// Próxima tela
tela++;
}
// Tela 2: (Mínimo: X °C, Máximo: Y °C)
void ajuste_temp(){
// Limpa o display LCD
lcd.clear();
// Na primeira linha e coluna, seta "Min:"
lcd.setCursor(0, 0);
lcd.print("Minimo: ");
// Seguido da temperatura mínima escolhida, seguido de "C"
lcd.print(temp_min);
lcd.print("C");
// Na segunda linha e primeira coluna, seta "Max"
lcd.setCursor(0, 1);
lcd.print("Maximo: ");
// Seguido da temperatura máxima escolhida, seguido de "C"
lcd.print(temp_max);
lcd.print("C");
}
// Tela 3: ()
void setAlarme(){
// Limpa o display LCD
lcd.clear();
// Escreve a mensagem "Olá" no display LCD
lcd.print("LED:");
lcd.setCursor(8,0);
//lcd.print(OnOff);
lcd.setCursor(0,1);
lcd.print("Buzzer:");
//lcd.print(OnOff);
// Próxima tela
tela++;
}
// Tela 4: (Temperatura atual: X °C, mínimo e máximo setados)
void showTemperature(){
// Lê a temperatura do sensor DHT
float temperatura = dht.readTemperature();
// Verifica se a leitura da temperatura foi bem-sucedida
if (isnan(temperatura)) {
lcd.clear();
lcd.print("Erro ao ler temp.");
} else {
// Limpa o display LCD
lcd.clear();
// Escreve a temperatura atual no display LCD
lcd.print(" Temp: ");
lcd.print(temperatura);
lcd.print("C");
// Escreve temperatura máxima e mínima que a água pode estar
lcd.setCursor(0, 1);
lcd.print("Min:");
lcd.print(temp_min);
lcd.print("C");
lcd.print(" Max:");
lcd.print(temp_max);
lcd.print("C");
}
// Próxima tela
tela++;
}
//tela 5
void config2(){
// Limpa o display LCD
lcd.clear();
// Escreve a mensagem "Olá" no display LCD
lcd.print("config2");
}
//tela 6
void config3(){
// Limpa o display LCD
lcd.clear();
// Escreve a mensagem "Olá" no display LCD
lcd.print("config3");
}
void setup() {
// Inicializa o display LCD com 16 colunas e 2 linhas
lcd.begin(16, 2);
// Inicializa o sensor DHT
dht.begin();
// Configura o pino do botão como entrada e habilita o resistor pull-up interno
pinMode(BOTAO, INPUT_PULLUP);
pinMode(BUTTON_MIN_PIN, INPUT_PULLUP); // esquerda / diminui
pinMode(BUTTON_MAX_PIN, INPUT_PULLUP); // direita / aumenta
// Exibe a mensagem inicial
showHelloMessage();
}
// Três modos de configurações
// 1º Setar mínimo e máximo FEITO
// 2º Escala de temperatura TERMINAR
// 3º Tipo de alarme FAZER
void loop() {
// tela inicia em 0 (P&R)
// depois vai automaticamente para a 1 (definir mín e máx)
// Verifica o estado do botão
// Verifica se estamos na tela (1) de ajuste de temperatura
//AJEITAR LÓGICA
//if(tela == 1) DimAumTemp(); showTemperature();
if(digitalRead(BOTAO) == LOW) // Se apertado
{
//tela++; // Incrementa tela
delay(300);
if (tela == 2) // Se tela = segunda
{
ajuste_temp();
DimAumTemp();
}
else if (tela == 3) // Se tela = terceira
{
setAlarme();
}
else if (tela == 4)
{
showTemperature(); // Temperatura atual: X °C, mínimo e máximo setados
}
else // Se incrementar para um número diferente dos considerados anteriormente, volta a ser a primeira tela
{
tela = 1; // Reiniciar o loop
configuracao(); // Aparecerá para setar escala
}
//fazer o sistema de voltar
delay(200); // Aguarda um curto período para evitar rebotes
}
/*else if(tela == 3){
//config 1
if(digitalRead(BUTTON_MIN_PIN) == LOW){
config1();
delay(200);
}
//config 2
if(digitalRead(BOTAO) == LOW){
config2();
delay(200);
}
//config 3
if(digitalRead(BUTTON_MAX_PIN) == LOW){
config3();
delay(200);
}
}*/
}