hardbass
PE2BAS
Die is wel makkelijker te begrijpen en in essentie gebeurt er hetzelfde. Ik zou wel de globale variabelen als statics in de functie zelf plaatsen. Dan blijft het allemaal wat beter bijelkaar.
Geen rekening gehouden met millis() overflow:
De millis() functie in Arduino reset naar nul na een bepaalde tijd (ongeveer 50 dagen bij 32-bit Arduino’s). Deze overflow wordt momenteel niet opgevangen, wat de timing kan verstoren naarmate de scheduler langer draait.
Klopt.
// Check if it's time to execute the task
if (millis() >= taskList[i].nextExecution)
Bovenstaande code geeft problemen na 50 dagen. Je krijgt eerst een overflow bij het zetten van nextExecution. De if geeft dan true bij elke test, zolang millis() nog geen overflow heeft gehad. Dus dan draait het systeem onder delays.
Daarom moet je altijd het verschil berekenen en dat vergelijken met de interval. Dat gaat ook goed igv overflows. Zie het voorbeeld van fcapri:
if(millies - led1OldTime >= led1Interval) {
ik weet niet of die code dat ook gaat aanvaarden. als led1oldtime een groot getal is, en millis is gereset naar 0, dat heb je daar een negatief getal.
ik maak een thuis accu met arduino en wil ik niet dat die elke 50dagen moet gereset worden. ik probeer dat hier mee. als de millis lager is dan de laatste waardes wordt alles gereset.
if (millis() < lastTime) { //arduino reset
lastTime = millis();
measureTime = millis();
htmlTime = millis();
starttestTime = millis();
} Ja, dat gaat goed. Want alle getallen zijn unsigned long en kunnen dus nooit negatief worden.
Bijv
Stel millis() = 0xFFFFFFFE en je copieert dat naar LastTime.
10 ms later staat millis() op 0x00000008.
Het verschil (millis() - Lasttime) is dan 10, precies wat je wilt.
Dus die extra controle kun je weglaten. Dat lost een probleem op dat niet bestaat.
hardbass
PE2BAS
Let wel op dat je variabelen unsigned zijn.
Edit, Oh, wat dekees net zegt
[Bericht gewijzigd door hardbass op (28%)]
blackdog
Golden Member
Daar de mens het noodzakelijke niet kan volbrengen, streeft hij naar het overbodige (Goethe)
Hi Heren en Dames ook! 
De laatste dagen duidelijk minder tijd gehad om aan de software en het oventje te werken.
Ik post hier nu even omdat ik tegen een klein probleem aan loop.
Het meeste gebruik ik na het goed opschonen i.v.m. veel problemen met de Arduino IDE 2.3.3, wat dus nu weer OK werkt nadat ik de bezem er doorheen heb gehaald.
Maar, ik test nu een Sensor en dat is de i2c BME280 en heb de IDE terminal open.
Ik wil graag de nieuwste gemeten waarden altijd in beeld hebben, maar deze scrolt nu aan de onderzijde uit beeld.
Ik heb met de "Carriage Retun" settings gespeeld maar dat is geen oplossing.
Zit dit in de gebruikte code opbouw van de door mij gebruikte test sketch,
of is is dit een functie van de Arduino IDE en hoe is dit misschien aanpasbaar?
Dank en groet,
Bram
De arduino monitor is nogal erg beperkt in mogelijkheden.
Het CR charactor '\r' wordt volledig weggefilterd en heeft dus geen effect. En cursor controle is ook niet voorzien voorzover ik kan zien.
Wel heeft de monitor een autoscroll funktie, dus daarmee blijft de laatste regel wel altijd in beeld. Ik heb nog een oude IDE 1.8, en bij mij staat er een vinkje links-onder in de status balk van de Serial monitor.
Maar je hoeft niet de arduino serial monitor te gebruiken, Je kunt ook een echte monitor gebruiken zoals bijv TeraTerm of putty. Al is het dan wel iets lastiger om een sketch te downloaden.
blackdog
Golden Member
Daar de mens het noodzakelijke niet kan volbrengen, streeft hij naar het overbodige (Goethe)
Hi deKees, 
Puttye en Tera Term werken zoals ik het verwacht, dank je.
dan kan ik voor snelle controle van een aantal probeersels die programma's gebruiken.
Zoals de ruis die een sensor heeft bij het uitlezen en wat de aanwezige filtering er mee doet.
Nu nog in die programma's een aantal zaken als default instellen, zodat ik een leesbare font krijg, met een prettige achtergrond kleur.
Groet,
Bram