/*BARREIRA_AVALIACAO_PRATICA_COMPLETO_SET_2024
********************************************************************************************
********************************************************************************************
*
                             ETECAF SISTEMAS EMBARCADOS 2
                              SEM2 - 3 BIMESTRE - 2024
                                  Avaliação prática

**************************ESCREVA SEU NOME COMPLETO ABAIXO**********************************
* 
 ===>                        ESCREVA AQUI O SEU NOME COMPLETO                          <===
                                >>>>>>>CORRETO<<<<<<<<<
*******************************************************************************************
*******************************************************************************************
*/

//+++++++++++++++++++++++++++ INICIO DAS CONFIGURAÇÕES GERAIS +++++++++++++++++++++++++++++

//Ligações dos componentes aos pinos do microcontrolador.

#define potenciometro A2 //........................cursor do potenciômetro no pino A2
#define dataPin 2 //...............................data pin do DHT no pino 2
#define RGBvm 7 //.................................pino LED vermelho do RGB no pino 7
#define RGBvd 8 //.................................pino LED verde do RGB no pino 8
#define RGBaz 9 //.................................pino LED azul do RGB no pino 9
#define LedTemp 5 //...............................LED indicador de temperatura no pino 5
#define LedUmid 6 //...............................LED indicador de umidade no pino 6

//Inclusão das bibliotecas
#include <Wire.h> //...............................biblioteca da comunicação I2C
#include <LiquidCrystal_I2C.h> //..................biblioteca LCD com I2C
#include <dht.h> //................................biblioteca DHT

//Endereço do I2C
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++ PROCEDIMENTO +++++++++++++++
// modifique o enderço do I2C

LiquidCrystal_I2C lcd(0x27,16,2); //...............endereco do I2C  0x27 e tamanho do LCD

//Criação o objeto DHT
dht DHT; //........................................objeto DHT

// VARIÁVEIS GLOBAIS:

//Variáveis de temperatura, umidade e do potênciometro:
float temp, umid, tempSoma, umidSoma, tempMedia, umidMedia = 0;
long potem, potSoma, potMedia = 0;
int potMap, LedT, LedU = 0;

//Inicializa Variáveis de Tempo:
 int tempo = 2000;

//++++++++++++++++++++++++ FIM DAS CONFIGURAÇÕES GERAIS ++++++++++++++++++++++++++++++++


//+++++++++++++++++++++++++++++++ INICIO DO SETUP ++++++++++++++++++++++++++++++++++++++

  void setup()
 {

//inicialização do LCD
    lcd.init(); 

//definição dos pinos dos LEDs como saída
       pinMode(LedTemp ,OUTPUT);//.............................A cor do LED deve ser vermelha
       pinMode(LedUmid ,OUTPUT);//.............................A cor do LED deve ser verde
       pinMode(RGBvm ,OUTPUT);
       pinMode(RGBvd ,OUTPUT);
       pinMode(RGBaz ,OUTPUT);
 }

//+++++++++++++++++++++++++++++++++++++ FIM DO SETUP +++++++++++++++++++++++++++++++++++++

