Hallo, Leute!
Gestern abend habe ich mein Code nochmal angeschaut, und habe ich
entdeckt, daß ich bestimmt die Signale von Encoder nicht richtig lese,
sondern daß ich ein Signal einer Funktion schicke, wenn der Pegel hoch
ist und wenn der Pegel unter ist, also falsch.
Das habe ich korrigiert, und dieser ist jetzt mein Code (nur für ein
Rad, aber für das andere ist gleich):
1 | #define HIGH 1
|
2 | #define LOW 0
|
3 |
|
4 | if((lastLeftStatus == HIGH) && bit_is_clear(ENCODER_PIN, ENCODERL_PIN))
|
5 | {
|
6 | lastLeftStatus = LOW;
|
7 | }
|
8 | if((lastLeftStatus == LOW) && bit_is_set(ENCODER_PIN, ENCODERL_PIN))
|
9 | {
|
10 | nStepLeft++;
|
11 | lastLeftStatus = HIGH;
|
12 | intervalL = getUptime() - lastL;
|
13 | lastL = getUptime();
|
14 | }
|
Dieser Code wird alle Millisekunde in der Interruptfunktion des Timers
aufgerufen.
Ich denke, es sollte jetzt richtig sein, oder?
Nun folgendes Problem: wenn ich messe wie viele Schritte eine Umdrehung
des Rads ist, kriege ich 100 anstatt die erwarterte 200.
Es mag auch sein, daß ich den Datenblatt des Encoders völlig falsch
verstanden habe. Kann jemand anderen es noch angucken, und mir sagen, ob
mein Code falsch ist, oder ob ich dringend Englischnachhilfe brauche?
Da ich nicht sicher bin, ob ich hier eine PDF-Datei hochladen darf, habe
ich den Datenblatt auf meinem Server hochgeladen:
http://www.lucabert.de/~lucabert/COPAL_RE10-100-200.pdf
Danke
Luca Bertoncello