Problem bei Programmierung von Rücksprung im Programmcode

grafische Programmiersprachen für den EV3/NXT.
NXT-G, Robolab, LabView und was noch so schön bunt ist...

Moderator: Moderatoren

cc-mindstorm
Mindstormsfreund
Mindstormsfreund
Beiträge: 3
Registriert: 20. Feb 2013 14:06

Problem bei Programmierung von Rücksprung im Programmcode

Beitragvon cc-mindstorm » 21. Feb 2013 11:46

Hallo zusammen,

ich bin gerade dabei, eine einfache Abfolge von "Teilprogrammen" zu programmieren, verzweifle aber bei einer Verzweigung, die zu einem bestimmten Programmteil zurückspringen kann.

Der Roboter hat 2 Tasten. Im folgenden werde ich diese als T1 und T2 bezeichnen.

Folgender Ablauf soll realisiert werden:
1. Das Programm startet und wartet auf einen Tastendruck auf T1, danach wird das erste "Teilprogramm" abgearbeitet.
2. Wird nach der Abarbeitung vom ersten "Teilprogramm" T1 gedrückt, wird der nachfolgende Programmcode abgearbeitet, d.h. das zweite "Teilprogramm". Sollte allerdings T2 gedrückt werden, wird das zuvor abgearbeitete "Teilprogramm" nochmals abgearbeitet werden.
3. So soll auch das weitere Programm funktionieren, nach jedem "Teilprogramm" wird ausgewertet ob nun T1 oder T2 gedrückt wurde.

Insgesamt kann man also sagen, dass T1 einfach weiter im Programm macht, T2 jedoch das zuvor abgearbeitete "Teilprogramm" erneut abarbeitet.

In einer normalen Programmiersprache wäre das ja theoretisch kein Problem (einfach eine Verzweigung mit Schleife um die einzelnen "Teilprogramme"), aber wie kann ich das mit der Lego Mindstorms NXT Software grafisch programmieren?

Mit "Teilprogramm" meine ich einfach eine abfolge von irgendwelchen Operationen/Anweisungen.

Vielen Dank im Voraus :)

Martin0x5E
Schreibt super viel
Schreibt super viel
Beiträge: 489
Registriert: 17. Dez 2011 11:39
Wohnort: Österreich

Re: Problem bei Programmierung von Rücksprung im Programmcod

Beitragvon Martin0x5E » 22. Feb 2013 10:40

(einfach eine Verzweigung mit Schleife um die einzelnen "Teilprogramme")


Ich versteh dein Problem nicht ganz; in NXT-G gibt es doch auch Schleifen und Verzweigungen?
Wenn du weist wie es mit einer textbasierten Programmiersprache aussieht sollte es mit einer grafischen Prg.-spache keine Probleme geben ;)

Am besten du setzt deinen Ablauf erstmal auf einen Zettel in ein Flussdiagramm um. Aus so einen Flussdiagramm lässt sich dann schnell ein NXT-G Programm erstellen.

basic-flowchart.png
basic-flowchart.png (12.72 KiB) 2647 mal betrachtet
Projekte und Informationen auf meiner Website: http://roboticsaumair.jimdo.com/

cc-mindstorm
Mindstormsfreund
Mindstormsfreund
Beiträge: 3
Registriert: 20. Feb 2013 14:06

Re: Problem bei Programmierung von Rücksprung im Programmcod

Beitragvon cc-mindstorm » 25. Feb 2013 13:35

Der linke Ablaufplan kommt dem ganzen schon ziemlich nahe. Habe jetzt leider kein Tool da, um einen zu erstellen, aber hier in Textform:
1. Warte auf Tastendruck auf T1
2. Arbeite Teilprogramm1 ab
3. Warte, bis eine der Tasten gedrückt wurde. Wurde T1 oder T2 gedrückt?
4.a. T1 gedrückt: Arbeite das nächste Teilprogramm ab und gehe danach zu Schritt 3
4.b. T2 gedrückt: Arbeite das vorherige Teilprogramm erneut ab, danch zu Schritt 3

In C würde es ungefähr so aussehen:

Code: Alles auswählen

int main(int argc, char* argv[]) {

while(taste1 != TRUE && taste2 == TRUE) { //ich gehe davon aus, dass bereits ein einmaliges Antippen zu irgendeinem Zeitpunkt die entsprechende Tasten-Variable auf TRUE setzt
teilprogramm1: //...
}

while(taste1 != TRUE && taste2 == TRUE) {
teilprogramm2: //...
}

while(taste1 != TRUE && taste2 == TRUE) {
teilprogramm3: //...
}

return 0;
}


