Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT...

23
Angewandte Informationstechnologie LEGO Mindstorms NXT Einführung in die Programmierung des NXT Brick mit NXC Dr. Leander Brandl 2010 it.brgkepler.at

Transcript of Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT...

Page 1: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

Angewandte Informationstechnologie

LEGO Mindstorms NXT

Einführung in die Programmierungdes NXT Brick mit NXC

Dr. Leander Brandl 2010

it.brgkepler.at

Page 2: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

ANGEWANDTE INFORMATIONSTECHNOLOGIE

Dr. Leander Brandl 2010 - it.brgkepler.at - Stand: 14.01.2010 Seite 2

Programmierung des NXT Brick mit NXC

1 Allgemeines

1.1 LEGO Mindstorms NXT

Im Oktober 2006 hat LEGO mit Mindstorms NXT eine neue Generation von LEGO Robotern auf den Markt gebracht. Begleitend zur weltweiten Verbreitung von LEGO Mindstorms haben diese Roboter längst auch in Schulen einzug gehalten.

Schülerinnen und Schülern können mit diesen Möglichkeiten und damit verbundenen Lernkonzepten Naturwissenschaften, Technik, Konstruktion, Programmierkenntnisse und Mathematik durch selbständiges Arbeiten vermittelt werden.

Zusätzliche Motivation erfährt die Konstruktion und Programmierung von Robotern durch die Teilnahme an Wettbewerben, wie der First Lego League oder dem RoboCup Junior.

1.2 Erstellung von Programmen mit der grafischen Oberfläche NXT

Die mitgelieferte Software ermöglicht die Erstellung von Programmen für NXT Roboter mit einer grafischen Oberfläche. In einer übersichtlichen Darstellung können Ereignisse (Auswertung von Sensoren) und Aktionen (Steuern von Motoren) miteinander verknüpft und auch komplexe Programmabläufe realisiert werden.

Die Programme werden in einer Art Baukastensystem zusammengestellt, die Bedienung kann intuitiv erfolgen und es werden keine Programmierkenntnisse vorausgesetzt. Die sehr übersichtliche und einfach zu bedienende Software bietet zwei Programmierbereiche für Einsteiger und Fortgeschrittene.

Abbildung 1.2.1 - Oberfläche der grafischen Programmiersoftware LEGO Mindstorms

Page 3: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

ANGEWANDTE INFORMATIONSTECHNOLOGIE

Dr. Leander Brandl 2010 - it.brgkepler.at - Stand: 14.01.2010 Seite 3

Programmierung des NXT Brick mit NXC

Abbildung 1.4.1 - Anschluss- und Tastenbelegung des NXT Brick

1.3 Die Programmiersprache NXC

Möchte man den gesamten Funktionsumfang des NXT Brick nutzen, so muss man auf Programmiersprachen und entsprechende Compiler zurückgreifen mit denen man Programmcode direkt für den im NXT Brick enthaltenen Mikrocontroller erstellen kann.

Neben kommerziellen Produkten haben sich auch einige Softwareentwickler daran gemacht eigene Lösungen zur Erstellung von Programmen für den NXT Brick in verschiedenen Programmiersprachen zu erstellen und bieten diese im Internet kostenlos an.

Die Programmiersprache NXC - Not eXactly C - wurde von John Hansen speziell für die LEGO Roboter entwickelt und basiert in den Grundstrukturen auf der Programmiersprache C.

1.4 Der NXT Brick

Der NXT Brick verfügt über 4 Eingänge und 3 Ausgänge. An den Eingängen können Sensoren angeschlossen werden, die Ausgänge werden verwendet um Motoren anzuschließen. Zusätzlich steht ein USB-Anschluss zum Übertragen von Programmen von einem Computer zum NXT Brick zur Verfügung.

Die Bedienung des NXT Brick erfolgt über die 4 Tasten unter dem Display. Nach dem Übertragen von eigenen Programmen stehen diese unter dem Menüpunkt "My Programs" zur Verfügung, können mit den Pfeiltasten ausgewählt und mit der orangen Taste gestartet werden.

Die eigentliche Arbeit beim Schreiben von Programmen erfolgt in der integrierten Entwicklungsumgebung Bricx Command Center.

Diese steht unter der folgenden Adresse zum Download bereit: http://bricxcc.sourceforge.net