//++++++++++++++++++++++++++++++++++++ INICIO DO LOOP ++++++++++++++++++++++++++++++++++++

  void loop()
 {

// LIGA O BACKLIGHT
    lcd.setBacklight(HIGH); 
    
// Leitura dos dados da saída do DHT22
    int readData = DHT.read22(dataPin); 

// CONTADOR PARA OBTENÇÃO DA MÉDIA DAS LEITURAS DE TEMPERATURA
// UMIDADE E DO POTENCIÔMETRO

 for(int i=1; i<=101; i++)//.................contador crescente até 100
                      { 
  temp = DHT.temperature; //.................lendo o valor da temperatura
  tempSoma = temp + tempSoma; //.............somar o resultando com o valor da leitura
  tempMedia = tempSoma/100;//................obtenção da média
  umid = DHT.humidity; //....................lendo o valor da temperatura
  umidSoma = umid + umidSoma;//..............somar o resultando com o valor da leitura
  umidMedia = umidSoma/100;//................obtenção da média
  potem = analogRead(A2);//..................leitura do valor do potenciômetro
  potSoma = potem + potSoma;//...............somar o resultado com o valor da leitura
  potMedia = potSoma/100;//..................obtenção da média
                      }

// condições de comando para o LED indicador da temperatura
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++ PROCEDIMENTO +++++++++++++++

// modifique o valor da temperatura em função da temperatura indicada no LCD.
// subtraia 1 do valor medido e anote na condição do if abaixo.

  if (tempMedia > 21)//......................comparando o valor do acionamento do LED
    {
    digitalWrite(LedTemp, 1);//..............seta o LED da Temperatura
           LedT = 1; //......................iguala a 1 a variável LedT 
    }  
    else
    {
    digitalWrite(LedTemp,0);//.............reseta o LED Temperatura
           LedT = 0; //......................iguala a 0 a variável LedT
    }
    
// condições de comando para o LED indicador da umidade
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++ PROCEDIMENTO +++++++++++++++

// modifique o valor da umidade em função do valor da umidade indicada no LCD.
// subtraia 1 do valor medido e anote na condição do if abaixo.

  if (umidMedia < 50)//......................compara o valor do acionamento do LED
   {
    digitalWrite(LedUmid, 1);//..............seta o LED da Umidade
        LedU=1;
   }
    else
    {
      digitalWrite(LedUmid,0);//.............reseta o LED Temperatura
        LedU=0;
    }
// mapeamento do potenciômetro

  potMap= map(potMedia, 0, 1023 , 0, 270);//..relaciona 0 a 1023 com 0 a 270 - giro do potenciômetro

// condições de comando para o LED RGB

  if (potMap < 90)//..........................cursor entre 0 e 89
    {
    digitalWrite(RGBvm,1);//..................acende o LED vermelho
    }
  else
    {
    digitalWrite(RGBvm,0);//..................apaga o LED vermelho
    }

  if (potMap >90 && potMap < 180)//...........cursor entre 90 e 179
    {
    digitalWrite(RGBvd,1);//..................acende o LED verde
    }
  else
    {
    digitalWrite(RGBvd,0);//..................apaga o LED verde
    }

  if (potMap >181)//..........................cursor maior do que 180
  {
    digitalWrite(RGBaz,1);//..................acende LED azul
  }
  else
  {
    digitalWrite(RGBaz,0);//..................apaga LED azul
    }
// TELA 1 DO LCD
// MOSTRA NA PRIMEIRA LINHA A IDENTIFICAÇÃO DA ESCOLA E DO COMPONENTE CURRICULAR
// E NA SEGUNDA, O NOME DO ALUNO

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++ PROCEDIMENTO +++++++++++++++
// modifique o texto acrescentando o sua turma (A ou B) após SEM2. DEIXE A LINHA CENTRALIZADA
    lcd.setCursor(1,0);
    lcd.print("ETECAF    SEM2");

// Troque NOME pelas iniciais dos seus nomes. Deixe o texto centralizado.
    lcd.setCursor(7,1);
    lcd.print("NO");
    delay(2000);
    lcd.clear();
    delay(50);
    
// Duplique a configuração feita acima apenas para a linha 1.
    lcd.setCursor(7,1);
    lcd.print("NO");

// 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 <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 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

// TELA 2 DO LCD
// mostra valor medido da temperatura e da umidade
    lcd.setCursor(1,0);
    lcd.print("Temp = ");
    lcd.print(tempMedia);
    lcd.print("C");
    lcd.setCursor(1,1);
    lcd.print("Umid = ");
    lcd.print(umidMedia);
    lcd.print("%");
    delay(tempo);
    lcd.clear();
    delay(200);

// TELA 3 DO LCD
// mostra valor do potenciômetro
// mostra os estados dos LEDs da temperatura e da umidade

    lcd.setCursor(1,0);
    lcd.print("Pot Map = ");
    lcd.print(potMap);
    lcd.setCursor(1,1);
    lcd.print("LedT=");
    lcd.print(LedT);
    lcd.setCursor(8,1);
    lcd.print("LedU=");
    lcd.print(LedU);
    delay(tempo);
    lcd.clear();
    delay(200);

// zerar variaveis
    tempSoma=0;
    tempMedia=0;
    umidSoma=0;
    umidMedia=0;
    potSoma=0;
    potMedia=0;
    
//++++++++++++++++++++++++++++++++++++ FIM DO LOOP +++++++++++++++++++++++++++++++++++++++++++
}
$abcdeabcde151015202530fghijfghij