Hacer funcionar el control remoto junto al lcd

Hola, no se si alguien de aqui podria ayudarme pero estoy intentando hacer que la pantalla de mi lcd muestre lecturas de mi sensor dht11 cuando presionas el botón power del control remoto y deje de mostrar dichas lecturas cuando presionas func/stop de dicho control. Estoy utilizando componentes de un kit elegoo incluido el control remoto que trae.
image

Aquí os dejo mi codigo:

#include <DHT.h>  // Esto se hace para agregar la libraría que tendrá el control del sensor
#include <IRremote.h> // Esto se hace para agregar la libraría que hace funcionar el control remoto
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
int RECV_PIN = 5;
IRrecv irrecv(RECV_PIN);
decode_results results;
int PinRojo = 13;   // Led rojo conectado al Pin digital 13 
int Pinamarillo = 6;  // Led amarillo conectado al Pin digital 6 
int PinAzul = 4;  // Led azul conectado al Pin digital 4
void setup() {
  Serial.begin(9600);
  dht.begin();
  lcd.begin(16, 2);
  pinMode(PinRojo, OUTPUT);   // Establece los pines de salida del led  
  pinMode(Pinamarillo, OUTPUT);  // Establece los pines de salida del led 
  pinMode(PinAzul, OUTPUT); // Establece los pines de salida del led 
  irrecv.enableIRIn(); //establece el funcionamiento del control remoto.
}

