Drehgeber Auslesen mit höher Drehzahl

Hallo Arduinowelt 8) ,
ich habe ein großes Problem beim Auslesen von Impulsen meines Drehgebers (1024 Impuls / U) . Bei langsamer Drehzahl funktioniert das Auslesen gut. Wenn ich das Rad schnell dreh funktioniert nicht mehr gut. da ist mein Code.

int pin_A= 3;//  Signal A(zählsignal) 
int pin_B= 2; // Signal B(Richtungssignal) 
int pinStatus_A;
int pinStatus_B;

volatile double z=0;
volatile boolean stateNow=false;
volatile boolean stateBefore=false;
double a;
String wert = "";
char zeichen =0;
void setup()
{
  Serial.begin(9600);
  pinMode(pin_A,INPUT);
  pinMode(pin_B,INPUT);
  
  attachInterrupt(0,zaehlen_A,FALLING);// 0 ist der Interrupt für Pin 3, bei jedem Übergang von HIGH zu LoW wird zaehlen() aufgerufen
  
}
void loop()
{
 pinStatus_A = digitalRead(pin_A);
 pinStatus_B = digitalRead(pin_B);

 if( stateBefore != stateNow)
    {  
    a=(z*200)/1024; //Umwandlung in mm 
    Serial.println(a,3);
    stateNow = false;
    }
   while (Serial.available()>0)
   {
   zeichen = Serial.read();
   wert += zeichen;
   if(wert=="reset")
   {
     z=0 ;
     Serial.flush();
   } 
   } 
  wert =""; 
 
}
void zaehlen_A()
  {
    if( pinStatus_A != pinStatus_B)
    z++;
    else
    z--;
    stateNow=true;
  }

Beim schnellen Drehen bekomme ich solche Ergebnisse 0 , 1 ,2 , 3 , 4 , 5 , 6 , 7 ,7, 7,7,7,7,7, 8, 9, 10 ,11, 11, 11, 11, 11 , 11, 11, 11, 11 ...
ich weiß nicht wie ich meinen Code modifizieren soll.
Ich brauche Hilfe bitte.
vielen Dank für die Aufmerksamkeit
Franck

Mydonaldinho:
ich habe ein großes Problem beim Auslesen von Impulsen meines Drehgebers (1024 Impuls / U) . Bei langsamer Drehzahl funktioniert das Auslesen gut. Wenn ich das Rad schnell dreh funktioniert nicht mehr gut.

Aus Deiner Frage werde ich nicht ganz schlau, welche Drehzahl Du als "langsam" oder "schnell" verstehst. Kann man das Irgendwie in Umdrehungen pro Minute oder pro Sekunde ausdrücken?

Außerdem ist mir nicht ganz klar, um was für einen Drehgeber es sich handelt. Ist das
a) ein rein mechanischer Drehgeber als passives Bauteil?
Oder ist es
b) ein hochwertiger optoelektronischer Drehgeber mit eigener Stromversorgung und interner Elektronik?

Zusatzfrage: Brauchst Du Vor- und Rückwärtszählen oder nur Zählung in eine Richtung?

Und eine Grundsatzfrage: Warum zählst Du mit Gleitkommazahlen und nicht mit long oder unsigned long?

pinstatus_A und pinstatus_B ist nicht der Zustand während des Interrupts.

Zusatz: Da der Interrupt kommt, wenn Pin_B sich High->Low ändert, müsste pinsatatus_B eigentlich immer High sein in zaehlen_A() , ausser loop kommt viel zu selten dran.

Sobald loop nicht mehrmals zwischen zwei Zustandsänderungen eines der beiden Pins drankommt, wird es sicher Probleme geben. Wenn doch, wäre gar kein Interrupt nötig.

Zusatz: So ganz versteh ich die Logik übrigens nicht (dass es langsam überhaupt geht ?),
aber richtig kann das eigentlich nicht sein.
Kann der, wenigstens langsam, denn auch wieder zurück zählen ?

volatile boolean stateBefore=false;

könnte z.Zt. auch const statt volatile sein, schätze ich :wink:
Mit double hat jurs natürlich auch recht.