Die vorliegende Einführung soll dazu dienen auch ohne Vorkenntnisse einer Programmiersprache das Erstellen von Programmen für den NXT Brick mit NXC zu erlernen.

Page 4: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

ANGEWANDTE INFORMATIONSTECHNOLOGIE

Dr. Leander Brandl 2010 - it.brgkepler.at - Stand: 14.01.2010 Seite 4

Programmierung des NXT Brick mit NXC

1.6 Die Sensoren

An den Eingängen des NXT Brick können unterschiedliche Sensoren angeschlossen werden. Mittlerweile gibt es zu den von LEGO gelieferten Sensoren auch eine große Anzahl, die von anderen Herstellern entwickelt und mit dem NXT Brick verwendet werden können.

Die genaue Funktion und die Einbindung der verschiedenen Senoren in eigene Programme wird in späterer Folge beschrieben.

Abbildung 1.6.1 - Standard-Sensoren von LEGO Mindstorms

Lichtsensor Geräuschsensor

Berührungssensor Abstandsensor

1.5 Die Motoren

Für LEGO Mindstorms wurden neue Servomotoren entwickelt. Diese verfügen auch über integrierte Rotationssensoren, die das genaue Messen von Geschwindigkeiten und Entfernungen ermöglichen und an den NXT Brick zurückmelden. Die Motoren können sehr präzise in 1° - Schritten gesteuert werden.

Abbildung 1.5.1 - Aufbau eines Motors

Page 5: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

ANGEWANDTE INFORMATIONSTECHNOLOGIE

Dr. Leander Brandl 2010 - it.brgkepler.at - Stand: 14.01.2010 Seite 5

Programmierung des NXT Brick mit NXC

2 Das erste Programm

2.1 Die Programmieroberfläche BricxCC

Zur Erstellung von Programmen für den NXT Brick bietet sich die Entwicklungsoberfläche Bricx Command Center aufgrund ihrer übersichtlichen Oberfläche und umfangreichen Funktionalität für den Einsatz in der Schule sehr an.

Wird dieses Programm gestartet, so muss zunächst angegeben werden welcher programmierbare Roboter-Baustein zum Einsatz kommt (hier NXT), über welche Schnittstelle dieser am Computer angeschlossen ist (hier USB) und welche Firmware auf dem Roboter-Baustein installiert ist.

Abbildung 2.1.1 - Die Programmieroberfläche Brixc Command Center mit den wichtigsten Bedienelementen

Compilieren des Programms Programm auf NXT übertragenNeues Programm Öffnen Speichern Texteditor

Zusätzlich zum Editor in dem der Programmcode geschrieben wird, kann damit das erstellte Programm mit dem Klick auf bereitgestellte Schaltflächen compiliert (in einen für den NXT vertändlichen Code übersetzt) und auch über die USB-Schnittstelle zum NXT Brick übertragen werden.

Abbildung 2.1.1 - Einstellungen beim Start des Bricx Command Centers

Page 6: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

ANGEWANDTE INFORMATIONSTECHNOLOGIE

Dr. Leander Brandl 2010 - it.brgkepler.at - Stand: 14.01.2010 Seite 6

Programmierung des NXT Brick mit NXC

Quellcode 2.2.1 - Programmstruktur und Steuern der Motoren an den Ausgängen A und B

2.2 Grundstruktur eines NXC-Programms und Steuern von Motoren

An den Ausgängen A, B und C können die Motoren angeschlossen werden. Bei den ersten Beispielen kommt ein einfaches Robotermodell mit zwei Motoren zum Einsatz, die an den Ausgängen A und B angeschlossen sind.

Programme in NXC bestehen aus Tasks. Jedes Programm muss zumindest einen Task mit dem Namen main() beinhalten. Alle Anweisungen, die zu diesem Task gehören, werden mit geschwungenen Klammern zusammengefasst. Jede Anweisung wird in NXC mit einem Strichpunkt beendet!

Die Funktionen OnFwd(Ausgang, Leistung) und OnRev(Ausgang, Leistung)

Zum Steuern der Motoren stehen die beiden Funktionen OnFwd(Ausgang, Leistung) und OnRev(Ausgang, Leistung) zur Verfügung. Als Ausgang können entweder ein Ausgang (OUT_A, OUT_B oder OUT_C) oder gleichzeitig mehrere Ausgänge (OUT_AB, OUT_AC, OUT_BC oder OUT_ABC) angegeben werden. Die Leistung, aus der sich die Drehgeschwindigkeit ergibt, kann mit ganzen Zahlen aus dem Bereich von 0 bis 100 zwischen 0% und 100% festgelegt werden.

