22.11.2013 Aufrufe

Programmieren von LegoMindstorms-Robotern mit NQC

Programmieren von LegoMindstorms-Robotern mit NQC

Programmieren von LegoMindstorms-Robotern mit NQC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Programmieren</strong> <strong>von</strong> LEGO-MindStorms- <strong>Robotern</strong> <strong>mit</strong> <strong>NQC</strong><br />

#define turn_right(s,t) SetPower(OUT_A+OUT_C,s);OnFwd(OUT_A);OnRev(OUT_C);Wait(t);<br />

#define turn_left(s,t) SetPower(OUT_A+OUT_C,s);OnRev(OUT_A);OnFwd(OUT_C);Wait(t);<br />

#define forwards(s,t) SetPower(OUT_A+OUT_C,s);OnFwd(OUT_A+OUT_C);Wait(t);<br />

#define backwards(s,t) SetPower(OUT_A+OUT_C,s);OnRev(OUT_A+OUT_C);Wait(t);<br />

task main()<br />

{<br />

forwards(3,200); //ruft Makro forwards (=vorwärts) <strong>mit</strong> den Werten 3 und 200 auf<br />

turn_left(7,160); //ruft Makro turn_left (=drehe links) <strong>mit</strong> den Werten 7 und 160 auf<br />

forwards(7,100); //ruft Makro forwards (=vorwärts) <strong>mit</strong> den Werten 7 und 100 auf<br />

backwards(7,200); //ruft Makro backwards (=rückwärts) <strong>mit</strong> den Werten 7 und 200 auf<br />

forwards(7,100); //ruft Makro forwards (=vorwärts) <strong>mit</strong> den Werten 7 und 100 auf<br />

turn_right(7,160); //ruft Makro turn_right (=drehe rechts) <strong>mit</strong> den Werten 7 und 160 auf<br />

forwards(3,200); //ruft Makro forwards (=vorwärts) <strong>mit</strong> den Werten 3 und 200 auf<br />

Off(OUT_A+OUT_C);<br />

}<br />

Makros sind auch deshalb vorteilhaft, weil sie das Programm klein und da<strong>mit</strong> übersichtlicher machen. Du hast es da<strong>mit</strong> bei<br />

Änderungen leichter, wenn du zum Beispiel die Anschlüsse der Motoren änderst, dann genügt es die Makros zu verändern.<br />

Der Rest deines Programmes bleibt.<br />

7.5. Zusammenfassung<br />

In diesem Kapitel lernten wir die Verwendung <strong>von</strong> Aufgaben (Tasks), Unterprogrammen, Inline- Funktionen und Makros.<br />

Je nach Anwendung hat jedes seine Vor- und Nachteile.<br />

Tasks können gleichzeitig ablaufen und nebeneinander die unterschiedlichsten Sachen erledigen.<br />

Unterprogramme haben den Vorteil, dass derselbe Programmablauf <strong>von</strong> verschiedenen Stellen aus aufgerufen werden kann,<br />

aber nur einmal Speicherplatz belegt. Dies ist aber auch zugleich ihr größter Nachteil: Wenn das selbe Unterprogramm<br />

gleichzeitig <strong>von</strong> verschiedenen Stellen (insbesondere Tasks, die ja nebeneinander ablaufen) aufgerufen wird, gibt es<br />

Probleme.<br />

Inline- Funktionen funktionieren im Prinzip wie Unterprogramme, du brauchst die Befehle nur einmal einzugeben.<br />

Intern im RCX wird diese Befehlsabfolge an all die Stellen kopiert, <strong>von</strong> wo aus die Inline- Funktion aufgerufen wird.<br />

Dadurch können sie, im Gegensatz zu Unterprogrammen, parallel ablaufen. Sie benötigen deshalb aber auch mehr<br />

Speicherplatz im RCX.<br />

Im Gegensatz zu Unterprogrammen kann man Inline-Funktionen auch ein (oder mehrere) Argument(e) (= Wert(e)) <strong>mit</strong><br />

übergeben.<br />

Schließlich haben wir Makros kennengelernt. Sie eignen sich insbesondere für kurze Programmabschnitte, die <strong>von</strong><br />

verschiedenen Stellen aus aufgerufen werden sollen. Da den Makros beim Aufruf auch mehrere Werte <strong>mit</strong> übergeben<br />

werden können, sind sie für die Programmierung besonders interessant.<br />

Bravo !!<br />

Du hast dich nun bis hierher durchgearbeitet und da<strong>mit</strong> die Grundlagen für die Programmierung <strong>mit</strong> <strong>NQC</strong> gelernt.<br />

Die anderen Kapitel dieser Anleitung sind für spezielle Anwendungen gedacht. Du mußt sie also nicht sofort lesen. Aber<br />

blättere ruhig einmal weiter. Sicher findest du interessante Anregungen für Deine LEGO- Modelle!<br />

- 21 -

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!