// ETECAF
// SISTEMAS EMBARCADOS 2
// SEM2 – 2024
// DHT22 com monitor serial
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <dht.h>
int time = 1000;
int angulo = 0;
unsigned long tempoanterior = 0;
int passo = 0;
#define sensordht 2 // Define o número do pino onde o sensor está conectado
#define pot A0 // Pino do potenciômetro
#define ledBaixaTemperatura 11
#define ledAltaTemperatura 10
#define ledAltaUmidade 9
#define ledRed 5
#define ledGreen 6
#define ledBlue 3
dht sensorDHT; // Criando o objeto para o sensor DHT
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init();
Serial.begin(9600); // Qualquer taxa de transmissão deve funcionar
pinMode(ledBaixaTemperatura, OUTPUT);
pinMode(ledAltaTemperatura, OUTPUT);
pinMode(ledAltaUmidade, OUTPUT);
pinMode(ledRed, OUTPUT);
pinMode(ledGreen, OUTPUT);
pinMode(ledBlue, OUTPUT);
}
void loop() {
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
// Controle do LED RGB baseado no ângulo
int valorPotenciometro = analogRead(A0);
angulo = map(valorPotenciometro, 0, 1023, 0, 270);
if (angulo < 90) {
analogWrite(ledRed, 0);
analogWrite(ledGreen, 255);
analogWrite(ledBlue, 255);
} else if (angulo < 180) {
analogWrite(ledRed, 255);
analogWrite(ledGreen, 0);
analogWrite(ledBlue, 255);
} else {
analogWrite(ledRed, 255);
analogWrite(ledGreen, 255);
analogWrite(ledBlue, 0);
}
// Controle do LED para baixa temperatura
if (temperatura < 10) {
analogWrite(ledBaixaTemperatura, 0); // LED apagado para temperaturas abaixo de 10°C
} else if (temperatura <= 20) {
int brilho = map(temperatura, 10, 20, 0, 255);
analogWrite(ledBaixaTemperatura, brilho);
} else if (temperatura < 40) {
analogWrite(ledBaixaTemperatura, 255); // LED totalmente aceso para temperaturas acima de 20°C
}
// Controle do LED para alta temperatura
if (temperatura > 40) {
digitalWrite(ledAltaTemperatura, HIGH);
} else {
digitalWrite(ledAltaTemperatura, LOW);
}
// Controle do LED para alta umidade
if (umidade > 75) {
digitalWrite(ledAltaUmidade, HIGH);
} else {
digitalWrite(ledAltaUmidade, LOW);
}
Serial.println(tempoanterior);
// Exibição no LCD
if (millis() - tempoanterior > 1000) {
tempoanterior = millis();
lcd.clear(); // Limpa o display apenas ao iniciar uma nova exibição
lcd.setBacklight(HIGH);
if (passo == 0) {
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("%");
passo = 1; // Muda para a próxima etapa
} else if (passo == 1) {
lcd.setCursor(1, 0);
lcd.print("angulo = ");
lcd.print(angulo);
passo = 0; // Volta para a etapa anterior
}
}
}