Die Funktion Wait(Millisekunden)

Soll das Programm die zuvor angegebenen Anweisungen für eine bestimmte Zeit ausführen, so kann dies an jeder beliebigen Stelle mit der Funktion Wait(Millisekunden) erreicht werden.

Die Funktion Off(Ausgang)

Zum Ausschalten der Ausgänge verwendet man die Funktion Off(Ausgang). Die möglichen Werte für den Parameter Ausgang sind: OUT_A, OUT_B, OUT_C, OUT_AB, OUT_AC, OUT_BC oder OUT_ABC

Zum Programmcode:

Zeile 3: Der Motor an Ausgang A dreht sich mit 50% Leistung vorwärts

Zeile 4: Der Motor an Ausgang B dreht sich mit 50% Leistung vorwärts

Zeile 5: Das Programm wartet an dieser Stelle für zwei Sekunden, der Roboter fährt also zwei Sekunden rückwärts

Zeile 6: Der Motor an Ausgang A dreht sich mit 20% Leistung rückwärts

Zeile 7: Der Motor an Ausgang B dreht sich mit 20% Leistung rückwärts

Zeile 8: Das Programm wartet an dieser Stelle für drei Sekunden, der Roboter fährt also drei Sekunden rückwärts

Zeile 9: Die beiden Ausgänge A und B werden abgeschaltet - der Roboter bleibt stehen.

Page 7: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

ANGEWANDTE INFORMATIONSTECHNOLOGIE

Dr. Leander Brandl - it.brgkepler.at Anhang

Programmierung des NXT mit NXC

2.3 Kompilieren des Programms und Übertragen auf den Roboter

Nach dem Schreiben des Programmcodes im Editor muss dieser in einen für den NXT Brick verständlichen Code übersetzt werden. Dieser Vorgang wird von einem Compiler ausgeführt und im Brixc Command Center durch einen Klick auf die Schaltfläche mit den beiden Zahlrädern veranlasst.

Aufgabe 2.1

Page 8: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

ANGEWANDTE INFORMATIONSTECHNOLOGIE

Dr. Leander Brandl 2010 - it.brgkepler.at - Stand: 14.01.2010 Seite 8

Programmierung des NXT Brick mit NXC

3 Steuern von Motoren und Wiederholung von Programmteilen

3.1 Drehung

Soll sich der Roboter drehen, so kann dies durch Ansteuerung beider Motoren in entgegengesetzter Richtung oder durch Einschalten nur eines Motors erfolgen. Je nach Konstruktion und Aufgabenstellung wird entweder die eine oder andere Möglichkeit zum Einsatz kommen.

Quellcode 3.1.1 - Drehung des Roboters um 90°

Zum Programmcode:

Zeile 3 - 4: Beide Motoren fahren für zwei Sekunden mit Leistung 50% vorwärts

Zeile 5 - 6: Nur der Motor an Ausgang A fährt für 400 Millisekunden vorwärts

Zeile 7 - 8: Beide Motoren fahren wieder für zwei Sekunden mit Leistung 50% vorwärts

Zeile 9: Die Ausgänge A und B werden abgeschaltet

Die Kombination der Werte Leistung 50% und 400 Millisekunden ergibt beinahe eine Drehung um 90°. Sollte dies nicht der Fall sein, so können die Werte für die Leistung und die Warte-Zeit in Zeile 5 und 6 geändert werden.

Aufgabe 3.1

Aufgabe 3.2

Page 9: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

ANGEWANDTE INFORMATIONSTECHNOLOGIE

Dr. Leander Brandl 2010 - it.brgkepler.at - Stand: 14.01.2010 Seite 9

Programmierung des NXT Brick mit NXC

3.2 Wiederholung von Programmteilen mit repeat()

Sollen verschiedene Anweisungen in einem Programm mehrmals hintereinander ausgeführt werden, so müssen diese nicht entsprechend oft hintereinander im Programmcode stehen. Diese Aufgabe übernimmt das repeat - Statement.

Quellcode 3.2.1 - Wiederholung von Programmteilen mit dem repeat-Statement

Zum Programmcode:

