Ich hatte auch mal versuchsweise das ganze in eine ISR verlegt, aber der Interrupt wurde auch bei Nichtbetätigung bei mir getriggert. Das könnte an zu langen Kabeln etc liegen…
Hab es nicht weiter verfolgt.
Ist ein guter Punkt. Ja, das kann man vermutlich auch anders machen.
Grundsätzlich ausgelesen werden die Buttons über einen 1000 Hz-Hardwaretimer. ISR würde ich da nicht nehmen. Der Timer sorgt einfach für konstante Verhältnisse, ohne dem Ganzen zu hohe Priorität einzuräumen.
Der Hardware-Timer ist ein 240er-Prescaler mit 1000 Hz. Kannst mal nach „timerSemaphore = xSemaphoreCreateBinary();“ suchen.
Ich merke gerade, dass ich ISR und Interrupt durcheinander geworfen habe
Bei der ISR sollte man ja immer schauen, dass sie kurz bleibt. Hab da ja schon Leute gesehen, die haben da serielle Ausgaben reingemacht. Das geht einfach nicht, weil das blockiert ja so lange ALLES. Ich habe das auf jeden Fall so gelernt, dass man die ISR kurz macht und dort ein Flag setzt. Und mit dem Flag triggert man dann was Anderes, so dass die ISR nicht zu lange die CPU blockiert.