#include <LiquidCrystal.h>
// inicia a biblioteca com o numero das portas da interface
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#include <dht.h>
// Definindo o pino de dados
#define DHT22_PIN 7
#define BUZZER 19
#define LED 20
#define BOTAO 21
// Definindo o objeto
dht DHT;
// Variáveis de controle do LED e do BOTAO
bool led_ligado = false;
bool botao_pressionado = false;
bool temperatura_fora_intervalo = false;
void setup() {
// numero de colunas e linhas do lcd
lcd.begin(16,2);
// imprimindo etiquetas de Temperatura e Humidade no lcd
lcd.print("Temp: C");
pinMode(BUZZER, OUTPUT);
pinMode(LED, OUTPUT);
pinMode(BOTAO, INPUT);
}
void loop() {
// leitura da temperatura | nota: pode-se fazer um tratamento do retorno em caso de erro
int chk = DHT.read22(DHT22_PIN);
// configura o cursor para a coluna 0 e linha 1
lcd.setCursor(5,0);
lcd.print(DHT.temperature);
//lcd.setCursor(6,1);
//lcd.print(DHT.humidity);
//lcd.begin(0,1);
//lcd.print("Termina:");
// imprimindo o número de segundos desde o reset
lcd.setCursor(8,1);
lcd.print(millis()/1000);
// LED
// Se a temperatura for menor que 34 ou maior que 36, led acende
if (DHT.temperature < 34 || DHT.temperature > 45){
// temperatura fora do intervalo
temperatura_fora_intervalo = true;
// se o botão foi pressionado fora do intervalo
if (botao_pressionado) {
digitalWrite(LED, LOW);
noTone(BUZZER);
} else {
// se o led estiver apagado
if (!led_ligado) {
// acende o led
digitalWrite(LED, HIGH);
// led está ligado
led_ligado = true;
tone(BUZZER,391,250);
delay(1000);
}
}
// se botão for pressionado
if (digitalRead(BOTAO) == HIGH && !botao_pressionado) {
botao_pressionado = true;
}
} else {
// temperatura dentro do intervalo
temperatura_fora_intervalo = false;
// se botão for pressionado (dentro do intervalo), apaga o led
if (botao_pressionado) {
digitalWrite(LED, LOW);
botao_pressionado = false;
noTone(BUZZER);
} else {
// se o led estiver aceso, mas não há pressionamento do botão
if (led_ligado) {
digitalWrite(LED, LOW);
led_ligado = false;
noTone(BUZZER);
}
}
}
}