Zeile 3: Mit dem repeat-Statement wird ein Bereich eingeleitet, der in der Folge mehrmals behandelt werdensoll. Der Wert in den runden Klammern gibt an, wie oft der folgende Anweisungs-Block wiederholt wird.

Zeile 4 - 9: Der Anweisungsblock, der zwischen den beiden geschwungenen Klammern steht wird 2 Malausgeführt.

Aufgabe 3.3

Aufgabe 3.4

Page 10: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

ANGEWANDTE INFORMATIONSTECHNOLOGIE

Dr. Leander Brandl 2010 - it.brgkepler.at - Stand: 14.01.2010 Seite 1 0

Programmierung des NXT Brick mit NXC

3.3 Motoren um vorgegebenen Winkel drehen

Bei der Steuerung der Motoren ist es nicht nur möglich diese mit unterschiedlichen Geschwindigkeiten vorwärts und rückwärts drehen zu lassen, sondern diese auch sehr exakt zu positionieren.

Quellcode 3.3.1 - Drehung der Motoren um einen vorgegebenen Winkel

Die Funktion RotateMotor(Ausgang, Leistung, Drehwinkel)

Zum Drehen der Motoren um einen bestimmten Winkel verwendet man die Funktion RotateMotor(Ausgang, Leistung, Drehwinkel).

Die möglichen Werte für die Parameter Ausgang und Leistung entsprechen denen der Funktionen OnFwd() und OnRev(). Mit dem Parameter Drehwinkel wird der Winkel angegeben, um den sich der Motor drehen soll: positive Werte - Drehung vorwärts, negative Werte - Drehung rüchwärts

Zum Programmcode:

Zeile 3: Der Motor an Ausgang A dreht sich mit der Leistung 20% eine Volldrehung (360°) vorwärts.

Zeile 4: Der Motor an Ausgang B dreht sich mit der Leistung von 50% um 120° rückwärts.

Page 11: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

ANGEWANDTE INFORMATIONSTECHNOLOGIE

Dr. Leander Brandl 2010 - it.brgkepler.at - Stand: 14.01.2010 Seite 1 1

Programmierung des NXT Brick mit NXC

4 Sensoren, Entscheidungsabfragen und Textausgabe am Display

4.1 Kontinuierliches Ablaufen von Programmen

Möchte man, dass Programme nicht wie bei den bisherigen Beispielen ein einziges Mal durchlaufen, so kann man dies mit einer Endlosschleife innerhalb des Tasks main() erreichen. Diese Schleife läuft solange das Programm im NXT Brick aktiv ist und wir am NXT Brick mit dem Stop-Button beendet.

Quellcode 4.1.1 - Endlosschleife in einem Programm für den NXT Brick

Die while - Schleife

Soll ein Anweisungsblock solange ausgeführt werden wie eine bestimmte Bedingung erfüllt ist, so verwendet man die while - Schleife. Nach dem Schlüsselwort while wird in runden Klammern eine Bedingung angegeben. Alle Anweisungen, die in dieser Schleife ausgeführt werden sollen, sind mit geschwungenen Klammern zusammengefasst.

Zum Programmcode:

Zeile 3: Beginn der while-Schleife mit der Bedingung (1==1). Diese ist immer erfüllt, die Schleife läuft endlos.

Zeile 5 - 9: Der Roboter fährt ein kleines Kreisstücke und wartet anschließend eine Sekunde.

Page 12: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

ANGEWANDTE INFORMATIONSTECHNOLOGIE

Dr. Leander Brandl 2010 - it.brgkepler.at - Stand: 14.01.2010 Seite 1 2

Programmierung des NXT Brick mit NXC

In diesem Programm wird zunächst festgelegt, dass an Eingang 1 ein Berührungssensor angeschlossen ist. In einer Endlosschleife fährt der Roboter gerade aus und macht bei einer Berührung eine Ausweichbewegung nach hinten bevor dieser wieder vorwärts fährt.

Die Funktion SetSensorTouch(Eingang)

Mit dieser Funktion legt man fest, dass einem Eingang ein Berührungssensor angeschlossen ist. Der Parameter Eingang kann die Werte IN_1, IN_2, IN_3 oder IN_4 annehmen.

Die Funktion Sensor(Eingang)

