#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <SD.h>
#include <dht.h>
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include "RTClib.h"
float umidade_ar, distancia, temp_liquido, valor_encoder;
int dia;
dht DHT;
#define LDR_PIN 2
#define DHT22_PIN 5
#define ENCODER_CLK 2
#define ENCODER_DT 3
#define ENCODER_SW 4
#define LED 7
int counter = 0;
const float GAMMA = 0.7;
const float RL10 = 50;
void setup() {
// begin serial port
Serial.begin(9600);
setangelo();
}
//setup angelo
void setangelo()
{
Serial.println(DHT_LIB_VERSION);
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
pinMode(ENCODER_SW, INPUT_PULLUP);
attachInterrupt(0, readEncoder, FALLING);
pinMode(LDR_PIN, INPUT);
}
//setup angelo fim
void loop()
{
digitalWrite(LED,LOW);
loopangelo();
delay(2000);
alarme();
}
/***********************************
************ FUNÇÕES***************
***********************************/
//funções angelo//
void temperatura()
{
int chk = DHT.read22(DHT22_PIN);
float temp_ar = DHT.temperature;
Serial.print("temp_ar:");
Serial.println(temp_ar);
}
void umidade()
{
int chk = DHT.read22(DHT22_PIN);
float umid = DHT.humidity;
Serial.print("Umidade do Ar:");
Serial.println(umid);
}
void readEncoder()
{
int dtValue = digitalRead(ENCODER_DT);
if (dtValue == HIGH)
{
counter++; // Clockwise
Serial.println("Sentido Horário");
}
if (dtValue == LOW)
{
counter--;// Counterclockwise
Serial.println("Sentido AntiHorário");
}
}
int getCounter()
{
//Esta função devolve o valor da variavel counter.
int result;
cli(); //Desabilita as interrupções
result = counter; // Guarda o valor da variavel counter na variavel result
sei(); // Habilita as interrupções
return result;
}
void resetCounter()
{
noInterrupts();
counter = 0;
interrupts();
}
void vazao()
{
Serial.print("Pulsos = ");
Serial.println(getCounter());
if (digitalRead(ENCODER_SW) == LOW) //Verifica se alguem pressionou o botão do encoder, caso positivo, ele reseta o contador
{
resetCounter();
}
}
void luminosidade()
{
int analogValue = analogRead(A1);
float voltage = analogValue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
Serial.print("Room: ");
if (lux > 50) {
Serial.println("Light!");
} else {
Serial.println("Dark ");
}
Serial.print("Lux: ");
Serial.print(lux);
Serial.println(" ");
}
//loop angelo
void loopangelo()
{
temperatura();
umidade();
vazao();
luminosidade();
}
//fim das funções angelo
void alarme()
{
int chk = DHT.read22(DHT22_PIN);
float temp = DHT.temperature;
Serial.print(temp);
digitalWrite(LED,LOW);
if (temp>=26);
digitalWrite(LED,HIGH);
if (temp<=25);
digitalWrite(LED,HIGH);
delay(500);
}
//void lertemperatura()
//{
// //Código de temperatua de ar
// temp_ar = 0.0;
//}
//void verificar_alarmes()
//{ //Exemplo de função que define alarmes
//
// if ((temp_ar > 24) and (temp_ar <40))
// {
// ALARME = 1;
// }
//}
//void guardar_data()
//{
//
//}
//void ler_hora()
//{
//
//}
//void mostra_lcd()
//{
//
//}
//void mostrar_serial()
//{
// Serial.print("Temperatura = ");
// Serial.println(temp_ar);
//}