Ciao a tutti, ho un piccolo problema. Ho realizzato un programma che per il momento gestisce un display lcd (20x4) i2c e due pulsanti; i pulsanti (up e down) hanno lo scopo di incrementare o decrementare una variabile che viene istantaneamente visualizzata sul display. Ho fatto in modo che il display venga aggiornato ogni 100 millisecondi, di più non si può altrimenti si nota il ritardo tra la pressione del pulsante e la visualizzazione del nuovo valore della variabile. Nonostante il ritardo noto che il display tende a sfarfallare (in maniera minima), in particolare dalla seconda riga in poi. Lo sto alimentando da Arduino Mega e l'interfaccia i2c è saldata sul retro del display, quindi penso non ci siano falsi contatti.
Vi posto il codice.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// VARIABILI COMUNI PER ANTIRIMBALZO ---------------------------------------------------------
int attesaDebounce = 50;
//-----------------------------------------------------------------------
// PULSANTE UP ---------------------------------------------------------
const int pulsanteUp = 4; //pin
//Variabili per antirimbalzo
int up_pulsanteStato, up_ultimaLettura = LOW;
unsigned long up_ultimoTempoDebounce = 0;
//-----------------------------------------------------------------------
// PULSANTE DOWN ---------------------------------------------------------
const int pulsanteDown = 5; //pin
//Variabili per antirimbalzo
int down_pulsanteStato, down_ultimaLettura = LOW;
unsigned long down_ultimoTempoDebounce = 0;
//-----------------------------------------------------------------------
int variabile = 2;
long dispTempo = millis();
void setup() {
lcd.begin(20, 4);
pinMode(pulsanteUp, INPUT);
pinMode(pulsanteDown, INPUT);
Serial.begin(9600);
}
void loop() {
leggiPulsUp();
leggiPulsDown();
if (millis() > dispTempo + 100) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Variabile: ");
lcd.print(variabile);
lcd.setCursor(0, 1);
lcd.print("ciao come va");
dispTempo = millis();
}
}
void leggiPulsUp() {
int lettura = digitalRead(pulsanteUp);
if (lettura != up_ultimaLettura)
up_ultimoTempoDebounce = millis();
if ((millis() - up_ultimoTempoDebounce) > attesaDebounce) {
if (lettura != up_pulsanteStato and lettura == HIGH) {
variabile++;
}
up_pulsanteStato = lettura;
}
up_ultimaLettura = lettura;
}
void leggiPulsDown() {
int lettura = digitalRead(pulsanteDown);
if (lettura != down_ultimaLettura)
down_ultimoTempoDebounce = millis();
if ((millis() - down_ultimoTempoDebounce) > attesaDebounce) {
if (lettura != down_pulsanteStato and lettura == HIGH) {
variabile--;
}
down_pulsanteStato = lettura;
}
down_ultimaLettura = lettura;
}
Avete dei consigli?