Pages: [1]   Go Down
Author Topic: terminierende Loop?  (Read 583 times)
0 Members and 1 Guest are viewing this topic.
Darmstadt
Offline Offline
Jr. Member
**
Karma: 1
Posts: 73
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 :-(
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21242
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 2
Posts: 30
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

Ein Microkontroller kennt halt kein "Terminieren", er läuft einfach.
Wenn er nix machen soll, dann mach ein
Code:
while(true) { }
hinter deine Schleife.

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

Grüße, Holger
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 138
Posts: 2874
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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);
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21242
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Darmstadt
Offline Offline
Jr. Member
**
Karma: 1
Posts: 73
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ;-)

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

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21242
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Full Member
***
Karma: 5
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: January 14, 2013, 12:59:30 pm by Addi » Logged

  / \    _|  _| o
 /--\ (_| (_| |

Munich/Germany
Offline Offline
God Member
*****
Karma: 11
Posts: 643
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

_______
Manfred

Pages: [1]   Go Up
Jump to: