#include <LiquidCrystal.h>
#include <Adafruit_Sensor.h> // Biblioteca DHT Sensor Adafruit
#include <DHT.h>
#include <DHT_U.h>
byte celsius[8]={B01111,B01001,B01001,B01111,B00000,B00000,B00000,B00000};
#define DHTTYPE DHT22 // define o tipo de dht
#define DHTPIN 2
DHT dht(DHTPIN, DHTTYPE);
// Define as conexões e cria o objeto para acesso
const int backLight = 10;
unsigned long int espera = 0;
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
int menu = 0;
int botdireita = 3;
int botesquerda = 4;
int botcima = 5;
int botbaixo = 6;
int botreset = A0; // botao responsavel por resetar as variaveis ajustaveis para suas posições iniciais
int motorled = 13; //led que representa o sistema de refrigeração
int temp = 0;
int setpoint = 25;
int motor = 0; // variavel do sistema de refrigeração, 1 = ligado, 0 = desligado
int tempoespera = 5;
unsigned long int ultimaMudanca = 0;
void setup() {
lcd.createChar(1,celsius); // caractere dos graus
pinMode(motorled, OUTPUT);
pinMode(botdireita, INPUT_PULLUP);
pinMode(botesquerda, INPUT_PULLUP);
pinMode(botcima, INPUT_PULLUP);
pinMode(botbaixo, INPUT_PULLUP);
pinMode(botreset, INPUT_PULLUP);
//Progama o pino de backlight como saída
pinMode(backLight, OUTPUT);
// Inicia o display e coloca uma mensagem
lcd.begin(16, 2);
digitalWrite(backLight, HIGH);
lcd.print(" PAINEL DE CONT.");
lcd.setCursor(0, 1);
lcd.print(" CAMARA FRIA 01 ");
// Acende o backlight
delay(1000);
Serial.begin(9600);
dht.begin(); //INICIALIZA A FUNÇÃO
}
void loop() {
if (espera <= millis()){
switch (menu) {
case (0):
MenuPrincipal();
break;
case (1):
MenuSetpoint();
break;
case (2):
MenuTempo();
break;
}
espera = millis() + 190;
}
Serial.print(" / Temperatura: "); //IMPRIME O TEXTO NA SERIAL
Serial.print(dht.readTemperature(), 0); //IMPRIME NA SERIAL O VALOR DE UMIDADE MEDIDO E REMOVE A PARTE DECIMAL
Serial.println("*C"); //IMPRIME O TEXTO NA SERIAL
}
void MenuPrincipal() { //menu = 0
int umidade = dht.readHumidity();
int temperatura = dht.readTemperature(); // leituras de temperatura do sensor e atribuição a variavel
if(millis() - ultimaMudanca >= tempoespera*1000){ //liga/desliga do sistema de refrigeração atraves do tempo de espera estabelecido
ultimaMudanca = millis();
if(temperatura == setpoint)
motor = 0;
else
motor = 1;
}
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temperatura);
lcd.print(" ");
lcd.print("SP:");
lcd.print(setpoint);
lcd.print(" ");
if(motor == 1) {
lcd.print("LIG. ");
digitalWrite(motorled, HIGH); // motor do sistema de refrigeração ligado
}
else if(motor == 0) {
lcd.print("DES. ");
digitalWrite(motorled, LOW); // motor do sistema de refrigeração desligado
}
lcd.setCursor(0, 1);
lcd.print("Ant. Prox.");
if(digitalRead(botdireita) == 0)
menu = 1; // leitura de botao
if(digitalRead(botesquerda) == 0)
menu = 2; // leitura de botao
if(digitalRead(botreset) == 0) { // reseta as variaveis para suas posições iniciais
setpoint = 25;
tempoespera = 5;
}
}
void MenuSetpoint() { //Menu = 1
lcd.setCursor(0, 0);
if(setpoint >= 0 && setpoint <= 9) {
lcd.print("AJUSTAR SP: 0");
lcd.print(setpoint);
lcd.write(1);
lcd.print("C");
lcd.setCursor(0, 1);
}
else {
lcd.print("AJUSTAR SP: ");
lcd.print(setpoint);
lcd.write(1);
lcd.print("C");
lcd.setCursor(0, 1);
}
lcd.print("Ant. Prox.");
if(digitalRead(botcima) == 0 && setpoint < 80)
setpoint++; // leitura de botao
if(digitalRead(botbaixo) == 0 && setpoint > -40)
setpoint = setpoint -1; // leitura de botao
if(digitalRead(botdireita) == 0)
menu = 2; // leitura de botao
if(digitalRead(botesquerda) == 0)
menu = 0; // leitura de botao
if(digitalRead(botreset) == 0) { // reseta as variaveis para suas posições iniciais
setpoint = 25;
tempoespera = 5;
}
}
void MenuTempo() { //Menu = 2
lcd.setCursor(0, 0);
lcd.print("AJUSTAR TE: ");
lcd.print(tempoespera);
lcd.print("s ");
lcd.setCursor(0, 1);
lcd.print("Ant. Prox.");
if(digitalRead(botcima) == 0 && tempoespera < 50)
tempoespera = tempoespera + 1; // leitura de botao
if(digitalRead(botbaixo) == 0 && tempoespera > 0)
tempoespera = tempoespera - 1; // leitura de botao
if(digitalRead(botdireita) == 0)
menu = 0; // leitura de botao
if(digitalRead(botesquerda) == 0)
menu = 1; // leitura de botao
if(digitalRead(botreset) == 0) { // reseta as variaveis para suas posições iniciais
setpoint = 25;
tempoespera = 5;
}
}