// ETECAF
// SISTEMAS EMBARCADOS 2
// SEM2 - 3 BIMESTRE - 2024
// TRABALHO LCD+I2C+DHT+POT+RGB+LED+MILLIS+MEDIA
// SALVAR ESTE ARQUIVO ASSIM:
// LCD+I2C+DHT+POT+RGB+LED+MILLIS+MEDIA_(INICIAIS DOS NOMES)
// EXEMPLO - SE FOSSE O MEU
// LCD+I2C+DHT+POT+RGB+LED+MILLIS+MEDIA_CBSF
//****** ESCREVA SEU NOME COMPLETO ABAIXO ********
// Breno Correia Lociks
//************************************************
// CADA PARTE DO CÓDIGO DEVE SER EXPLICADA.
// EM ESPECIAL:
// ==> COMO FOI FEITA A MÉDIA DE CADA UMA DAS MEDIÇÕES
// TEMPERATURA;
// UMIDADE;
// POSIÇÃO DO POTENCIÔMETRO
// ==> EXPLIQUE TAMBÉM O USO DO MILLIS
// VARIÁVEIS GLOBAIS
// NAO ESQUEÇA DE EXPLICAR CADA UMA
// BIBLIOTECAS
#include <LiquidCrystal_I2C.h> // Inclui a biblioteca para controle do LCD I2C
#include <dht.h> // Inclui a biblioteca para controle do sensor DHT
// DEFINIÇÕES
#define dataPin 2 // Define o pino digital 8 para o sensor DHT
#define Red 3 // Define o pino digital 2 para o LED vermelho do RGB
#define Green 4 // Define o pino digital 3 para o LED verde do RGB
#define Blue 5 // Define o pino digital 4 para o LED azul do RGB
#define led_tmp 6 // Define o pino digital 6 para o LED que indica alta temperatura
#define led_umd 7 // Define o pino digital 7 para o LED que indica alta umidade
// CRIAÇÃO DOS OBJETOS PARA O LCD I2C E PARA O SENSOR DHT
LiquidCrystal_I2C lcd(0x27, 16, 2); // Cria o objeto "lcd" para o LCD I2C com endereço 0x27 e display de 16x2 caracteres
dht DHT; // Cria o objeto "DHT" para o sensor DHT
void setup() {
// CONFIGURAÇÕES
// NÃO ESQUEÇA DE EXPLICAR CADA UMA
// CONFIGURAÇÃO DOS PINOS
pinMode(Red, OUTPUT); // Configura o pino do LED vermelho do RGB como saída
pinMode(Green, OUTPUT); // Configura o pino do LED verde do RGB como saída
pinMode(Blue, OUTPUT); // Configura o pino do LED azul do RGB como saída
pinMode(led_tmp, OUTPUT); // Configura o pino do LED de alta temperatura como saída
pinMode(led_umd, OUTPUT); // Configura o pino do LED de alta umidade como saída
// CONFIGURAÇÕES DE INICIALIZAÇÃO DO LCD
lcd.init(); // Inicializa o LCD I2C
lcd.setBacklight(HIGH); // Liga a luz de fundo do LCD I2C
}
void loop() {
// PROGRAMA PRINCIPAL
// NÃO ESQUEÇA DE EXPLICAR CADA PARTE
// LEITURA DO POTENCIÔMETRO e MAPEAMENTO DO ÂNGULO
int pot = analogRead(A3); // Cria a variável "pot" para armazenar o valor lido no potenciômetro ligado no pino analógico A3
// LEITURA DO SENSOR DHT
int readData = DHT.read11(dataPin); // Cria a variável "readData" para armazenar os dados lidos pelo sensor DHT
float t = DHT.temperature; // Cria a variável "t" para armazenar a temperatura lida pelo sensor DHT
float h = DHT.humidity; // Cria a variável "h" para armazenar a umidade lida pelo sensor DHT
// MAPEAMENTO DA MÉDIA PARA O ÂNGULO
int angPot = map(pot, 0, 1023, 0, 270); // Cria a variável "angMed" para armazenar o mapeamento da média de leitura do potenciômetro para um intervalo de 0 a 270 graus de ângulo
// CONTROLE DO RGB
if (angPot >= 0 && angPot <= 90) { // Verifica se o ângulo do potenciômetro é maior ou igual 90 graus
digitalWrite(Red, 1);
}
else {
digitalWrite(Red, 0);
}
if (angPot > 90 && angPot <= 180) { // Verifica se o ângulo do potenciômetro é maior ou igual 90 graus
digitalWrite(Green, 1);
}
else {
digitalWrite(Green, 0);
}
if (angPot > 180 && angPot <= 270) { // Verifica se o ângulo do potenciômetro é maior ou igual 90 graus
digitalWrite(Blue, 1);
}
else {
digitalWrite(Blue, 0);
}
if (t >= 26) { // Verifica se a média de temperatura é maior ou igual a 40 graus Celsius
digitalWrite(led_tmp, 1); // Acende o LED de alta temperatura
}
else { // Caso contrário
digitalWrite(led_tmp, 0); // Apaga o LED de alta temperatura
}
if (h >= 80) { // Verifica se a média de umidade é maior ou igual a 75%
digitalWrite(led_umd, 1); // Acende o LED de alta umidade
}
else { // Caso contrário
digitalWrite(led_umd, 0); // Apaga o LED de alta umidade
}
// CONTROLE DO LCD I2C
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("ETECAF");
lcd.setCursor(5, 1);
lcd.print("SEM II");
delay(1000);
lcd.clear();
// Troque NOME pelas iniciais dos seus nomes. Deixe o texto centralizado.
lcd.setCursor(6,0);
lcd.print("B_CL");
lcd.setCursor(6,1);
lcd.print("HPCM");
delay(2000);
lcd.clear();
delay(50);
// Duplique a configuração feita acima apenas para a linha 1.
lcd.setCursor(5,0);
lcd.print("B_CL");
lcd.setCursor(5,1);
lcd.print("HPCM");
// comando para rotacionar a linha do nome.
// As iniciais devem ser deslocadas para a esquerda,para a direita e depois para o centro
// sem seir do espaço disponível no display
for(int cont = 0; cont <5; cont ++)//.......contador para que as letras mudem de posição
{
lcd.scrollDisplayLeft();//.............rolar uma posição para a esquerda
delay(50);
}
delay(500);//..............................tempo mostrando o texto na esquerda
for(int cont = 0; cont <12; cont ++)//......contador para que as letras mudem de posição
{
lcd.scrollDisplayRight();//............rolar uma posição para a direita
delay(50);
}
delay(500);//..............................tempo mostrando o texto na direita
for(int cont = 0; cont <6; cont ++)//.......contador para que as letras mudem de posição
{
lcd.scrollDisplayLeft();//.............rolar uma posição para a esquerda
delay(50);
}
delay(500);//..............................tempo mostrando o texto no centro.
lcd.clear();//.............................apaga o LCD
delay(200);//..............................aguarda apagado
lcd.setCursor(0, 0); // Define o cursor na primeira coluna e na primeira linha
lcd.print("Tmp. = "); // Exibe o texto da temperatura
lcd.print(t); // Exibe o valor da média de temperatura
lcd.print(" "); // Espaço
lcd.print((char)223); // Exibe o símbolo de grau
lcd.print("C"); // Exibe o símbolo de celsius
lcd.setCursor(0, 1); // Define o cursor na primeira coluna e na segunda linha
lcd.print("Umd. = "); // Exibe o texto da umidade
lcd.print(h); // Exibe o valor da média de umidade
lcd.print((char)37); // Exibe o símbolo de porcentagem
delay(2000);
lcd.clear(); // Limpa o display
lcd.setCursor(0, 0); // Define o cursor na primeira coluna e na primeira linha
lcd.print("Ang. = "); // Exibe o texto do ângulo do potenciômetro
lcd.print(angPot); // Exibe o valor do ângulo do potenciômetro
lcd.print((char)223); // Exibe o símbolo de grau
delay(2000);
}