#include <Servo.h>
#include <LiquidCrystal.h>
#include <DHT.h>
//dht
#define pinDHT 9
#define model DHT22
DHT dht(pinDHT, model);
//servo
long servoPin=7;
Servo servo1;
float grau;
//botao
bool bot=false;
long tempbot;
//movimento
int leitura=0; //variavel para armazenar a leitura do sensor
bool estadoSensor=false; //estado do sensor
//lcd
LiquidCrystal lcd(14, 15, 16, 18, 19, 20, 21);
long tempoLcd;
bool mostrarTemperatura = true;
//24 horas
long temphoras;
long horas = 0;
void setup() {
Serial.begin(9600);
temphoras = millis();
//led
pinMode(13, OUTPUT);//vermelho
pinMode(12, OUTPUT);//verde
//botao
pinMode(11, INPUT_PULLUP);
tempbot = millis();
//buzzer porta - 10
//dht
dht.begin();
//movimento
pinMode(8, INPUT);//sensor de movimento
//servo
grau=90;
servo1.attach(servoPin);
//lcd
lcd.begin(16,2);
tempoLcd = millis();
lcd.print("Sis desligado");
}
void loop() {
// Ligar e desligar
if(digitalRead(11) == 0){ // Quando o botão for pressionado
if(millis() - tempbot > 1000){
bot = !bot;
if(bot == false){
lcd.clear();
lcd.print("Sis desligado");
digitalWrite(13, LOW);
digitalWrite(12, LOW);
estadoSensor = false;
noTone(10);
}else{
lcd.clear();
lcd.print("Alarm:OFF/");
digitalWrite(12, HIGH);
lcd.setCursor(9,1);
lcd.print("T:");
}
tempbot = millis();
}
}
if(bot){
leitura = digitalRead(8);
if(leitura == HIGH){
lcd.setCursor(10, 0);
lcd.print("MOV");//ESTA TENDO MOVIMENTO NO SENSOR
lcd.setCursor(0, 1);
lcd.print("M.Detect");
}else{
lcd.setCursor(10, 0);
lcd.print("---");//NENHUM MOVIMENTO DETECTADO
lcd.setCursor(0, 1);
lcd.print("SemMovim");
}
//servo motor, janela
//0 aberto
//90 fechado
servo1.write(grau);
//dht
float umidade = dht.readHumidity();
float temperatura = dht.readTemperature();
if (millis() - tempoLcd >= 5000) { // A cada 5 segundos
tempoLcd = millis(); // Atualiza o tempo do LCD
lcd.setCursor(9, 1);
if (mostrarTemperatura) {
lcd.print("T:");
lcd.print(temperatura);
mostrarTemperatura = false; // Muda para mostrar a umidade na próxima vez
} else {
lcd.print("U:");
lcd.print(umidade);
mostrarTemperatura = true; // Muda para mostrar a temperatura na próxima vez
}
}
//temperatura e umidade
if(temperatura > 30 || umidade < 30){
tone(10, 1400);
grau = 0;
digitalWrite(13, HIGH);
digitalWrite(12, LOW);
}else{
noTone(10);
grau = 90;
digitalWrite(13, LOW);
digitalWrite(12, HIGH);
}
//codigo horas lcd
if(millis() - temphoras > 1000){
horas = (millis() % 24000) / 1000;
if(horas < 10){
lcd.setCursor(14,0);
lcd.print("0");
lcd.print(horas);
}else{
lcd.setCursor(14,0);
lcd.print(horas);
}
temphoras = millis();
}
if(digitalRead(8)==1){
estadoSensor = true;
}
if(estadoSensor){
if(horas < 6 || horas >=22){
digitalWrite(13, HIGH); // Liga LED vermelho
digitalWrite(12, LOW); // Desliga LED verde
tone(10, 1600); // Ativa o buzzer
lcd.setCursor(0,0);
lcd.print("Alarm:ON!");
} else {
digitalWrite(13, LOW); // Desliga LED vermelho
digitalWrite(12, HIGH); // Liga LED verde
lcd.setCursor(0,0);
lcd.print("Alarm:OFF");
estadoSensor = false;
}
}
}
}