Hi,
hatte grade kurz Zeit, mir den Sketch reinzuziehen.
Anmerkungen:
Viele Konstante sind als Variablen definiert, das verbraucht unnötig RAM - defines funktionieren da besser. Auch wenn hier ein MEGA zum Einsatz kommt, der Speicher und Schnittstellen zuhauf hat, sollte man sich das nicht angewöhnen :) Wenn man mal mit einem etwas limitierteren Mikrocontroller arbeitet, lernt man das schnell zu schätzen.
Ebenso ist die Abarbeitung von Interrupts so nicht ganz ideal; wenn bei Timer4 oder Timer5 der ICP feuert, dann laufen trotzdem alle anderen Interrupts weiter, da sie nicht mit cli() oder ähnlichem deaktiviert wurden. Es kann vorkommen, dass man mitten in einer ISR dann von einer anderen ISR unterbrochen wird - wahrscheinlich nicht sinnvoll. Wie viel Zeit da zwischen solchen ICP events verstreicht oder ob die wirklich gleichzeitig passieren - noch nicht getestet, dafür fehlt mir noch Hardware.
Der Ringpuffer ist als int mit 50 Elementen angegeben, alle Puffer-Vars haben aber 50 hardcoded drin stehen (15-20x bei den Var-Definitionen). Sowas verringert die Wartbarkeit drastisch ;)
Ebenso wird nur Serial.begin() verwendet - der Mega hat aber 4 Serials! Analog dazu gibt es hier auch Serial1.begin(), Serial2.begin, Serial3.begin() - wird wirklich nur eine (die erste, die auch USB debug macht) verwendet? Fände ich verbesserbar, eben weil ja 4 COMs vorhanden sind und der BME eine ganz eigene bekommen könnte, was auch die Latenz verringern könnte (die UARTs werden parallel ausgewertet).
Ich hab' da mal ein bißchen rumeditiert am Code - da ich nicht im Repo bin kann ich auch nichts committen, also hab' ich den Sketch hier als Attachment angehängt. Die einzigen Änderungen sind der Übersichtlichkeit und Speichernutzung geschuldet - defines statt Variablen, Ringpuffer-Variablen statt hardcoded 50 RINGBUFFER_SIZE usw. Was die Detektion von Doppelimpulsen usw. angeht, muß ich erst die ISRs bzw. den Programmlauf genauer analysieren, noch keine Zeit gehabt :) Basiert auf 2.0.1.
MEGA_PSTfreq_BME280_v1.zip