mise en veille ecran lcd, utilisation de millis

bonjour,

j’ai reçu mon afficheur lcd il y a deux jours (un 20x4), j’arrive sans le moindre souci a la faire fonctionner avec le sketch d’exemple ci-dessous:

/**
 * Displays text sent over the serial port (e.g. from the Serial Monitor) on
 * an attached LCD.
 */
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);

void setup()
{
	lcd.begin();
	lcd.backlight();
  
	// Initialize the serial port at a speed of 9600 baud
	Serial.begin(9600);
}

void loop()
{
	// If characters arrived over the serial port...
	if (Serial.available()) {
		// Wait a bit for the entire message to arrive
		delay(100);
		// Clear the screen
		lcd.clear();

		// Write all characters received with the serial port to the LCD.
		while (Serial.available() > 0) {
			lcd.write(Serial.read());
		}
	}
}

mais voila, j’aimerai que le rétroéclairage se coupe au bout d’un temps donné aprés la derniere donné reçu par le serial (avec la commande lcd.noBacklight).
j’ai donc essayé avec la fonction millis, hélas sans succés (et j’y ai pourtant passé un bon moment, un truc doit m’échapper).

Est-ce que l’un d’entre vous pourrai me dire comment arriver a faire cela ?

par avance merci.

Bonjour,

Il suffit de mémoriser le temps de la dernière réception et de regarder s’il s’est écoulé plus de n ms depuis la dernière réception

/**
   Displays text sent over the serial port (e.g. from the Serial Monitor) on
   an attached LCD.
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);

void setup()
{
  lcd.begin();
  lcd.backlight();

  // Initialize the serial port at a speed of 9600 baud
  Serial.begin(9600);
}

void loop()
{
  static unsigned long millisLastRec=0;
  // If characters arrived over the serial port...
  if (Serial.available()) {
    // Wait a bit for the entire message to arrive
  lcd.backlight();
  millisLastRec=millis();
    
    delay(100);
    // Clear the screen
    lcd.clear();

    // Write all characters received with the serial port to the LCD.
    while (Serial.available() > 0) {
      lcd.write(Serial.read());
    }
  }
  if (millis()-millisLastRec>=10000UL)
    lcd.noBacklight();        // éteint le backlight 10s après la dernière réception
}

Le programme peut être amélioré en n’éteignant pas le backlight si’il est déjà éteint et en ne l’allumant pas s’il est déjà allumé (mais ce n’est pas très utile)

super, ça fonctionne a merveille, il me semblais pourtant avoir essayé un truc du genre.

un grand merci a toi.