Apagar LCD si no toco el arduino

Hola, tengo una duda que seguramente sepáis responder.

Tengo un Mega con una serie de pulsadores y diferentes entradas digitales. Cuando pulso un pulsador, lanzo al LCD por IIC un mensaje, luego se limpia la pantalla pero ésta queda encendida.

Lo que me gustaría hacer, para ahorrar consumo innecesario, es poner una especie de temporizador, que si no toco ningún botón en X tiempo, me apague el lcd, y se vuelva a encender cuando presione algún pulsador.

He pensado en poner en cada botón un código que encienda el lcd, muestre el mensaje, y apague el lcd, pero no me es viable, dado que alguno de los mensajes se quedan en pantalla hasta un par de minutos...

Alguna idea?

EDIT: He pensado en declarar una variable que se llame reloj, y que vaya subiendo +1 cada segundo.
Luego, en cada rutina que tengo para los pulsadores, poner de nuevo el reloj a 0

Si el reloj llega a 6000, que sería un minuto, apagar el lcd. Pero no sé cómo volver a encender el lcd al pulsar los botones sin tener que poner un lcd.backlight en cada botón..

Hola,
Para el contador usa la función millis() hay un montón de ejemplos por la red.
Lo del backlight todo dependerá de con has estructurado tú código.

He intentado usar Millis, pero no consigo resetear a cero cuando pulso un botón, no encuentro nada en google.

manu_tgn:
He intentado usar Millis, pero no consigo resetear a cero cuando pulso un botón, no encuentro nada en google.

tal vez por decir :

if (Boton_Presionado == HIGH ){
boton_LCD = millis();                    /reset de millis desde la ultima vez que se activa el botón. 
}

Yo te recomiendo a realizar esto :

if (Boton_Presionado == HIGH ||Boton_Presionado2 == HIGH ||Boton_Presionado3 == HIGH ){
     funcion_encender();
else ((millis()>El_tiempo)&&(Boton_Presionado == LOW && Boton_Presionado2 == LOW && Boton_Presionado3 == LOW)){
      funcion_apagar();
}

para poderte ayudar mas

coloca tu código

""He pensado en poner en cada botón un código que encienda el lcd, muestre el mensaje, y apague el lcd, pero no me es viable, dado que alguno de los mensajes se quedan en pantalla hasta un par de minutos... ""

cuando hay un delay en tu código detiene todo en espera hasta el tiempo que se le establece, cambia delay por millis, y veras la diferencia de que no se detiene todo el proceso. así podrás hacer variedad de actividades al mismo tiempo.
No creo que me hago explicar bien, busca en google función millis. :slight_smile: .

Podría ser algo así?

long t_espera = 60000;
long t;

  if(btn1==HIGH || btn2==HIGH || btn3==HIGH){ // Si se presiona un botón captura los millis y enciende el backlight
    backlight ON
    t=millis();
  }

  if(millis() > t + t_espera){ // Si paso un minuto desde que presionaste un botón
    backlight OFF
    t=0;
  }

Yo creo que primero debes asegurar que puedes prender/apagar el backlight.
El hecho de poner BACKLIGHT ON o BACKLIGH OFF me hace pensar que no sabes usarlo.

Estos son los comandos.

lcd.backlight(); // turn on backlight.

lcd.noBacklight(); // turn off backlight

Entonces ajustando tu código parcial

unsigned long t_espera = 60000;
unsigned long t;

  if (btn1==HIGH || btn2==HIGH || btn3==HIGH){ //Si se presiona un botón captura los millis 
                                                                            // y enciende el backlight
      lcd.backlight();                                                // enciendo backlight    
      t=millis();
  }
  if (millis() > t + t_espera){                                  // Si paso un minuto desde que presionaste un botón
      lcd.noBacklight();
      t=0;
  }

A ver si funciona?

surbyte:
Yo creo que primero debes asegurar que puedes prender/apagar el backlight.
El hecho de poner BACKLIGHT ON o BACKLIGH OFF me hace pensar que no sabes usarlo.

Tenes razón, solo puse backlight ON/OFF en el código como referencia a lo que debería hacer ya que nunca use un LCD con dicha función, no fui yo el autor del thread, solo estaba dándole una idea.

Perdona pensé que eras tu.. me disculpo.