Neustart des Arduino nach Aufruf in loop

Ich habe ein Problem mit meinem Arduino UNO.
Und zwar verwende ich ein Motorshield V2.0 der Fa. Adafruit und will dort zwei Schrittmotoren ansteuern.
Ich habe mir hierfür eine Funktion geschrieben,welche mehrere Fahrbewegungen ausführt.
Die Fahrbewegungen können dabei ca. 60 Sekunden andauern.

Nun zum eigentlichen Problem wird die Funktion in der void setup aufgerufen,dann beendet die Funktion die Fahrbewegungen ohne Probleme.

Wird nun die gleiche Funktion in der void loop aufgerufen startet das Arduino nach einiger Zeit neu.
Kann es sein, dass die void loop in ein Timeout läuft?
Wenn ja, kann man dieses Timeout vergrößern?

Ich habe mal meinen Code mit angehängt der Funktionsname lautet Draw7Segment().

Vielen Dank und Liebe Grüße

Ausgabe7Segment.ino (15.6 KB)

Ein Reset ist ein Zeichen dafür dass etwas katastrophal schief läuft. Rein softwaretechnisch kann das u.a. sein:
1.) Speicherüberläufe
2.) falscher Zugriff auf Zeiger
3.) Zugriff auf ungültigen Speicher

Und tatsächlich verwendest du Speicher falsch:

int iSegment[6];
...
iSegment[6]=1;

Ein Array der Länge 6 hat die Indices 0-5! Index 6 überschreibst du iBacklashX

Dann:
Wenn du Variablen innerhalb von loop() deklarierst, musst du beachten dass die wie in jeder Funktion nur einen Durchlauf lang gültig sind. Deinen gleitenden Mittelwert z.B. willst du wahrscheinlich beibehalten. Dafür gibt es "static"

Das hier ist erstens grauenhaft und zweitens überflüssig:

        iTempSaved=iTemp;
        // int to string und dann in ein char array
        sTempStr = String(iTemp)+"G"+"C";
        sTempStr.toCharArray(cTemp,6);
        Serial.println(cTemp[0]); 
        Serial.println(cTemp[1]);   
        Serial.println(cTemp[2]);   
        Serial.println(cTemp[3]);

Du kannst Integer oder Float Werte direkt mit print() Ausgeben und sogar formatieren:

Wenn man die Aneinanderreihen möchte kann man vereinfacht einfach mehrmals hintereinander print() machen

Du kannst auch generell etwas sparsamer mit dem Speicher umgehen obwohl das noch kein Problem sein sollte:
1.) Variablen die sich nie ändern, sondern eigentlich Konstanten sind als const deklarieren
2.) Variablen nur so groß machen wie sie sein müssen. Für 0-255 reicht byte/unsigned char
3.) Bei String Literalen und print()/println() das F()-Makro verwenden:
Serial.println(F("String im Flash"));
Sonst belegt der String RAM!

Vielen Dank für deine schnelle Antwort.

Du hast mir wirklich den Abend gerettet.

Das Board startet nun nicht mehr neu, es scheint als wäre das Problem der falsche Zeigerzugriff gewesen.
Nach vergrößern des Arrays scheint nun alles Ok.

Die Ausgabe sollte nur temporär sein, trotzdem werde ich auch noch deine weiteren Ratschläge beherzigen.

Nochmals Danke für deine Hilfe.