Wäre hier jemand so freundlich, die Funktion zu bearbeiten, dass sie auch auf dem Arduino funktioniert.
Bin jetzt seit längerer Zeit wieder mal am Arduino und verstehe die Welt nicht mehr
Wenn Du 32-Bit Werte mit snprintf ausgeben willst, musst Du %ld verwenden. %d druckt Integer, das ist zwar auf dem ESP 32Bit, auf dem Arduino aber nur 16Bit.
oder man schaltet die CompilerMeldungen im IDE ein
Ich habe alle Meldungen an.
Warnung ist nicht unbedingt gleich Fehler, kann aber später zur Laufzeit Fehler produzieren.
Deshalb ignoriere ich auch keine Compiler Warnungen.
Eine Frage hätte ich noch.
Wie kann ich runtime() dazu bewegen, auch noch die ms hinten dran zu hängen?
Die Frage bewegt mich seit dem Thema "Genauigkeit von millis".
Mein Arduino läuft jetzt seit über 2 Stunden und runtime() gibt mir 0 days 02:08:00 zurück.
Alle Funktionen im loop() arbeiten auf die Sekunde genau.
Ich habe im setup() einen Trick angewendet, damit die runtime() Sekunden nach dem Setup bei 0 starten.
freddy64:
Alle Funktionen im loop() arbeiten auf die Sekunde genau.
Habe ich etwa einen Arduino mit exzellentem Quarz erwischt?
Nö.
Merkst es aber erst später.
Tipp:
Vergleiche die abgelaufene Zeit in millis()*1000 mit der via NTP geholten Zeit vom lokalen Zeitserver oder einer (temperaturkompensierten) DS3231 - und das nicht nur für 2 Stunden - denn wie Du siehst, könnte eine Abweichung (*1000) gar nicht angezeigt werden.
Solange Du nichts weiter machst, kann das über sehr lange Zeit passen.
Aber gerade heute waren Interrupts so ziemlich das meist gennante Wort. Für millis() gilt das eben auch...