Hallo,
ich bin gerade dabei mir ein LCD Menue mit Drehgeber zu basteln. Dazu habe ich mir angeschaut, was mir der Drehgeber für Impulse ausgibt. Bei meinem Teil sind die Anschlüsse A und B wenn der Drehgeber in der Raststellung steht immer High.
Von einer Rastung zur nächsten gibt es immer 4 Impulse auf A und B.
Die Impusle sehen folgendermaßen aus:
Links drehen: A B
1 0
0 0
0 1
1 1
Rechts drehen: A B
0 1
0 0
1 0
1 1
d.h. wenn ich links drehe habe ich am Anschluß A immer eine 9, wenn ich rechts drehe habe ich immer eine 12.
Daraus habe ich einen kleinen Sketch gebastelt, der relativ klein und übersichtlich ist.
Wie verhält sich der Encoder beim schnellen Rechts/Links drehen? Hatte eine ähnliche Lösung getestet, war aber nicht damit zufrieden, da er immer wieder mal nicht genau gezählt hat.
Das delay gefällt mir in der Lösung nicht.
bei schnellem Drehen verschluckt er sich schon mal, aber da ich ihn für eine Menüsteuerung brauche, und je Menü max. 10 Menüpunkte habe, brauche ich nicht so schnell drehen. Die delays stören mich hier auch nicht, da das Encoder auslesen innerhalb der Menüfunktion läuft und der Dino in dem Moment bei mir keine zeitkritischen Aufgaben zu erledigen hat.
ardubu:
bei schnellem Drehen verschluckt er sich schon mal, aber da ich ihn für eine Menüsteuerung brauche, und je Menü max. 10 Menüpunkte habe, brauche ich nicht so schnell drehen. Die delays stören mich hier auch nicht, da das Encoder auslesen innerhalb der Menüfunktion läuft und der Dino in dem Moment bei mir keine zeitkritischen Aufgaben zu erledigen hat.
Das delay zwischen den beiden digitalRead-Anweisungen in der loop ist ein absolutes No-Go!
Die beiden Encoder-Pins müssen möglichst beide GLEICHZEITIG ausgelesen werden.
Also mit Arduino-Boardmitteln digitalRead direkt nach digitalRead.
Und das delay nach den beiden digitalRead-Anweisungen ist einfach nur überflüssig und macht die loop-Funktion langsamer als sie sein könnte (delay(2) schadet aber ansonsten auch nicht weiter).
@sschultewolter: Vernünftige Auswerteraten für stark prellende mechanische Drehgeber mit Timer-Interrupts liegen bei 500 bis 1000 Hz. Dein Timer-Interrupt scheint etwa hundertmal zu oft zu laufen (wenn ich den Code zur Timer-Initialisierung richtig interpretiere), um eine vernünftige Auswertung zu ermöglichen.