
Zitat von
Sinnloserknopf
Moin Moin,
ich habe mal folgende Lib probiert:
RotaryEncoder.h
Damit kann ich schon mal zuverlässig Vor und Zurück erkennen. Der Uno ist also schnell genug hab es nur scheiße programmiert....
werde es weiter versuchen

Hi, in dein Code hat noch Schwächen:
- Ein Motor kann auch stehen
- Überflüssige Variable: Position
- Die Zeilen 'if (newPos == 66) delay(6600);' sind sinnlos
- Test 'if(newPos < position) ...': Die Variable newPos läuft irgendwann über. Dann ist einmal newPos kleiner als pos -> Test liefert einmalig falsche Richtung.
Vorschlag:
Code:
#include <RotaryEncoder.h>
// Setup a RoraryEncoder for pins A2 and A3:
RotaryEncoder encoder(A2, A3);
enum {zurueck =-1, still, vor}; // Motorrichtung
sign(int x) { return (x>0)-(x<0); } // Vorzeichen einer Zahl : -1, 0, +1
void setup() {
Serial.begin(9600);
Serial.println("SimplePollRotator example for the RotaryEncoder library.");
// Interrupt für Encoder festlegen
PCICR |= (1 << PCIE1);
PCMSK1 |= (1 << PCINT10) | (1 << PCINT11);
}
// Interrupt Service Routine für Pin Change Interrupt 1
ISR(PCINT1_vect) { encoder.tick(); }
void loop() {
static int pos = 0;
int newPos = encoder.getPosition();
int richtung = sign(newPos - pos);
switch(richtung) {
case zurueck:
Serial.println("Zurueck!"); break;
case still:
Serial.println("Still!"); break;
case vor:
Serial.println("Vor!"); break;
}
Serial.println();
pos = newPos;
}
}
Lesezeichen