Möchte man auf die Werte, die ein Sensor liefert zugreifen, so verwendet man die Funktion Sensor(). Als Parameter übergibt man den jeweiligen Eingang IN_1, IN_2, IN_3 oder IN_4. Ist an einem Eingan ein Berührungssensor angeschlossen, so liefert die Funktion Sensor() die Werte 0 (Taster offen) oder 1 (Taster geschlossen) zurück.

Die Entscheidungsabfrage if()

Soll das Programm selbstständig Entscheidungen treffen, so steht dafür die if - Abfrage zur Verfügung. Hinter dem Schlüsselwort if wird in runden Klammern eine Bedingung angegeben. Alle Anweisungen, die ausgeführt werden, wenn die Bedingung erfüllt ist, werden mit geschwungenen Klammern zusammengefasst. Sollen Anweisungen ausgeführt werden, wenn die Bedingung nicht erfüllt ist, so werden diese hinter dem Schlüsselwort else angeführt.

Quellcode 4.2.1 - Ausweichmanöver des Roboters bei eine Berührung mit der Stoßstange an der Vorderseite

4.2 Der Berührungssensor

Die Sonsoren werden an einem der vier Eingänge des NXT Brick angschlossen. Bevor die Werte der Sonsoren im Programm verwendet werden können, muss gestgelegt werden, welcher Sensor an einem Eingang angeschlossen ist.

Page 13: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

ANGEWANDTE INFORMATIONSTECHNOLOGIE

Dr. Leander Brandl 2010 - it.brgkepler.at - Stand: 14.01.2010 Seite 1 3

Programmierung des NXT Brick mit NXC

Vergleichsoperatoren für Bedingungen

In den Bedingungen der if - Abfrage und einer while - Schleife können folgende Operatoren für den Vergleich von zwei Werten verwendet werden:

== ... ist gleich if (Sensor(IN_1) == 1) { ... }

!= .... ungleich if (Sensor(IN_3) != 1) { ... }

< .... kleiner if (Sensor(IN_2) < 4) { ... }

> .... größer if (Sensor(IN_4) > 20) { ... }

<= ... kleiner gleich if (Sensor(IN_4) <= 10) { ... }

>= ... größer gleich if (Sensor(IN_2) >= 25) { ... }

Verknüpfungsoeratoren für Bedingungen

Sollen in einer Bedingung mehrere Bedingungen verknüpft werden, so gibt es dafür die beiden Operatoren && und ||. Bei einer Verknüpfung mit && (und) ist die Gesamtbedingung erfüllt, wenn beide Bedingung erfüllt sind. Bei einer Verfknüpfung mit || (oder) gilt die Gesammtbedingung dann als erfüllt, wenn entweder die eine oder die andere Bedingung erfüllt ist.

Verknüpfung mit && (und) if ( (Sensor(IN_1) == 1) && (Sensor(IN_2) ==1) ) { ... }

Verknüpfung mit || (oder) if ( (Sensor(IN_1) == 1) || (Sensor(IN_2) ==1) ) { ... }

Zum Programmcode:

Zeile 3: Am Eingang 1 ist ein Berührungssensor angeschlossen.

Zeile 4: Die Aufgaben des Roboters laufen in einer Endlosschleife.

Zeile 6: Beide Motoren fahren mit der Leistung 40% vorwärts.

Zeile 7: Entscheidungsabfrage: Wenn die Funktion Sensor() den Wert 1 zurückliefert, dann fährt der Roboterdas Ausweichmanöver.

Zeile 9 - 11: Das Ausweichmanöver: Der Roboter fährt mit unterschiedlichen Geschwindigkeiten beider Motoren für2 Sekunden nach hinten.

Aufgabe 4.1

Aufgabe 4.2

Page 14: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

ANGEWANDTE INFORMATIONSTECHNOLOGIE

Dr. Leander Brandl 2010 - it.brgkepler.at - Stand: 14.01.2010 Seite 1 4

Programmierung des NXT Brick mit NXC

4.3 Der Lichtssensor

Wird ein Lichtsensor an einem Eingang angeschlossen so kann die Intensität des reflektierten Lichts aus dem Sensor ausgelesen werden. Im folgenden Beispiel fährt der Roboter mit einem nach unten gerichteten Lichtsensor auf einer weißen Fläche in Richtung eines schwarzen Strichs. Ist der Lichtsensor über dem schwarzen Strich, so soll der Roboter anhalten.

Quellcode 4.3.1 - Abtasten der Oberfläche mit einem Lichtsensor

