/*-------------------------Descrição do Funcionamento do Programa----------------------------------
Neste programa o valor de temperatura e humidade obtidos por um sensor DHT é indicado em um display LCD
Ao pressionar um botão a luz de fundo do display pode ser ligada ou desligada
--------------------------------Conceituações Teóricas-----------------------------------------------
O protocolo I²C(Inter-Integrated Circuit) foi idealizado para conectar diversos dispositivos (periféricos)
utilizando apenas as duas linhas de dados (SDA e SCL) Serial Data e Serial Clock.
A ideia principal é definir um endereço hexadecimal para cada dispositivo e no momento de comunicação
somente o dispositivo solicitado responderá.
O sensor DHT11 é um sensor de temperatura e umidade com uma sinal digital em sua saída.
Sua tecnologia garante excelente estabilidade e confiabilidade.
Este sensor inclui um elemento resistivo do tipo NTC que faz a medição da temperatura.
Possui excelente qualidade, resposta rápida, habilidade de anti-interferência.
Faixa de temperatura recomendada para leitura: -20 a 60 ºC
Faixa de umidade recomendada para leitura: 5 a 95 %
Note que este sensor só consegue lhe dar uma nova leitura a cada 2 segundos, portanto tenha isso em mente quando for usá-lo.
*/
//-------------------------Inclusão de bibliotecas-----------------------------
#include<DHT.h> //Biblioteca para leitura do sensor de temperatura e humidade
#include<LiquidCrystal_I2C.h> //Biblioteca do display LCD
//----------------------------Definições para facilitar a compreenção e organização do programa------------------------------
#define DHTTYPE DHT11
#define DHTPIN 11
#define BackLight 8
//-----------------------------Funções de configuração de dispositivos------------------------------------------
DHT dht(DHTPIN,DHTTYPE);//Função que recebe como parâmetros (o pino que efetuará a leitura do sensor, e o tipo de sensor utilizado)
LiquidCrystal_I2C lcd(0x27,16,2); // Criando um LCD de 16x2 no endereço 0x27
//Configura o endereço do display 0x27 na comunicação I2C
//Configura um display com 16 colunas
//Configura um display com 2 linhas
//-----------------------------------------Declaração de variáveis----------------------------------------
float temp,hum,oldtemp;//Variáveis para armazenam o valor da humidade como um número float
int intHum, old_intHum;//Variáveis para armazenam o valor da humidade como um número inteiro
//---------------------------------Função que efetua as configurações iniciais do controlador--------------------
void setup()
{
lcd.begin(16,2);//Configura para utilização LCD 16x2
lcd.init();//Executa a função inicial do display
lcd.clear();//Limpa os dados que eventualmente possam estar indicados no display
dht.begin();//Inicializa o sensor DHT
pinMode(BackLight,INPUT);//Configura o botão empregado como entrada de dados
}
// -----------------------------------Função principal de fica em repetição ---------------------------------------
void loop()
{
bool i = 0;//variável que indica o estado da luz de fundo(BackLight) i=1 Ligado i=0 Desligado
hum = dht.readHumidity();//Efetua a leitura da humidade e atribui o valor à variável hum
// A leitura da temperatura em graus Célsius é o padrão
temp = dht.readTemperature();//Efetua a leitura da Temperatura em °C e atribui o valor à variável temp
// Leitura da temperatura em Fahrenheit (isFahrenheit = true)
//temp = dht.readTemperature(true);//Leitura da
intHum = (int) hum;//Operador de conversão cast, para converter de floast para inteiro
if(digitalRead(BackLight) == 1 && i==0)//Ligar o BackLight por meio do botão
{
lcd.backlight();// BackLight acende
i = 1; //Atualiza o estado do BackLight como ligado
delay(1000);
}
if(digitalRead(BackLight) == 1 && i==1)//Desligar o BackLight por meio do botão
{
lcd.noBacklight();//o BackLight apaga
i = 0;//Atualiza o estado do BackLight como desligado
delay(2000);
}
//Atualiza o valor da temperatura e da humidade no display, apenas se houver mudança em algum deles
//A lógica empregada evita a atualização do display sem que haja mudança na leitura do sensor
if((temp != oldtemp) or (intHum != old_intHum))
{
lcd.clear();//Limpa os dados do display
lcd.setCursor(0,0);//posiciona o cursor
lcd.print("TEMPERAT. ");//Texto que antecede a informação no display
lcd.setCursor(10,0);
lcd.print(temp,1);//Envia um float(valor da temperatura) para o display com uma casa decimal
lcd.setCursor(15,0);//Posiciona o cursor
lcd.print("C");
lcd.setCursor(2,1);
lcd.print("HUMIDADE");//Texto que antecede a informação no display
lcd.setCursor(11,1);
lcd.print(intHum);//Envia para o display o valor da humidade
lcd.setCursor(13,1);
lcd.print("%");
delay(100);
oldtemp=temp;//Atualiza o valor da leitura anterior
old_intHum=intHum;//Atualiza o valor da leitura anterior
}
}