void loop() {
  // Esperamos 5 segundos entre medidas de cada loop
  delay(5000);

  // Leemos la humedad relativa
  float h = dht.readHumidity();
  // Leemos la temperatura en grados centígrados (por defecto)
  float t = dht.readTemperature();

  // Comprobamos si ha habido algún error en la lectura
  if (isnan(h) || isnan(t)) {
    Serial.print("Error obteniendo los datos del sensor DHT11");
    return;
  }

  // Calcular el índice de calor en grados centígrados
  float hic = dht.computeHeatIndex(t, h);
  Serial.print("Humedad: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperatura: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print("Indice de calor: ");
  Serial.print(hic);
  Serial.println(" *C ");
  //Preparamos el la pantalla liquida para que se encienda al presionar el boton del control remoto y muestre lecturas del sensor
  if (IrReceiver.decode()) {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Temp: ");
    lcd.print(t);
    lcd.print(" *C ");
    lcd.setCursor(0,1);
    lcd.print("Humedad: ");
    lcd.print(h);
    lcd.print(" %");
  }
   if((t) >= 26)  // Si la temperatura sobrepasa los 26 grados
  {  
   digitalWrite(PinAzul, LOW);     
   digitalWrite(Pinamarillo, LOW);  
   digitalWrite(PinRojo, HIGH);  // Led Rojo se enciende y los otros led permanecen apagados
  }   
  if(((t) < 25) && ((t) >= 10)) 
  {  
   digitalWrite(PinRojo, LOW);    
   digitalWrite(Pinamarillo, HIGH);  // Led amarillo se enciende y los otros led permanecen apagados
   digitalWrite(PinAzul, LOW);  
  }  
   
  if((t) <= 9)  
  {  
   digitalWrite(PinAzul, HIGH);  // Led azul se enciende y los otros led permanecen apagados   
   digitalWrite(Pinamarillo, LOW);  
   digitalWrite(PinRojo, LOW);    
  } 
}

Ahora mismo sencillamente muestra las lecturas cuando presionas cualquier botón del control remoto nada más y yo solo quiero que funcionen esos dos que mencione.

Te funcionó la lectura del control remoto en forma individual?

El control remoto funciona, cuando presiono cualquier botón empieza a mostrarme las lecturas de temperatura. Pero lo que yo quiero es que solamente funcione con esos dos botones específicos que dije.
Aca muestro el antes de presionar cualquier botón:

Y aca muestro el después de presionar cualquier botón:

He estado buscando por la red y creo que se puede hacer utilizando un "case" junto con el codigo "0xFD00FF" que representaría el botón ON..... pero no se como poner eso en mi codigo.

Cambia el trozo de codigo que maneja el IR por este otro:

//Preparamos el la pantalla liquida para que se encienda al presionar el boton del control remoto y muestre lecturas del sensor
  if (IrReceiver.decode(&results)) {
    int nueva = results.value;
    if (neva == /*codigo de la teclan on*/||nueva == 0xFFFFFFFF) {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Temp: ");
      lcd.print(t);
      lcd.print(" *C ");
      lcd.setCursor(0, 1);
      lcd.print("Humedad: ");
      lcd.print(h);
      lcd.print(" %");
    }
  }

Y ya vas jugando, ponle algunos serial.print a la variale nueva para ver que estas recibiendo y obras en conseguencia.

Por desgracia esto no me esta funcionando.

  //Preparamos la pantalla LCD para que se encienda al presionar el boton del control remoto y muestre lecturas del sensor
  if (IrReceiver.decode(&results)) {
        int nueva = results.value;
    if (nueva == 0xBA45FF00 ||nueva == 0xFFFFFFFF){
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Temp: ");
        lcd.print(t);
        lcd.print(" *C ");
        lcd.setCursor(0, 1);
        lcd.print("Humedad: ");
        lcd.print(h);
        lcd.print(" %");
    }
  }

Alguna sugerencia?

Moderador
Edita tu post#5 sin usar capturas.
Edita y usa etiquetas omo bien has hecho en el post#1.

Cuando te pregunté si habias probado tu código con el IR me dijiste que si, pero es evidente que no entendiste mi pregunta.
Lo que yo te pregunté tenía por respuesta que tanto el botón ON como el que hayas elegido para terminar la operación funcionaran en un ejemplo modificado donde hayas determinado en cada caso que código Hexa requieres.
Ahora que trabajas con todo el código resulta que no te funciona pero la forma de trabajar cuando estas comenzando es ir resolviendo tareas en ambientes controlados.
Una cosa es el manejo IR y los dos códigos que responden a Power y a STOP
Asi que te recomiendo que hagas una pausa y lo veas en otro código para no marearte y tener un ambiente mas comodo.
Si crees que puedes seguir como estas no me hagas caso.

He editado mi post. Mis disculpas.
Y respecto a lo que comentas, si es que te he entendido bien, probe un código de mapeo de botones para el control remoto y funcionaban correctamente.
De ahí obtuve el código "BA45FF00" que es para el botón power y el "B847FF00" que es para el botón func/stop. Y ambos funcionaban y respondian.

//Preparamos la pantalla LCD para que se encienda al presionar el boton del control remoto y muestre lecturas del sensor
define presento como global antes de setup()
// defino como global

type or paste code here

aca la modificación

  if (IrReceiver.decode(&results)) {
        int nueva = results.value;
    if (nueva == 0xBA45FF00) { // POWER ON
        presento = true;
    }
    if (nueva == 0xB847FF00) {
        presento = false;
    }
   }
   if (presento) {
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Temp: ");
        lcd.print(t);
        lcd.print(" *C ");
        lcd.setCursor(0, 1);
        lcd.print("Humedad: ");
        lcd.print(h);
        lcd.print(" %");
   }

Ojo a los dos que a uno se le pasan por alto algunas cositas , como en el post #7:
El "IF"

if (IrReceiver.decode(&results)) {

Se ha de cerrar con la instrucción:

irrecv.resume();

Luego el Código perfectamente propuesto por @Surbyte debería quedar así:

 if (IrReceiver.decode(&results)) {
        int nueva = results.value;
    if (nueva == 0xBA45FF00) { // POWER ON
        presento = true;
    }
    if (nueva == 0xB847FF00) {
        presento = false;
    }
    irrecv.resume();
   }

Saludos.

Correcto, tiene razón @gonpezzi, por eso no me gustan los códigos parciales.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.