Halllo,
Ich nutze auch einen Mechanischen Drehencoder.
Meiner kommt aus dem Conrad und ist mit Kondensatoren entprellt.
Am besten suchst du mal im Conrad nach dem Datenblatt.
Darin stand auch ein Ablauf-Diagramm für Software.
Nach dem habe ich den code gemacht:
Code:
void CheckEncoder() {
encoder.state = readEncoder(); // gibt zwei bits zurück z.b.: 0b10, je nach Status der Encoder-Kanäle
uint8_t yy = (encoder.state ^ encoder.state_last);
if (((encoder.state & 0b10)>>1) == (encoder.state & 0b01)) {
if (yy == 0b01) {
//cw
encoder.position++;
} else if (yy == 0b10) {
//ccw
encoder.position--;
}
} else {
if (yy == 0b10) {
//cw
encoder.position++;
} else if (yy == 0b01) {
//ccw
encoder.position--;
}
}
encoder.changed = 1;
encoder.state_last = encoder.state;
}
Am Besten pollst du die Methode.
MfG Alex
Lesezeichen