überlauf der Millis()

hallo
ich habe ein Projekt indem der Arduino praktisch mehrere jähre am stück laufen muss.
dabei stürzt er alle 12 stunden ab( bzw. er macht sehr komische Sachen das display funktioniert nicht und zeigt komische Sachen an usw.), ich habe mir gedacht vielleicht eine variable die grösser wird als sie eigentlich speichern kann. dabei habe ich an die Millis gedacht da diese ja sehr gross werden können wenn der Arduino so lange läuft.
zu dem Thema habe ich dann im internet recherchiert und in einem anderen topic gelesen( in welchem es um dass ungefähr gleiche problem ging) dass man, wenn man eine pause ohne delay (blink without delay) braucht das so machen soll:

long Intervall = 120,000
static unsigned long previousmillis;
if(mills() - previousmillis > Intervall){
// irgendwas machen
previousmillis += interval;
}

dies klappt bei mir nicht da in einer pause noch eine pause kommt nehmen wir an die eine pause löst sich alle 2 min aus und die pause in der pause alle 5 sek., dann würde das Beispiel oben nicht funktionieren da wenn 2 min vergangen ist millis() einen zu grossen abstand von previousmillis hat und jedes mal durchlaufen nur 5 sek zu previousmillis hinzugefügt werden
also habe ich es bei mir so gemacht:

long Intervallgrossepause = 120,000;
long Intervallkleinepause = 5,000;
unsigned long previousmillisgrossepause;
unsigned long previousmilliskleinepause;

if(mills() - previousmillisgrossepause > Intervallgrossepause){
previousmillisgrossepause = millis(); // der wesentliche unterschied zum anderen Beispiel 

while(true){
if(mills() - previousmilliskleinepause > Intervallkleinepause){
previousmilliskleinepause = millis();
Serial.print("Hallo"); // nur ein Beispiel 
}

würde es hier Komplikationen mit dem überlauf geben?

danke im voraus für die Hilfe!

(deleted)

Dankeschön!

ich verstehe ca 10% von dem was du sagst!

long Intervallgrossepause = 120,000;
sagt: expected unqualified-id before numeric constant

Du meinst bestimmt:

unsigned long Intervallgrossepause = 120'000;

if(mills() - previousmillis > Intervall)){

// irgendwas machen
previousmillis += interval;
}

'mills' was not declared in this scope;
'interval' was not declared in this scope;
Du meinst einst bestimmt:
if(millis() - previousmillis > Intervall){

Sorry, aber so geht das nicht...
Fehler in Fantasiecode suchen?
Wie stellst du dir das vor?


Und ja, die millis() Überläufe kann man korrekt abhandeln

long Intervall = 120,000

was soll diese Zahl bedeuten?
Das Komma ist im Sketch ein Punkt.
Ein Beistrich dient als https://riptutorial.com/de/c/example/2159/komma-operator
Außerdem sollte für millis() unsigned long Variablen verwendet werden.
Eine Zahl schreibt man ohne irgendeine Satzzeichen außer die Dezimalteil nach einem Punkt.

Grüße Uwe

p4u1:

while(true){

würde es hier Komplikationen mit dem überlauf geben?

Die Komplikation kommt nicht aus irgendeinem Überlauf.
Du kommst da NIE raus.

Deine Beschreibung:

nehmen wir an die eine pause löst sich alle 2 min aus und die pause in der pause alle 5 sek.,

ist ja sowas von genau, da kann die Glaskugel nicht einmal helfen.

Also, wenn Du eine Puse willst, dann baruchst Du ZWEI Werte.
Den Startwert der Pause UND die Pausenzeit.
In der Pausenzeit darf sich der Startwert nicht verändern, wenn Du die Pausenzeit benutzt, da Du keinen Endwert hast.
Das ist Sinn und Zweck von millis()/previousmillis.

Also musst Du ersmal eine Funktion so hinbekommen, das Sie das macht was sie soll, für die Zeit die du willst genau die Aktion ausführen und danach nicht mehr - bis der neue Zyklus beginnt.

Ich versteh schon was Du vorhast, aber Dein Ansatz ist falsch.
Versuchs mal ganz von vorne.
Und ohne die Komma oder was auch immer in den Zahlen.