#include <LiquidCrystal_I2C.h>
#include <dht.h>
#define dataPin 5
#define Red 2
#define Green 3
#define Blue 4
#define led_var 13
#define led_tmp 12
#define led_umd 11
unsigned long millisAnteriorRGB = 0;
unsigned long millisAnteriorLCD = 0;
float somaTmp = 0;
float somaUmd = 0;
float somaAng = 0;
float mediaTmp = 0;
float mediaUmd = 0;
float mediaAng = 0;
int contador = 0;
int telaAtual = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
dht DHT;
void setup() {
pinMode(Red, OUTPUT);
pinMode(Green, OUTPUT);
pinMode(Blue, OUTPUT);
pinMode(led_var, OUTPUT);
pinMode(led_tmp, OUTPUT);
pinMode(led_umd, OUTPUT);
lcd.init();
lcd.setBacklight(HIGH);
}
void loop() {
unsigned long millisAtual = millis();
int RedLeitura = digitalRead(Red);
int GreenLeitura = digitalRead(Green);
int BlueLeitura = digitalRead(Blue);
int pot = analogRead(A3);
int angPot = map(pot, 0, 1023, 0, 270);
int readData = DHT.read22(dataPin);
float t = DHT.temperature;
float h = DHT.humidity;
somaTmp += t;
somaUmd += h;
somaAng += angPot;
contador++;
if (contador >= 100) {
mediaTmp = somaTmp / 100.0;
mediaUmd = somaUmd / 100.0;
mediaAng = somaAng / 100.0;
somaTmp = 0;
somaUmd = 0;
somaAng = 0;
contador = 0;
}
float t_led = map(mediaTmp, 10, 20, 0, 255);
if (mediaAng >= 90) {
if ((millisAtual - millisAnteriorRGB) > 1000) {
millisAnteriorRGB = millisAtual;
if (RedLeitura == LOW && GreenLeitura == LOW && BlueLeitura == LOW) {
digitalWrite(Red, HIGH);
}
if (RedLeitura == HIGH) {
digitalWrite(Red, LOW);
digitalWrite(Green, HIGH);
}
if (GreenLeitura == HIGH) {
digitalWrite(Green, LOW);
digitalWrite(Blue, HIGH);
}
if (BlueLeitura == HIGH) {
digitalWrite(Blue, LOW);
}
}
}
else {
digitalWrite(Red, LOW);
digitalWrite(Green, LOW);
digitalWrite(Blue, LOW);
}
if (mediaTmp >= 10 && mediaTmp <= 20) {
analogWrite(led_var, t_led);
}
if (mediaTmp > 20) {
digitalWrite(led_var, HIGH);
}
if (mediaTmp < 10) {
digitalWrite(led_var, LOW);
}
if (mediaTmp >= 40) {
digitalWrite(led_tmp, HIGH);
}
else {
digitalWrite(led_tmp, LOW);
}
if (mediaUmd >= 75) {
digitalWrite(led_umd, HIGH);
}
else {
digitalWrite(led_umd, LOW);
}
if ((millisAtual - millisAnteriorLCD) > 1000) {
millisAnteriorLCD = millisAtual;
if (telaAtual == 0) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tmp. = ");
lcd.print(mediaTmp);
lcd.print(" ");
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Umd. = ");
lcd.print(mediaUmd);
lcd.print((char)37);
telaAtual = 1;
}
else if (telaAtual == 1) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Ang. = ");
lcd.print(mediaAng);
lcd.print((char)223);
telaAtual = 0;
}
}
}