Mahlzeit zusammen ,
was haltet Ihr davon, wenn man einen Drehgeber auswertet, ohne dabei eine ISR zu verwenden?
Wie stark leidet die Zykluszeit / Latenz bei groesseren Programmen?
Versuch ohne Interrupt:
/*
 Drehgeber Auswertung ohne Interrupt
 neutral = CLK & DT an
 rechts = (DT dann CLK aus) -> (DT dann CLK an)
 links = (CLK dann DT aus) -> (CLK dann DT an)
*/
const uint8_t CLK = 2;
const uint8_t DT = 3;
const uint8_t SW = 4;
void setup()
{
 Serial.begin(19200);
 pinMode(CLK, INPUT);
 pinMode(DT, INPUT);
 pinMode(SW, INPUT_PULLUP);
 while(!Serial){/*WARTEN*/}
}
void loop()
{
 static bool drehen, block;
 static int32_t zahl;
 bool M_CLK = digitalRead(CLK);
 bool M_DT = digitalRead(DT);
 bool M_SW = !digitalRead(SW);
Â
 if(M_SW && !block) //Taster
 {
  block = true;
  zahl = 0;
  Serial.print(F("RESET "));
  Serial.println(zahl);
 }
 else if(!M_SW && block)
 {
  block = false;
 }
Â
 if (!M_CLK && !drehen) //rechts
 {
  drehen = true;
  zahl -= 1;
  Serial.print(F("links "));
  Serial.println(zahl);
 }
 else if (!M_DT && !drehen) //links
 {
  drehen = true;
  zahl += 1;
  Serial.print(F("rechts "));
  Serial.println(zahl);
 }
Â
 if (M_CLK && M_DT && drehen) //Grunstellung
 {
  drehen = false;
 }
}