terminierende Loop?

Ist es möglich eine Loop terminieren zu lassen?
Wenn ich z.B. nur bis 100 Zählen möchte und dann soll das Programm Terminieren.

Mein Ansatz:
void loop (){

if(int i= 0; i < 100; i++){
//Aktion welche NUR 100 mal Ausgeführt werden soll
}
}

Da aber die Loop nach abarbeitung neu gestatet wird, macht eine Schleife welche nur 100 mal durchgeführt werden soll keinen sinn :frowning:

gib den Code in setup() und lasse loop() leer.
Grüße Uwe

Hi,

Ein Microkontroller kennt halt kein "Terminieren", er läuft einfach.
Wenn er nix machen soll, dann mach ein

while(true) { }

hinter deine Schleife.

edit: Oder wie Uwe sagt natürlich noch einfacher im Setup :slight_smile:

Grüße, Holger

BigInteger:
Ist es möglich eine Loop terminieren zu lassen?

Terminieren geht nicht, der Mikrocontroller läuft immer und Du kannst ihn allenfalls in einen Schlafmodus/Energiesparmodus versetzen.

Ansonsten kannst Du ihn nach Abarbeitung des Programms in eine Endlosschleife schicken, z.B. per:

while(1);

loop() ist bereits eine Endlosschleife.
Grüße Uwe

uwefed:
gib den Code in setup() und lasse loop() leer.
Grüße Uwe

cool danke für den Tipp wusste nicht dass das geht / man das darf :wink:

Und gibt es nochwas für Unterprogramme zu beachten? Wo würde ich denn diese schreiben, so dass diese nicht gleich ausgeführt werden?

Funktionen müssen immer außerhalb anderer Funktionen definiert werden.
Ansonsten Statusvariabile setzen und die Funktion ausführen nur wenn die Statusvariable 1 ist. Im if die Statusvariable auf null setzen.
Grüße Uwe

Könnte man nicht break verwenden?
Weil die loop() wird später in einer for-schleife aufgerufen, oder? Und eine for-Schleife
kann man mit break beenden.
Edit: Man könnte auch versuchen die loop() von void zu int zu verändern und dann bei der zur terminienden bedingung
ein return 0 einfügen, sonst erst als letzte Anweisung im Programm.

Addi

Addi:
Könnte man nicht break verwenden?
Weil die loop() wird später in einer for-schleife aufgerufen, oder? Und eine for-Schleife
kann man mit break beenden.
Edit: Man könnte auch versuchen die loop() von void zu int zu verändern und dann bei der zur terminienden bedingung
ein return 0 einfügen, sonst erst als letzte Anweisung im Programm.

Addi

Das break müsste aber direkt in der for() Schleife sein. Innerhalb einer in der Schleife aufgerufenen Funktion funktioniert es nicht (wär ja auch schlimm).
Und warum soll man in den Arduino Sourcen rumpfuschen (was bei jedem Update angepasst werden müsste) wenn es doch eine einwandfreie Lösung gibt?
Normale Programme (welche in der Regel endlos laufen) nutzen setup() und loop().
Programme mit nur einem Durchlauf nutzen halt nur setup() und lassen loop() links liegen.
Und wenns dann noch der Sonderfall sein sollte, dass das Programm z.B. genau 5x laufen soll, nimmt man einen Zähler und nach dem fünften Lauf gibts einfach ein while(true).

Kleiner Tip: zum Programmieren gehört ein gewisses Maß an Pragmatismus. Sonst verrennt man sich und kommt auf keinen grünen Zweig.