Die Funktion SetSensorLight(Eingang)

Mit dieser Funktion legt man fest, dass einem Eingang ein Lichtsensor angeschlossen ist. Der Parameter Eingang kann die Werte IN_1, IN_2, IN_3 oder IN_4 annehmen.

Die Funktion Sensor(Eingang)

Möchte man auf die Werte, die ein Sensor liefert zugreifen, so verwendet man auch bei einem Lichtsensor die Funktion Sensor(). Als Parameter übergibt man den jeweiligen Eingang IN_1, IN_2, IN_3 oder IN_4. Im Fall eines Lichtsensors liefert die Funktion Sensor() die Werte zwischen 0 (minimale Intensität) und 100 (maximale Intensität) zurück.

Zum Programmcode:

Zeile 3: Beide Motoren fahren mit der Leistung 40% vorwärts.

Zeile 4: Am Eingang 1 ist ein Lichtsensor angeschlossen.

Zeile 5: In einer Endlosschleife wertet das Programm den Wert des Lichtsensors aus.

Zeile 7: Entscheidungsabfrage: Wenn der Wert des Lichtsensors kleiner als 40 ist, dann werden beide Ausgängeabgeschaltet.

Aufgabe 4.3

Aufgabe 4.4

Aufgabe 4.5

Page 15: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

ANGEWANDTE INFORMATIONSTECHNOLOGIE

Dr. Leander Brandl 2010 - it.brgkepler.at - Stand: 14.01.2010 Seite 1 5

Programmierung des NXT Brick mit NXC

4.4 Ausgabe von Text und Zahlen

Für die Ausgabe von Zahlenwerten und Text stehen unter NXC zwei Funktionen zur Verfügung. Diesen werden die Position der Ausgabe und der auszugebende Text bzw. Wert übergeben. Das folgende Programm zeigt kontinuierlich den Wert eines angeschlossenen Lichtsensors an.

Quellcode 5.1.1 - Ausgabe von Text und Zahlen am Display

Die Funktion TextOut(X-Koordinate, Zeile, Text)

Mit dieser Funktion wird Text am Display ausgegeben. Der Wert für die X-Koordinate kann zwischen 0 und 99 liegen und für den Parameter Zeile stehen die Werte LCD_LINE1, LCD_LINE2, ... , LCD_LINE8 zur Verfügung. Der auszugebende Text wird als Zeichenkette (String) übergeben und muss zwischen zwei doppelten Anführungszeichen stehen.

Die Funktion NumOut(X-Koordinate, Zeile, Zahl)

Möchte man Zahlenwerte am Display ausgeben, so müssen diese zuerst in Zeichenketten (Strings) umgewandelt werden. Dies übernimmt die Funktion NumOut(), der man die Startposition und den anzuzeigenden Zahlenwert übergibt.

Zum Programmcode:

Zeile 3: Die Zeichenkette "Lichtsensor: " wird in der Zeile 1 und der X-Koordinate 0 ausgegeben.

Zeile 4: Am Eingang 1 ist ein Lichtsensor angeschlossen.

Zeile 7: Der Zahlenwert, den die Fuktion Sensor(IN_1) zurückliefert, wird in Zeile 1 und der X-Koordinate 76 angezeigt. Die X-Koordinate 76 gibt hier die Position nach der Zeichenkette "Lichtsensor: " an.

Aufgabe 4.6

Page 16: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

ANGEWANDTE INFORMATIONSTECHNOLOGIE

Dr. Leander Brandl - it.brgkepler.at Anhang

Programmierung des NXT mit NXC

Anghang A - Referenz der NXC Programmierstrukturen und allgemeine Funktionen

Grundstrkutur

Anweisung 1; Anweisung 2; ...

Wiederholung eines Anweisungsblockes

Anweisung 1; Anweisung 2; ...

x gibt die Anzahl der Wiederholungen an

Endlosschleife mit while

Anweisung 1; Anweisung 2; ...

Entscheidungsabfrage mit if

Anweisung 1; Anweisung 2; ...

Anweisung 1; Anweisung 2; ...

Wait(Millisekunden)

Der Programmablauf wird an dieser Stelle angehalten

Millisekunden: ganze Zahl

TextOut(X-Koordinate, Zeile, Text)

Ausgabe einer Zeichenkette an einer bestimmten Position am Display

