Astrein
Liegt an Deiner Vorarbeit. Du hattest für die Uhrzeit die (maximal) 3-stellige Zahl vorgegeben bei denen die letzte Stelle das 10-Minuten Intervall angibt, das nur von 0 bis 5 gehen soll/darf. Wird nach oben gezählt, muß nach der 5 wieder die 0 kommen. Beim Nachuntenzählen muß nach der 0 die 5 folgen.
Die ersten beiden Stellen der 3-stelligen Zahl zählen aber "normal" im Dezimal System nach oben bzw unten.
Man muß also für Deine gewünschte Zählweise nur die letzte Ziffer für das 10-Minuten Intervall im Encoderwert überprüfen und gegebenenfalls korrigieren.
Die Modulo Funktion ist eine Division, bei der die Nachkommastellen nicht ausgerechnet werden, sondern als Ergebnis sozusagen nur die Nachkommastellen mit einer ganzen Zahl, eben dem Rest liefert. (Eigener Definitionsversuch - andere, sicher bessere sind im Inet zu findnen)
zB 195 % 10 = 5
195 geteilt durch 10 ist gleich 19 Rest 5
(10 * 19 = 190, 195 - 190 = 5)
Die 5 ist das Ergebnis der Modulo Funktion
oder zB 223 % 7 = 6
223 geteilt durch 7 ist gleich 31 Rest 6
(7 * 31 = 217, 223 - 217 = 6)
Die 6 ist das Egebnis der Modulo Funktion
Wenn man nun bei einer Dezimalzahl die letzte Ziffer "isolieren" möchte, bietet sich eben das Modulo mit 10 an, da ja bei einer Division durch 10 als Rest immer die Einerstelle bleibt. (Möchte man zB die letzten beiden Ziffern isolieren, nimmt man Modulo 100).
Jetzt hat man also die Einerstelle, die sich einfach auf den erlaubten Wertebereich überprüfen läßt.
Hat der Encoder nach oben gezählt und der Rest größer (Kurzzeichen >) 5 ist, wird 4 zum Encoderwert addiert. Aus der 6, 7, 8, 9 wird eine 0, 1, 2, 3 und es wird auch die nächste Stelle im Encoderwert durch den Überlauf (6 + 4 ist 10) hochgezählt. Möglicherweise reicht der Vergleich auf =6, da ja nach der Addition von 4 die 7, 8, 9 beim nächsten Encoderpuls nicht mehr in Frage kommen. So ist es jedenfalls sicher falls durch zB Kontaktprellen vielleicht doch irgendwie eine andere "verbotene" Zahl auftaucht.
Hat der Encoder nach unten gezählt, müssen die gleichen Ziffern (6, 7, 8, 9) abgefangen werden. Deshalb auch wieder der Vergleich auf größer 5, aber nun muß entsprechend der Encoderdrehrichtung die 4 abgezogen werden. Hier tritt auch wieder bei der 0 minus 4 ein Unterlauf aus, der die nächst höhere Stelle in der 3-stelligen Zahl decrementiert.
Bestimmt gibt es auch andere Möglichkeiten die Zählung zu implementieren; diese fiel mir halt als erste ein und hoffe Dich jetzt nicht zu viel zugeschwallt zu haben und hoffentlich keinen Unsinn erzählt zu haben.
Schwein gehabt.
Gruß
Searcher
Lesezeichen