int tempo = 1000;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>;
#include <dht.h>;
#define sensordht 8 // Define o número do pino onde o sensor está conectado
#define pot A0 // Pino do potenciômetro
#define ledBaixaTemp 13
#define ledAltaTemp 12
#define ledAltaUmidade 11
#define ledVermelho 7
#define ledVerde 4
#define ledAzul 2
dht sensorDHT; // Criando o objeto para o sensor DHT
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Variáveis para controle do tempo com millis()
unsigned long previousMillisLCD = 1000;
unsigned long previousMillisRGB = 1000;
unsigned long previousMillisTemp = 1000;
unsigned long previousMillisUmidade = 1000;
unsigned long intervalLCD = 1000;
unsigned long intervalRGB = 1000;
unsigned long intervalTemp = 1000;
unsigned long intervalUmidade = 1000;
void setup() {
lcd.init();
pinMode(ledBaixaTemp, OUTPUT);
pinMode(ledAltaTemp, OUTPUT);
pinMode(ledAltaUmidade, OUTPUT);
pinMode(ledVermelho, OUTPUT);
pinMode(ledVerde, OUTPUT);
pinMode(ledAzul, OUTPUT);
}
void loop() {
unsigned long currentMillis = millis();
// Atualização do LCD
if (currentMillis - previousMillisLCD >= intervalLCD) {
previousMillisLCD = currentMillis;
int leituraSensor = sensorDHT.read22(sensordht); // DHT22/AM2302
float temperatura = sensorDHT.temperature; // Lendo o valor da temperatura
float umidade = sensorDHT.humidity; // Lendo o valor da umidade
int valpot = analogRead(pot); // Leitura do potenciômetro
int angulo = map(valpot, 0, 1023, 0, 270); // Mapeamento do ângulo
lcd.setBacklight(HIGH);
lcd.setCursor(1, 0);
lcd.print("temp. = ");
lcd.print(temperatura);
lcd.print(" C");
lcd.setCursor(1, 1);
lcd.print("humid. = ");
lcd.print(umidade);
lcd.print("%");
lcd.clear();
lcd.setBacklight(LOW);
lcd.setBacklight(HIGH);
lcd.print("Angulo =");
lcd.print(angulo);
}
// Controle do LED RGB baseado no ângulo
if (currentMillis - previousMillisRGB >= intervalRGB) {
previousMillisRGB = currentMillis;
int valpot = analogRead(pot);
int angulo = map(valpot, 0, 1023, 0, 270);
if (angulo < 90) {
analogWrite(ledVermelho, 255);
analogWrite(ledVerde, 0);
analogWrite(ledAzul, 0);
} else if (angulo < 180) {
analogWrite(ledVermelho, 0);
analogWrite(ledVerde, 255);
analogWrite(ledAzul, 0);
} else {
analogWrite(ledVermelho, 0);
analogWrite(ledVerde, 0);
analogWrite(ledAzul, 255);
}
}
// Controle do LED para baixa temperatura
if (currentMillis - previousMillisTemp >= intervalTemp) {
previousMillisTemp = currentMillis;
float temperatura = sensorDHT.temperature;
if (temperatura < 10) {
analogWrite(ledBaixaTemp, 0); // LED apagado para temperaturas abaixo de 10°C
} else if (temperatura <= 20) {
int brilho = map(temperatura, 10, 20, 0, 255);
analogWrite(ledBaixaTemp, brilho);
} else {
analogWrite(ledBaixaTemp, 255); // LED totalmente aceso para temperaturas acima de 20°C
}
}
// Controle do LED para alta temperatura
if (currentMillis - previousMillisTemp >= intervalTemp) {
previousMillisTemp = currentMillis;
float temperatura = sensorDHT.temperature;
if (temperatura > 40) {
digitalWrite(ledAltaTemp, HIGH);
} else {
digitalWrite(ledAltaTemp, LOW);
}
}
// Controle do LED para alta umidade
if (currentMillis - previousMillisUmidade >= intervalUmidade) {
previousMillisUmidade = currentMillis;
float umidade = sensorDHT.humidity;
if (umidade > 75) {
digitalWrite(ledAltaUmidade, HIGH);
} else {
digitalWrite(ledAltaUmidade, LOW);
}
}
}