Ciao a tutti, sto usando un 20x4, su ogni riga scrivo un valore di un potenziometro; sulla riga 1 scrivo il valore del potenziometro A sulla riga 2 scrivo il valore del potenziometro B.
Nello sketch i valori vengono printati da capo a ogni variazione di qualsiasi potenziometro, questo per perché i valori dei potenziometri vanno da un minimo di -999 a un massimo di 9999, quindi ho messo una condizione IF (se il vecchio valore del potenziometro è diverso dal nuovo) cancella tutto l'lcd, quindi, lcd.clear() e poi scrivi al rigo 1 il valore del potenziometro A e al rigo 2 scrivi il valore del potenziometro B.
Funziona tutto, il problema è che se ruoto un potenziometro molto in fretta lo schermo nel fare tutte queste operazioni "sbiadisce" non so come spiegarmi meglio di cosi...
il potenziometro A ha valore 0 lo ruoto velocemente fino alla posizione 10, le scritte della 2 riga ovvero quelle del potenziometro 2 non fanno in tempo ad essere scritte che già vengono cancellate.
La mia domanda è: c'è una funzione più evoluta di lcd.clear()? posso dire con esattezza quali caratteri di quali righe voglio cancellare? basterebbe anche solo poter cancellare una sola riga per rendere piu veloce lo sketch..
Comunque allego il mio sketch così che possiate vederlo e magari correggermi in qualche errore che sto commettendo:
#include <AccelStepper.h>
#include <Encoder.h> //non usare pin con led ovvero il 13
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 6, 7); //LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
Encoder timeEnc(8, 14); // Pin dell'encoder Time 8,14
Encoder shiftEnc(2, 3); // Pin dell'Encoder SHIFT 2,3
AccelStepper asseX(1, 9, 10); //AccelStepper nomestepper(1, pinstep, pindir);
int numeroStep = 0; //definisco numeroStep come valore che tendera all'encoder SHIFT
int time = 1000; //definisco il tempo tra gli spostamenti
void setup() {
lcd.begin (20,4);
}
long oldShift = -999;
long oldTime = -999;
long newShift = 0;
void loop() {
//lettura encoder Time
long newTime = timeEnc.read();
if (newTime != oldTime) {
oldTime = newTime;
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Shift");
lcd.setCursor(0,2);
lcd.print("Time");
lcd.setCursor(6,1);
lcd.print(newShift/4);
lcd.print (" mm");
lcd.setCursor(6,2);
lcd.print(newTime/4);
lcd.print (" secondi");
lcd.setCursor (0,3);
lcd.print (numeroStep);
lcd.print (" step");
}
//lettura encoder Shift
newShift = shiftEnc.read();
if (newShift != oldShift) {
oldShift = newShift;
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Shift");
lcd.setCursor(0,2);
lcd.print("Time");
lcd.setCursor(6,1);
lcd.print(newShift/4);
lcd.print (" mm");
lcd.setCursor(6,2);
lcd.print(newTime/4);
lcd.print (" secondi");
lcd.setCursor (0,3);
lcd.print (numeroStep);
lcd.print (" step");
}
}
Credo di non aver dimenticato nulla...
Ringrazio anticipatamente
Max