Hallo liebes Forum,
ich habe schon viele Einträge zum Thema "Encoder" gelesen, somit weiß ich auch, dass mein Anliegen vermutlich schon einen langen Bart hat.
Trotzdem komme ich nicht klar und würde zumindest gerne mal wissen, ob mein Ansatz grundlegend falsch ist.
In meinem Beispiel habe ich lediglich zwei Encoder. Encoder 1 soll bei der Drehung nach rechts den Wert 2 ausgeben und bei der Drehung nach Links den Wert 1. Bei Encoder 2 sind es die Werte 4 und 3.
In meinem Sketch funktioniert das auch soweit, allerdings nicht besonders präzise. D.h. drehe ich beispielsweise Encoder 1 nach rechts, sollte er ja pro Schritt den Wert 2 ausgeben. Aber hin und wieder mogelt sich der Wert 1 dazwischen. Lustigerweise dann, wenn ich den Encoder eher langsam drehe. Ich hätte da erwartet, dass dies bei besonders schnellen Drehbewegungen passiert, aber nein.
Vielleicht mag sich mal jemand meinen Sketch ansehen und sagen, ob das so überhaupt richtig ist. Möglicherweise liegt es ja auch am Encoder!?
Ist einer von Alps
Und hier ist der Code
int numEnc = 2;
int encpinl[2] = {52, 48};
int encpinr[2] = {50, 46};
int encl[2] = {0};
int encr[2] = {0};
int encoderoutputl[2] = {1, 3};
int encoderoutputr[2] = {2, 4};
int encoderwert = 0;
int digpin[4] = {46, 48, 50, 52};
int i = 0;
void setup() {
Serial.begin(38400);
while (!Serial);
for ( i = 0; i < 4; i++) {
pinMode(digpin[i], INPUT_PULLUP);
}
}
void loop() {
encoder();
}
void encoder() {
for ( i = 0; i < numEnc; i++) {
encr[i] = digitalRead(encpinr[i]);
if (encr[i] == 0 && encl[i] == 1)
{
if (digitalRead(encpinl[i]) == 0)
{
encoderwert = encoderoutputr[i];
}
else
{
encoderwert = encoderoutputl[i];
}
Serial.println (encoderwert);
}
encl[i] = encr[i];
}
delay(1);
}
