[RISOLTO]Accendere retroilluminazione Display ...

Salve a tutti, vorrei comandare la retroilluminazione del display a tempo… cioè
premendo un pulsante, il display rimane acceso per un tempo preimpostato usando millis,

provando più o meno sono riuscito, funziona ma non credo che sia fattibile

[code]
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 20, 4);
int conta = 0;
int tempo = 10000;
void setup() {
  Serial.begin(9600);
  lcd.init();
  lcd.init();
  lcd.backlight();
  lcd.setCursor(3, 0);
  lcd.print("Hello, world!");
  lcd.setCursor(2, 1);
  lcd.print("Ywrobot Arduino!");
  lcd.setCursor(0, 2);
  lcd.print("Arduino LCM IIC 2004");
  lcd.setCursor(2, 3);
  lcd.print("Power By Ec-yuan!");
  pinMode(7, INPUT_PULLUP);

}

void loop() {
  Serial.println(conta);
  if (digitalRead (7) == LOW) {
    lcd.backlight();
    conta = 0;
  }
  if (conta >= tempo) {
    lcd.noBacklight();
  }
  conta++;
 delay(50);
}

[/code]

Si può anche fare con il contatore, ma è meglio usare la funzione millis(), questa restituisce un contatore in millesimi di secondo ed è più o meno equivalente ad un orologio che conta però i millesimi di secondo.

Il codice come spunto parte dal salvare il valore di millis() in una variabile e poi confrontarlo con valori più avanti nel tempo.

if (digitalRead (7) == LOW) {
    lcd.backlight();
    saveMillis = millis();
  }

if (millis() - saveMillis > 10000) {
   // spegni la luce, sarà lcd.backlight(false) non so controlla.
   
}

Tra gli esempi nell'IDE arduino c'è blink senza delay.

Ciao.

Buongiorno a tutti , ancora un grande grazie a< Faraday Member>.seguendo il tuo esempio ci sono riuscito

ora posterò il codice funzionante.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 20, 4);
int salva = 0;
int tempo = 10000;//tempo  acceso
void setup() {
  Serial.begin(9600);
  lcd.init();
  lcd.init();
  lcd.backlight();
  lcd.setCursor(3, 0);
  lcd.print("Hello, world!");
  lcd.setCursor(2, 1);
  lcd.print("Ywrobot Arduino!");
  lcd.setCursor(0, 2);
  lcd.print("Arduino LCM IIC 2004");
  lcd.setCursor(2, 3);
  lcd.print("Power By Ec-yuan!");
  pinMode(7, INPUT_PULLUP);

}

void loop() {
  Serial.println(salva);
  if (digitalRead (7) == LOW) {
    lcd.backlight();
    salva = millis();
  }

if (millis() - salva > tempo) {
    lcd.noBacklight() ;
}
}

Occhio che salva deve essere di tipo unsigned long o l'equivalente uint32_t poiché millis() restituisce questo tipo di variabile.

Nelle applicazioni reali ci sono più pulsanti che si vuole abbiano lo stesso comportamento, ad esempio Enter, Dx, Sx, Su e giù che fanno si che il display si accenda e rimane acceso per tot tempo a partire dalla pressione dell'ultimo tasto premuto.

Per fare questo è sufficiente salvare nella stessa variabile il valore di millis.

L'intercettazione della pressione dei pulsanti richiede un antirimbalzo hardware o software, ci sono librerie per la gestione dei pulsanti. Il fenomeno del rimbalzo viene detto bounce e la sua cura debounce cerca queste paroline con google o sul forum.

Ciao.

Le variabili nel programma che sto realizzando le ho messe come dici tu,
per quando riguarda i pulsanti sto usando un sensore a infrarossi .