Ligar Ar condicionado com mostrador de temperatura

Falaí galera blz...

Eu tô com um probleminha e... se for possível... Gostaria da ajuda de vcs!É o seguinte: Eu estou tentando fazer um sketch para acionar um ar condicionado e mostrar a temperatura ambiente no display (I2c). Eu já cheguei no seguinte ponto:

Quando eu aperto um botão do controle remoto liga o ar condicionado (representado por um led) e liga também o lcd. Mas quando eu aperto o msm botão consigo desligar o led e tal mas o bendito do lcd fica ligado. Vcs podem me ajudar nessa questão? Segue o código:


  #include <IRremote.h>  
  #include <Wire.h>
  #include <LiquidCrystal_I2C.h>
// Inicializa a biblioteca com os números dos pinos de interface
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Cria um objeto lcd e atribui os pinos
byte maxC=0, minC=100, maxF=0, minF=212;
boolean scale = 1;
unsigned char buttonPin=8;
unsigned char RECV_PIN = 11;  
float armazenavalor;  
unsigned char pinoledvermelho = 5;  
unsigned char pinoledverde = 7;
IRrecv irrecv(RECV_PIN);  
decode_results results;  
 
void setup()  
{
  lcd.begin(16, 2); // Define o display com 16 colunas e 2 linhas
  analogReference(INTERNAL);
  pinMode(buttonPin, INPUT);
  lcd.clear();
  lcd.backlight();//activas a backlight
  pinMode(pinoledvermelho, OUTPUT);
  pinMode(pinoledverde, OUTPUT);
  Serial.begin(9600);  
  irrecv.enableIRIn(); // Inicializa o receptor IR  
}     
void loop()  

{  
  if (irrecv.decode(&results))  
  {  
    Serial.print("Valor lido : ");  
    Serial.println(results.value, HEX);  
    armazenavalor = (results.value);
    if (armazenavalor == 0xFDA857) //Verifica se a tecla 1 foi acionada  
    {    
     digitalWrite (pinoledvermelho,!digitalRead(pinoledvermelho));
     }
     if (digitalRead (pinoledvermelho),HIGH)
      {    
    changeLCD();
     }
     else
   {    
       lcd.noBacklight();
       delay(10);
     }
  irrecv.resume(); //Le o próximo valor  
   }  
}  
  int changeLCD() {
lcd.setCursor(0,0); // Define o cursor na posição de início
int sensor = analogRead(0); // Lê a temperatura do sensor
int buttonState = digitalRead(buttonPin); // Verifica se o botão foi pressionado
switch (buttonState) { // Altera o estado da escala, caso tenha sido pressionado
case HIGH:
scale=-scale; // Inverte a escala
lcd.clear();
}
delay(250);
switch (scale) { // Decide por escala em Celsius ou Fahrenheit
case 1:
celsius(sensor);
break;
case -1:
fahrenheit(sensor);
}
}
void celsius(int sensor) {
lcd.setCursor(0,0);
int temp = sensor * 0.0927734375; // Converte para Celsius
lcd.print(temp);
lcd.write(B11011111); // Símbolo de grau
lcd.print("C ");
if (temp>maxC) {maxC=temp;}
if (temp<minC) {minC=temp;}
lcd.setCursor(0,1);
lcd.print("H=");
lcd.print(maxC);
lcd.write(B11011111);
lcd.print("C L=");
lcd.print(minC);
lcd.write(B11011111);
lcd.print("C ");
}
void fahrenheit(int sensor) {
lcd.setCursor(0,0);
float temp = ((sensor * 0.09765625) * 1.8)+32; // Converte para Fahrenheit
lcd.print(int(temp));
lcd.write(B11011111); // Imprime o símbolo de grau
lcd.print("F ");
if (temp>maxF) {maxF=temp;}
if (temp<minF) {minF=temp;}
lcd.setCursor(0,1);
lcd.print("H=");
lcd.print(maxF);
lcd.write(B11011111);
lcd.print("F L=");
lcd.print(minF);
lcd.write(B11011111);
lcd.print("F ");
}
 
int offLCD()
{
  lcd.setCursor(0,0);
  lcd.clear();
  lcd.setCursor(0,1);
  lcd.clear();
  lcd.setBacklight(LOW);
}

Abraço!!!!!!

Exibições: 206

Responder esta

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço