gelöst: FC 03 wheel encoder angepasst an NodeMCU ESP8266

Weil ich jetzt mehrere Tage gesucht aber im Netz keine Lösung gefunden habe. Und weil mir dieses nette Forum schon mehrfach mit Rat zur Seite gestanden hat, möchte ich die Lösung gerne hier reinschreiben damit andere sie auch finden können.

Die Lösung basiert auf dem Beispielcode des Verkäufers des wheel encoders.

#define encdpin    D1 //D1 und D2 sind getestet. 

int count, countold;
unsigned long ignoremilli = 500; //Zeitwert in Microsekunden der gewartet wird um die Lichtschranke zu "entprellen"
unsigned long oldtime = 0;
unsigned long mtime = 0;

void setup()
{
  count = 0;
  countold = 0; 
  oldtime = micros();
  
  pinMode(encdpin, INPUT);

  Serial.begin(115200); 
  Serial.println("start");
}

void loop()
{
  int val= digitalRead(encdpin);
  //Serial.println(val);
  if (val==HIGH){
      mtime = micros();
  
  if( (mtime - oldtime) > ignoremilli ) {
   count++; 
   Serial.println("+1");
   Serial.println("mtime:");
   Serial.println(mtime);

   Serial.println("oldtime:");
   Serial.println(oldtime);

   Serial.println("count:");
   Serial.println(count);
  }
  oldtime = micros();
    
    }
  if (countold != count)
  {
    //Serial.println(count);
       countold = count;
  }
}

Die Änderungen zum Ursprungscode die das Beispiel auf der NodeMCU lauffähig machen sind:

  1. Millisekunden sind "zu lang" für den ESP8266 weil dieser "zu schnell ist". Daher statt milli die Funktion micro genutzt. Eine halbe Millisekunde funktioniert bei mir zum "debounce". Hängt auch ein wenig von der Geschwindigkeit der Lochscheibe ab.

  2. Seltsamerweise funktioniert es bei mir nur sauber mit den Pins 1 und 2.

Das zum laufen zu bekommen hat mich als Anfänger lange suchen gekostet, ich hoffe diese Info hilft anderen mit demselben Problem.