X-Koordinate: ganzzahliger Wert zwischen 0 und 99

Zeile: LCD_LINE1, LCD_LINE2, ... , LCD_LINE8

Text: Zeichenkette, begrenzt von doppelten Anführungszeichen (z. B. "Hallo NXT!")

NumOut(X-Koordinate, Zeile, Zahl)

Ausgabe eines Zahlenwerts an einer bestimmten Position am Display

X-Koordinate: ganzzahliger Wert zwischen 0 und 99

Zeile: LCD_LINE1, LCD_LINE2, ... , LCD_LINE8

Zahl: Zahlenwert oder Name einer Variable, die einen Zahlenwert beinhaltet

Page 17: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

ANGEWANDTE INFORMATIONSTECHNOLOGIE

Dr. Leander Brandl - it.brgkepler.at Anhang

Programmierung des NXT mit NXC

Anhang B - Referenz der NXT-spezifischen Funktionen Motoren in NXC

OnFwd(Ausgang, Leistung)

Vorwärtsbewegung der Motoren mit variabler Geschwindigkeit zwischen 0% und 100%

Ausgang: OUT_A, OUT_B, OUT_C, OUT_AB, OUT_AC, OUT_BC, OUT_ABC

Leistung: ganze Zahl 0 - 100

OnRev(Ausgang, Leistung)

Rückwärtsbewegung der Motoren mit variabler Geschwindigkeit zwischen 0% und 100%

Ausgang: OUT_A, OUT_B, OUT_C, OUT_AB, OUT_AC, OUT_BC, OUT_ABC

Leistung: ganze Zahl 0 - 100

RotateMotor(Ausgang, Leistung, Drehwinkel)

Drehung eines Motors um einen vorgegebenen Winkel

Ausgang: OUT_A, OUT_B, OUT_C, OUT_AB, OUT_AC, OUT_BC, OUT_ABC

Leistung: ganze Zahl 0 - 100

Drehwinkel: ganze Zahl, positiver Wert - Vorwärtsdrehung, negativer Wert - Rückwärtsdrehung

Off(Ausgang)

Abschalten der Ausgänge

Ausgang: OUT_A, OUT_B, OUT_C, OUT_AB, OUT_AC, OUT_BC, OUT_ABC

Page 18: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

ANGEWANDTE INFORMATIONSTECHNOLOGIE

Dr. Leander Brandl 2010 - it.brgkepler.at - Stand: 14.01.2010 Seite 1 8

Programmierung des NXT Brick mit NXC

Anhang C - Referenz der NXT-spezifischen Funktionen Sensoren in NXC

SetSensorTouch(Eingang)

An dem angegebenen Eingang ist ein Berührungssensor angschlossen

Eingang: IN_1, IN_2, IN_3, IN_4

SetSensorLight(Eingang)

An dem angegebenen Eingang ist ein Lichtsensor angschlossen

Eingang: IN_1, IN_2, IN_3, IN_4

Sensor(Eingang)

Diese Funktion liefert den Wert des Sensor am jeweiligen Eingang zurück

Eingang: IN_1, IN_2, IN_3, IN_4

Rückgabewert bei einem Berührungssensor: 0 (Taster offen) oder 1 (Taster geschlossen)

Rückgabewert bei einem Lichtsensor: 0 (minimale Intensität) bis 100 (maximale Intensität)

Page 19: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

ANGEWANDTE INFORMATIONSTECHNOLOGIE

Dr. Leander Brandl - it.brgkepler.at Anhang

Programmierung des NXT mit NXC

Anhang D - Aufgabensammlung

Aufgabe 2.1 (Roboter mit 2 Motoren)

Erstelle ein Programm, mit dem der Roboter fünf Sekunden mit einer Leistung von 50% rückwärts und anschließend mit einer Leistung von 30% zwei Sekunden vorwärts fährt.

Aufgabe 3.1 (Roboter mit 2 Motoren)

Erstelle ein Programm, mit dem der Roboter aus Kapitel 2 drei Sekunden vorwärts fährt, dann am Stand umdreht und anschließend wieder an den Ausgangspunkt zurückkehrt.

Aufgabe 3.2 (Roboter mit 2 Motoren)

Erstelle ein Programm, mit dem der Roboter aus Kapitel 2 ein Quadrad abfährt. Die Motorleistung kann dabei beliebig gewählt werden.