Ich hoffe, es ist jetzt verständlicher :mrgreen:

(...und ja, ich könnte jedes Mal eine Verzweigung machen und im entsprechenden Fall den vorherigen Code nochmal rein kopieren. Dadurch entsteht aber ein extremer Overhead an redundantem Code, deswegen will ich lieber zurück im Programm springen, quasi wie mit GOTO. Oder eben einer Schleife, bei der ich vernünftige Abbruchbedingungen angeben kann, s.o. C-Code.)

Martin0x5E
Schreibt super viel
Schreibt super viel
Beiträge: 489
Registriert: 17. Dez 2011 11:39
Wohnort: Österreich

Re: Problem bei Programmierung von Rücksprung im Programmcod

Beitragvon Martin0x5E » 25. Feb 2013 21:00

Du kannst C und programmierst mit der "Bildchensprache" von Lego?
Gibt es einen bestimmten Grund warum du dir das antust oder weißt du nicht das es NXC gibt? ;)

Ich denke mal du hast hier einen falschen Denkansatz mit Schleifen und Verzweigungen.
Bei mir würde sowas eher so aussehen:

Code: Alles auswählen


until (T1);       // Kommt dem Warte Block gleich..
Teilprogramm1;

while (true)   // Kommt der unendlich - Schleife gleich
{
   until( T1 OR T2);
   
   if (T1)            Teilprogramm1;
   else if (T2)      Teilprogramm2;
}
Projekte und Informationen auf meiner Website: http://roboticsaumair.jimdo.com/

cc-mindstorm
Mindstormsfreund
Mindstormsfreund
Beiträge: 3
Registriert: 20. Feb 2013 14:06

Re: Problem bei Programmierung von Rücksprung im Programmcod

Beitragvon cc-mindstorm » 26. Feb 2013 17:02

Ich studiere Informatik, kann C und sogar Assembler :D
Aber das Programm ist nicht für mich und ich MUSS das Problem mit dieser tollen Bildchen-Sprache lösen ;) Leider aber bin ich dazu nicht in der Lage oder es geht einfach.
Hat noch jemand nen Vorschlag? :prima:

Technicmaster0
Schreibt super viel
Schreibt super viel
Beiträge: 381
Registriert: 22. Dez 2010 12:36
Wohnort: In Berlin rechts abbiegen
Kontaktdaten:

Re: Problem bei Programmierung von Rücksprung im Programmcod

Beitragvon Technicmaster0 » 8. Mär 2013 17:01

cc-mindstorm hat geschrieben:Ich studiere Informatik, kann C und sogar Assembler :D
Aber das Programm ist nicht für mich und ich MUSS das Problem mit dieser tollen Bildchen-Sprache lösen ;) Leider aber bin ich dazu nicht in der Lage oder es geht einfach.
Hat noch jemand nen Vorschlag? :prima:

Mach es doch einfach mit einer/zwei Variablen, wobei eine darauf zeigt, welcher Teil des Programms ausgeführt werden soll. Also wenn T1 1x gedrückt wurde, wird der Wert 1, wenn er 2x gedrückt wurde, wird die Variable 2 etc. Wenn T2 gedrückt wird, dann bleibt sie so wie sie ist. Dann kannst du noch eine Bool erstellen, die zeigt, ob momentan ein Programm läuft. Wenn die false ist, wird wieder die andere gelöst.
Ich habs mal getestet und es funktioniert soweit, ist aber ziemlich langsam:
Bild
Bild
Wenn du willst, kann ich auch noch mal das Programm hochladen.

Technicmaster0
Schreibt super viel
Schreibt super viel
Beiträge: 381
Registriert: 22. Dez 2010 12:36
Wohnort: In Berlin rechts abbiegen
Kontaktdaten:

Re: Problem bei Programmierung von Rücksprung im Programmcod

Beitragvon Technicmaster0 » 15. Mär 2013 17:18

Das ganze müsste übrigens mit dem Bit Logic Block noch einfacher gehen.


Zurück zu „grafische Programmiersoftware“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 11 Gäste

Lego Mindstorms EV3, NXT und RCX Forum : Haftungsauschluss