Ardunio Hallsensor m. TLE 4095L - Drehzahlsprünge

Hallo,

ich würde in der ISR nur immer stur die Differenz zum vorherigen Wert bilden. Ohne deine count = 1 Lösung. Danach zu kleine und zu große Werte rausfiltern (Drehzahlband) und danach den Wert einer permanenten Mittelwertbildung zuführen. Die maximale Drehzahl ist dabei nicht einmal das Problem sondern die minimale Drehzahl. Ich vermute auch einen Logikfehler in deinem ISR Code mit deinen bool Flag Änderungen. Wenn du derzeit nur einen Sensor nutzt, kannste nicht den zweiten mit einbeziehen. Desweiteren schreibst du ständig auf die serielle ohne Pause, dann kommen sich die Interrupts ins Gehege, was zu Fehlmessungen führen wird.

Vorschlag.

void isrCount()
{
    static unsigned long old_SensA = 0;
     
    unsigned long newSensA = micros();
    time_SensA = newSensA - old_SensA;
    old_SensA = newSensA;
}

time_SensA global volatile, den Wert mitteln (oder auch nicht) und nur aller 0,5 oder 1 Sekunde ausgeben lassen. Also Berechnung und Ausgabe auftrennen.