Aufgabe 3.3 (Roboter mit 2 Motoren)

Erstelle ein Programm, mit dem der Roboter ein Quadrat in der dargestellten Richtung viermal hintereinander abfährt und verwende dabei das repeat-Statement.

Aufgabe 3.4 (Roboter mit 2 Motoren)

Erstelle ein Programm, mit dem der Roboter einen Achter abfährt, der aus zwei Quadraten besteht und verwende dabei zwei Anweisungs-Blöcke, die mit repeat() eingeleitet werden.

Page 20: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

ANGEWANDTE INFORMATIONSTECHNOLOGIE

Dr. Leander Brandl - it.brgkepler.at Anhang

Programmierung des NXT mit NXC

Aufgabe 4.1 (Roboter mit 2 Motoren und einem Berührungssensor vorne)

Erstelle zwei Programme, mit denen der Roboter auf ein zylindrisches Hinternis (z. B. PET-Flasche) zufährt. Berührt der Roboter das Hindernis, so soll dieser ein Stück zurück und dann das Hindernis so umfahren, dass er danach seinen Weg wie zuvor fortsetzt. Mit dem ersten Programm soll der Roboter ein Ausweischmanöver auf der rechten, mit dem zweiten Programm ein Ausweichmanöver auf der linken Seite des Hindernis fahren ohne dieses zu berühren.

Aufgabe 4.2 (Roboter mit 2 Motoren und einem Berührungssensor vorne)

Erstelle zwei Programme, mit denen der Roboter auf ein rechteckiges (z. B. Ziegel) zufährt. Berührt der Roboter das Hindernis, so soll dieser ein Stück zurück und dann das Hindernis so umfahren, dass er danach seinen Weg wie zuvor fortsetzt (siehe Zeichnung). Mit dem ersten Programm soll der Roboter ein Ausweischmanöver auf der rechten, mit dem zweiten Programm ein Ausweichmanöver auf der linken Seite des Hindernis fahren ohne dieses zu berühren.

Aufgabe 4.3 (Roboter mit 2 Motoren und einem nach untern gerichteten Lichtsensor)

Erstelle ein Programm, mit dem der Roboter auf eine schwarze Linie zusteuert. Erreicht der Lichtsensor die schwarze Linie, so soll der Roboter für zwei Sekunden stehen bleiben. Im Anschluss daran soll dieser wieder vorwärts fahren bis der Sensor die weiße Fläche erreicht. Dort soll der Roboter stehen bleiben. Eine entsprechende Vorlage zum Ausdrucken findet sich am Ende dieses Skriptums.

Aufgabe 4.4 (Roboter mit 2 Motoren und einem nach untern gerichteten Lichtsensor)

Erstelle ein Programm, mit dem der Roboter auf eine schwarze Linie zusteuert, diese ohne anzuhalten überfährt und stehenbleibt, sobald der Lichtsensor nach dem Passieren der schwarzen Linie wieder die weiße Fläche erreicht. Eine entsprechende Vorlage zum Ausdrucken findet sich am Ende dieses Skriptums.

Page 21: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche

ANGEWANDTE INFORMATIONSTECHNOLOGIE

Dr. Leander Brandl - it.brgkepler.at Anhang

Programmierung des NXT mit NXC

Aufgabe 4.5 (Roboter mit 2 Motoren und einem nach unten gerichteten Lichtsensor)

Erstelle ein Programm, mit dem der Roboter auf einen Bereich mit mehreren, parallelen schwarzen Streifen zufährt. Der Roboter soll, wenn sich der Lichtsensor über einer schwarzen Linie befindet, jeweils für zwei Sekunden anhalten und dann weiterfahren. Hat der Roboter die dritte schwarze Linie erreicht, so soll der dort stehen bleiben. Eine entsprechende Vorlage zum Ausdrucken findet sich am Ende dieses Skriptums.

Aufgabe 4.6 (Roboter mit 2 Motoren und einem nach unten gerichteten Lichtsensor)

Erweitere das Programm aus Aufgabe 4.5 so, dass am Display laufend der aktuelle Wert des Lichtsensors angezeigt wird.

Page 22: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche
Page 23: Einführung in die Programmierung des NXT Brick mit NXC · 2016-06-15 · Programmierung des NXT Brick mit NXC 1.6 Die Sensoren An den Eingängen des NXT Brick können unterschiedliche