Ciao a tutti, da poco mi sono messo alle prese con un encoder, che comprai parecchio tempo fa.
Vorrei leggerlo e contare i suoi movimenti per poi scriverli su lcd.
Per leggere in quadratura l'encoder mi sono affidato alla libreria: Encoder Library, for Measuring Quadarature Encoded Position or Rotation Signals
Ho cambiato i pin (3, 2) perche uso arduino uno, se non ho letto male gli unici pin interrupt di arduino uno sono i digitali 2 e 3.
Diciamo che sommariamente funziona tutto, il problema è che per ogni "step" dell'encoder il valore visualizzato si muove di 4 unità e quando i numeri aumentano, esempio, sulle centinaia in alcuni punti l'encoder sempre muovendosi di un solo step muove addirittura le decine.
Le idee che mi vengono in mente sono:
aggiungere una funzione: lcd.clear() prima di ogni scrittura su lcd in modo tale da avere sempre un dato pulito
modificare lcd.print (newPosition); in lcd.print (newPosition/4); però rimane sempre il mistero dello step che vale 4 unita...
qualcuno gentilmente mi sa aiutare?
grazie
Max
newPosition nella libreria è definito come il valore attuale dell'encoder
lo sketch e questo:
#include <Encoder.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 6, 7);
Encoder myEnc(2, 3);
void setup() {
lcd.begin (20,4);
lcd.setCursor (0,0);
lcd.print ("encoder A");
}
long oldPosition = -999;
void loop() {
long newPosition = myEnc.read();
if (newPosition != oldPosition) {
oldPosition = newPosition;
lcd.setCursor (10,0);
lcd.print (newPosition);
}
}