Nach dem Datenblatt darf ein Statuswechsel erst gezählt werden, wenn seit dem letzten mehr als 2ms vergangen sind. Der Encoder eignet sich somit nur für relativ langsame Drehbewegungen (< 1200 U/min), für eine Bedienung per Hand aber mehr als ausreichend.
Du solltest jetzt einfach im Code diesen Faktor noch einbauen, z.B.:
int val;
int encoder0PinA = 4;
int encoder0PinB = 5;
int encoder0Pos = 0;
int encoder0PinALast = LOW;
uint32_t encoder0PinALastChange = 0;
int n = LOW;
void setup() {
pinMode (encoder0PinA,INPUT);
pinMode (encoder0PinB,INPUT);
Serial.begin (57600);
}
void loop() {
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH) && (millis() - encoder0PinALastChange > 2)) {
if (digitalRead(encoder0PinB) == LOW) {
encoder0Pos--;
} else {
encoder0Pos++;
}
Serial.print (encoder0Pos);
Serial.print ("/");
encoder0PinALastChange = millis();
}
encoder0PinALast = n;
}