image
image

Alexander Schulze blickt auf eine 35-jährige Erfahrung im Umgang mit Computern und Programmierung zurück und hat sein Hobby nach dem Studium der Technischen Informatik (Berufsakademie) zum Beruf gemacht. Mit mehr als 20 Jahren Erfahrung in der Java-Programmierung arbeitet er als Senior IT Architekt in Projekten für Großkunden.

LEGO-begeisterte Kinder haben ihn zu LEGO MINDSTORMS geführt und die Leidenschaft für die Programmierung von Robotern entfacht.

Verschiedene Workshops an einer Grundschule sowie die Unterstützung der Robotik-AG an einem Gymnasium im Unterallgäu legten den Grundstein für dieses Buch. Dabei stand von Beginn an die Teilnahme an verschiedenen Wettbewerben mit den Schülern im Vordergrund, um mit den Schülern auf ein konkretes Ziel hinzuarbeiten.

image

Zu diesem Buch – sowie zu vielen weiteren dpunkt.büchern – können Sie auch das entsprechende E-Book im PDF-Format herunterladen. Werden Sie dazu einfach Mitglied bei dpunkt.plus+:

www.dpunkt.plus

Alexander Schulze

LEGO®
MINDSTORMS®
programmieren

Robotikprogrammierung mit grafischen Blöcken,
Basic und Java für LEGO EV3

image

Alexander Schulze

Lektorat: Gabriel Neumann

Bibliografische Information der Deutschen Nationalbibliothek

ISBN:

1. Auflage 2020

Hinweis:

image

Schreiben Sie uns:

Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Die Verwendung der Texte und Abbildungen, auch auszugsweise, ist ohne die schriftliche Zustimmung des Verlags urheberrechtswidrig und daher strafbar. Dies gilt insbesondere für die Vervielfältigung, Übersetzung oder die Verwendung in elektronischen Systemen.

5 4 3 2 1 0

Danksagung

Besonderer Dank geht an Herrn Ronny Kröhne als Kollegen und Freund des Autors, der mit viel Geduld die Inhalte des Buchs immer wieder geprüft, korrigiert und bewertet hat.

Ebenfalls besonderer Dank geht an die Ehefrau des Autors, Monika Schulze, die die Idee zu dem Buch maßgeblich entwickelt hatte.

Inhaltsverzeichnis

1Einleitung

2Einführung in die Basiskomponenten

2.1Einführung LEGO MINDSTORMS

2.2Einführung LEGO Digital Designer

2.3Einführung in Microsoft Small Basic und EV3 Basic

2.4Einführung in leJOS

3Vorbereitung der Umgebungen, Installation der Basissoftware und Grundeinführung

3.1LEGO-EV3-Software

3.2Installation EV3 Basic (Microsoft Small Basic)

3.3Installation leJOS

3.4Kopplung des EV3-Bricks mit dem Computer

3.5Bau des Beispielroboters

4Programmierung des EV3

4.1Motorsteuerung und Abfrage von Sensorwerten

4.2Ansteuerung von LCD und Lautsprecher

4.3Schleifen, Schleifenabbruch und Unterbrechung

4.4Schalter, Bedingungen und Vergleiche

4.5Variablen, Konstanten, mathematische Berechnungen und Datenleitungen

4.6Unterprogramme

4.7Parallele Ausführung mehrerer Programmsequenzen

4.8Logische Operationen, Zugriff auf Sensorwerte, weiterführende mathematische Berechnungen und Zufallsgenerator

4.9Dateioperationen und Fehlerbehandlung

5Weiterführende Themen der Programmierung

5.1Linienverfolgung mit einem oder zwei Farbsensoren

5.2Kommunikation zwischen mehreren EV3-Bricks

6Umsetzung größerer Projekte

6.1Spielentwicklung am Beispiel Pong

6.2Raumscanner

7Fazit und Ausblick

8Weiterführende Informationen zum EV3

8.1Besondere Details der LEGO-EV3-Software

8.2Debugging

8.3Kommentare

8.4Ungeregelte Motoren und deren Unterschiede

8.5Firmware-Aktualisierung

8.6Sensorinitialisierung in leJOS und Autocloseable ab Java 7

9Anhang

9.1Tastenbelegung des EV3-Bricks

9.2leJOS mit Java 8 Compact Profile

9.3Schlüsselwörter in Java

9.4Erweitertes Java-Framework für leJOS

1Einleitung

Im Rahmen einer Robotik-AG an einer Grundschule sowie am Gymnasium und der Teilnahme an mehreren Roboter-Wettbewerben entstand die Idee für ein LEGO-Mindstorms-Buch, das sich an einer konkreten didaktischen Vorbereitung orientiert und neben den notwendigen Robotermodellen und Programmbeispielen auch unterschiedliche Programmiersprachen behandelt. Damit wird der Grundstein für eine professionelle Anwendungsentwicklung gelegt.

Die grafische Programmierung der LEGO-EV3-Software ist für Einsteiger ein perfektes Mittel, um die klassischen Programmierkonzepte zu erlernen und schnell Erfolge zu erzielen. Dies ist nicht zuletzt der Grund, warum LEGO Mindstorms vor allem an Bildungseinrichtungen ein großer Erfolg ist. Das gleiche Argument trifft auch auf Snatch-basierte Programmierumgebungen zu, die sich im Gegensatz zur EV3-Software (basierend auf LabVIEW) eher an Flussdiagrammen orientieren. RobertaLab ist dabei ein bekannter Vertreter für die grafische Programmierung, die auch im Browser eine simulierte Welt anbietet.

Die grafische Programmierung hat jedoch Limitierungen, sobald komplexere Lösungen umzusetzen sind. In der kommerziellen Softwareentwicklung hat sich die grafische Programmierung nie durchgesetzt, auch wenn dort Ansätze vorhanden waren (zum Beispiel mit Visual Age for Java). Somit kommt in der kommerziellen Softwareentwicklung textbasierte Programmierung mit unterschiedlichen Programmiersprachen zum Einsatz. Dieser Tatsache wird in diesem Buch Rechnung getragen, indem nicht eine Konzentration auf die grafische Programmierung erfolgt, sondern alle Übungen und Beispiele auch in Basic unter Einsatz von Microsoft Small Basic und Java unter Einsatz von leJOS gezeigt werden. Damit ist es möglich, sich entweder auf eine Programmiersprache zu konzentrieren oder aber die Unterschiede der Sprachen zu bearbeiten und darzustellen. Bei Konzentration auf eine Sprache ist es nicht notwendig, die Unterkapitel mit den Beispielumsetzungen und Lösungen der anderen Sprachen zu lesen. Im Hauptkapitel werden immer die generellen Aspekte erläutert und für jede Programmiersprache anschließend spezifisch vertieft.

Material zum Buch (Modelle, Anleitungen, Quellcode in den verschiedenen Programmiersprachen) kann über die Website des Verlags kostenfrei bezogen werden:

dpunkt.de/programmev3

Dieses Buch nutzt ein einfaches Robotermodell, das vollständig mit der LEGO EV3 Mindstorms Home Edition gebaut werden kann und für das Erlernen der Programmierelemente alle erforderlichen Komponenten berücksichtigt. Das Buch enthält keine komplexen oder ausgeklügelten Robotermodelle, wofür es sehr gute alternative Bücher gibt, die sich auch mit der Konstruktion von Robotern, Getrieben oder Ähnlichem beschäftigen.

Neben den verschiedenen Programmierelementen in den ersten Kapiteln wird in einem der späteren Kapitel die Umsetzung größerer Projekte thematisiert und darunter ein Spiel-Clone des bekannten Spiels Pong für den EV3 umgesetzt sowie ein Raumscanner, wie ihn Staubsaugerroboter nutzen, demonstriert. In diesen Kapiteln werden somit die Erkenntnisse der vorherigen Kapitel zusammengefasst genutzt.

Im Rahmen dieses Buchs werden die Umgebungen auf einem Windows-10-System installiert und konfiguriert. Sowohl leJOS als auch die LEGO-EV3-Software sind ebenso für andere Plattformen wie zum Beispiel macOS verfügbar. Auf die Unterschiede wird jedoch nicht explizit eingegangen. Microsoft Small Basic ist nur für Windows verfügbar.

Das Buch verwendet an verschiedenen Stellen der leichteren Lesbarkeit halber die maskuline Form. Dies impliziert jedoch keine Benachteiligung anderer Geschlechter, sondern ist im Sinne der sprachlichen Vereinfachung als geschlechtsneutral zu verstehen.

2Einführung in die Basiskomponenten

2.1Einführung LEGO MINDSTORMS

 

LEGO MINDSTORMS hat mittlerweile eine sehr lange Historie und wurde von LEGO 1998 auf den Markt gebracht. Es war ursprünglich als Marketingkanal für LEGO zur Kundenbindung angedacht, um eine »lebenslange Bindung« zu LEGO zu erzeugen und nicht nur Kinder anzusprechen. Mit LEGO Mindstorms hat LEGO eine programmierbare Plattform zur Steuerung von LEGO-Modellen geschaffen, die über Sensoren Werte einlesen, verarbeiten und über Motoren als Aktoren agieren kann.

Über mehrere Jahre erfolgte eine Evolution des Produkts, angefangen beim RCX 1998 über den NXT 2006 zum aktuellen Modell EV3 im Jahr 2013. Dabei kamen weitere Anschlüsse, die Unterstützung von USB, Bluetooth und WLAN sowie leistungsfähigere Prozessoren und Speicherkomponenten hinzu.

Vor allem im Bildungsbereich (Schulen, Universitäten) wird LEGO Mindstorms intensiv eingesetzt: in Robotik-Arbeitsgemeinschaften vieler Schulen, dem LEGO-Mindstorms-Labor im Deutschen Museum in München und der Fraunhofer-Initiative »Roberta – Lernen mit Robotern«1, um nur ein paar wenige Beispiele zu nennen.

LEGO liefert mit der Home Edition (31313) von EV3 verschiedene Motoren und Aktoren sowie Sensoren mit und bietet verschiedene weitere Komponenten zum Nachkauf an. Weiterhin existiert eine LEGO Mindstorms Education Edition (45544), die sich im Vergleich zur Home Edition durch eine Stapelbox sowie eine alternative Zusammenstellung von Sensoren (Ultraschall statt Infrarot, Kreiselsensor) sowie einen Akku auszeichnet.

Die folgende Tabelle gibt eine kurze Übersicht über die Unterschiede der verschiedenen Entwicklungsstufen von LEGO Mindstorms, angelehnt an die Darstellung in Wikipedia2.

image

Für die Programmierung stellt LEGO die LEGO-EV3-Software kostenfrei zur Verfügung. Für den Bildungsbereich (Education Edition) wird eine Fassung für Lehrer und Schüler angeboten, die um zusätzliche Beispiele sowie die Möglichkeit der zentralen Datenauswertung erweitert wurde.

Als Aktoren bezeichnet man Komponenten, über die eine Ausgabe oder Aktion erfolgen kann. Die folgenden sind dabei zu nennen, die alle in selbst erstellten Programmen genutzt werden können:

Sensoren liefern Werte für die weitere Verarbeitung und sind essenziell für einen Roboter, um mit der Umwelt zu interagieren. LEGO bietet derzeit für den EV3 folgende Sensoren an:

Für den NXT sind noch weitere Sensoren offiziell verfügbar:

Als Besonderheit der LEGO-Motoren ist dabei zu erwähnen, dass die Motoren auch als Sensoren eingesetzt werden können, da sie als Schrittmotoren die Drehung in Grad auslesbar zur Verfügung stellen. Damit lassen sich interessante Anwendungsfälle erzeugen, die später in Kapitel 6.1 noch behandelt werden.

An einem EV3-Brick können bis zu 4 Motoren als Aktoren sowie 4 Sensoren angeschlossen werden. Dabei sind sowohl EV3- als auch NXT-Komponenten anschließbar.

Es gibt noch weitere Sensoren von Fremdanbietern, wobei die meisten auch direkt Programmierblöcke für die LEGO-EV3-Software mitliefern. In anderen Programmiersprachen sind hier manchmal eigene Implementierungen der Schnittstellen zu erstellen.

Bekannte Hersteller sind HumaRobotics, Mindsensors, Dexter Industries, HiTechnic. Dabei ist zu beachten, dass diese Sensoren nicht bei allen Robotik-Wettbewerben zugelassen sind.

Des Weiteren sind auch Multiplexer für Sensor-Ports verfügbar, sodass mehr als 4 Sensoren verwendet werden können.

Folgende Auflistung stellt lediglich einen Auszug der verfügbaren Sensoren von Drittanbietern dar:

Zu guter Letzt sind auch Adapter für LEGO PowerFunctions verfügbar, um diese Komponenten an einem EV3 zu betreiben.

Der EV3-Brick kommuniziert mit seinen Aktoren und Sensoren über das I2C-Protokoll. Somit besteht auch die Möglichkeit, mit etwas Lötarbeit Fremdsensoren anzubinden.

Der EV3-Brick bietet erweiterte Kommunikationsmöglichkeiten, die in unterschiedlichen Szenarien zum Einsatz kommen können. Es können beispielsweise über den USB-Port mehrere EV3-Bricks zusammengeschlossen werden, sodass damit in einem Verbund n × 4 Motoren und n × 4 Sensoren angesprochen werden können. Alternativ dazu können mehrere EV3-Bricks untereinander über Bluetooth kommunizieren. Dieses etwas komplexere Thema wird in Kapitel 5.2 aufgegriffen.

2.2Einführung LEGO Digital Designer

 

Der LEGO Digital Designer ist ein von LEGO frei verfügbares Softwarepaket zum virtuellen Bauen von LEGO-Modellen. Dafür steht eine große Anzahl an LEGO-Bauteilen zur Verfügung, die in einer dreidimensionalen Bauarena zu Modellen verarbeitet werden können. In der Bauarena kann das Modell in allen drei Achsen gedreht und gezoomt werden, sodass die bestmögliche Bauposition gefunden werden kann. Neben klassischen Bauteilen stehen auch die LEGO-Technic- und die LEGO-Mindstorms-Teile zur Verfügung, sodass auch Technikmodelle erstellt werden können. Die Bauelemente können auf bestimmte LEGO-Bausätze reduziert werden, sodass zum Beispiel auch nur die Bauelemente des EV3-Basissets (Home Edition 31313) zur Verfügung stehen.

Der LEGO Digital Designer unterstützt dabei die sogenannte Snap-in-Technik. Unter Snap-in-Technik wird dabei verstanden, dass sich die LEGO-Bausteine bei Annäherung automatisch in dafür sinnvollen Positionen verbinden, was das Bauen stark vereinfacht.

Neben der reinen Bauansicht (»Aufbaumodus«) ist auch eine Ansicht zur Anzeige des Modells vor einem alternativen Hintergrund (»Ansichtsmodus«) sowie die Darstellung einer Bauanleitung möglich.

image

Abb. 2–1 // Beispiel LEGO-Digital-Designer-Entwurfsmodus

Im Ansichtsmodus kann das Modell auch zur Explosion gebracht werden, sodass alle LEGO-Bausteine auseinanderfliegen und anschließend wieder ihren Platz einnehmen.

image

Abb. 2–2 // Ansichtsmodus des LEGO Digital Designers

image

Abb. 2–3 // Bauanleitungsmodus des LEGO Digital Designers

Für die Bearbeitung steht eine umfangreiche Werkzeugbox zur Verfügung, Es sind verschiedene Selektionsmechanismen für Bauteile vorhanden (zum Beispiel Mehrfachselektion aller Bauelemente einer zusammenhängenden Gruppe), farbliche Veränderung der Bauelemente im Nachhinein und vieles mehr, um auch komplexe Modelle zu realisieren und zu visualisieren. In der Werkzeugbox finden sich außerdem Werkzeuge für das Drehen von Objekten, Werkzeuge für den Umgang mit flexiblen Elementen (wie Schläuchen) und weitere, wie in folgender Abbildung zu sehen ist.

image

Abb. 2–4 // Werkzeugauswahl des LEGO Digital Designers

Die Modelle können in verschiedene Formate exportiert werden, die dann unter anderem von Fremdsoftware geladen werden, um zum Beispiel eine Simulation zu initiieren. Weiterhin kann eine Bauanleitung als HTML-Export erzeugt werden, die vergleichbar zu den heutigen Bauanleitungen bei LEGO-Bausätzen eine Schritt-für-Schritt-Anleitung zum Bau eines Modells erzeugt. Diese Funktionen kamen für das Design und die Anleitung der Beispielroboter in diesem Buch zum Einsatz.

2.3Einführung in Microsoft Small Basic und EV3 Basic

 

2011 veröffentlichte Microsoft eine Variante der Programmiersprache Basic mit dem Namen Small Basic. Diese ist frei verfügbar und kostenlos von Microsoft zu erhalten. Small Basic stellt dabei eine sehr vereinfachte Programmierumgebung dar, die sich primär an Programmiereinsteiger richtet. Der Funktionsumfang ist im Vergleich zu anderen Programmiersprachen oder Basic-Interpretern eingeschränkt, bietet aber genug, um mit der textbasierten Programmierung erste einfache Schritte zu machen. Small Basic nutzt als Basis das .NET Framework (4.5) und ist nur unter Windows verfügbar. Neben reinen textbasierten Programmen sind auch Programme mit Grafik und damit auch einfache Spiele umsetzbar. Zusätzlich bietet Small Basic eine Unterstützung für Turtle-Grafik (Steuerung einer Schildkröte mit dem Zweck des Zeichnens eines Bilds), das vor allem bei jüngeren Kindern in kurzer Zeit schöne Ergebnisse liefert. Microsoft bietet eine umfangreiche Dokumentation in deutscher Sprache (inklusive Tutorial), die den Einstieg sehr erleichtert.3

Als Besonderheiten von Small Basic sind dabei die folgenden Aspekte zu nennen (entnommen aus4):

Der letzte oben genannte Punkt ist der Einstieg für EV3 Basic. Reinhard Grafl aus Österreich hat mit dieser Technik eine Erweiterung von Small Basic für die Programmierung des EV3 erstellt. Diese ermöglicht einen vollständigen Zugriff auf den EV3 und damit die Möglichkeit, die Programmierung des EV3 in Basic anzubieten. Dabei wurde der Funktionsumfang von Small Basic um die für den EV3 notwendigen Bereiche erweitert, um zum Beispiel Motoren ansteuern zu können oder Sensoren auszulesen. Im EV3-Basic-Handbuch5 wird auf die Besonderheiten und Erweiterungen von EV3 Basic eingegangen. Die wichtigsten Anpassungen sind hierbei, dass Variablen nach der ersten Nutzung einen unveränderlichen Datentyp erhalten, Texte auf 251 Zeichen beschränkt sind und Felder (Arrays) keine alternativen Indexmöglichkeiten anbieten. Weiterhin liefert EV3 Basic eine Unterstützung für Threads, die dem normalen Small Basic fehlt. Damit wird nebenläufige Programmierung unterstützt (Multithreading), was als sehr komplexes Umfeld in der Programmierung zu sehen ist. Allerdings unterstützt auch die LEGO-EV3-Software diese Möglichkeiten, weshalb dieses Thema in Kapitel 4.7 behandelt wird.

2.4Einführung in leJOS

 

leJOS ist ein Open-Source-Projekt, das eine Java-basierte Programmierung des EV3 erlaubt. leJOS war bereits für die Vorgänger des EV3 (RCX, NXT) verfügbar, aber erst mit dem EV3 selbst ist eine einfache und komplikationslose Installation und Nutzung gegeben.

leJOS nutzt die Möglichkeit des EV3, den Brick von einer SD-Karte zu booten, ohne dass dadurch die Originalfirmware geändert wird. Sobald eine bootfähige SD-Karte im Kartenslot des EV3 vorhanden ist, wird dieses Betriebssystem gebootet. Wird die Karte entfernt, kommt die Originalfirmware wieder zum Einsatz. Im Gegensatz zu NXT und RCX (bei denen die Firmware geändert werden musste), kann der EV3-Brick ohne größere Eingriffe für beide Programmierumgebungen genutzt werden.

leJOS ist ein Java-basiertes Betriebssystem auf Basis eines Linux-Betriebssystems (»Kernels«). Die Entwicklung von TinyVM im Jahr 1999 stellte die Basis dar und wurde durch eine spätere Umstellung (»Portierung«) zu leJOS mit Unterstützung für LEGO Mindstorms RCX, NXT und EV3. Dabei wird immer noch ein direkter Zugriff auf das Betriebssystem per Kommandozeile (Zugriff auf den Linux-Kernel per Secure Shell) angeboten, womit auch Eingriffe auf Linux-Basis möglich sind.

leJOS besteht aus mehreren Komponenten:

image

Abb. 2–5 // leJOS: EV3 Control Center

Es existiert keine deutsche Lokalisierung der leJOS-Oberflächen (Installationsdialoge und auch weitere Programmteile), weshalb alle entsprechenden Abbildungen auf Englisch dargestellt sind.

leJOS benötigt eine Java-Runtime auf dem EV3-Brick. Diese wird von Oracle kostenfrei für ARM-Prozessoren zur Verfügung gestellt und steht als Java-7- und Java-8-Version zur Verfügung. Java 9 (und höher) wird von Oracle nicht mehr für ARM-Prozessoren angeboten. Oracle hat seinen Source Code an OpenJDK übergeben, wobei eine Einbindung einer Java-9-Runtime noch nicht geprüft wurde.

Jedes Java-Programm, das für den EV3 entwickelt wird, muss auf den EV3-Brick übertragen und dort in einer eigenen Java-Runtime gestartet werden.

Darüber hinaus besteht die Möglichkeit, dass auch ein Java-Programm auf dem Computer den EV3-Brick fernsteuert. In dem Fall wird das Programm nicht auf den EV3-Brick übertragen, sondern läuft auf dem Computer ab und erhält über die Verbindung zum EV3-Brick Zugriff auf die Sensoren und Motoren. Dieses Programmiermodell wird in diesem Buch nicht näher erläutert.

leJOS unterstützt, vor allem auch aufgrund des zugrunde liegenden Linux-Kernels, mehr Hardware-Komponenten als die Standard-LEGO-EV3-Software oder Small Basic. Beispielsweise kann sehr einfach eine USB-Webcam angesteuert und die Bildinhalte verarbeitet werden.

Umfangreiche Vernetzungsmöglichkeiten durch Aufbau eines Personal Area Networks über verschiedene Kommunikationstechniken hinweg (USB, Bluetooth, WLAN) erlauben vielfältige Einsatzszenarien, die mit der LEGO-EV3-Software nicht möglich sind. Der Zugriff auf cloudbasierte Dienste im Internet ist mit Java generell kein Problem und lässt sich auch mit leJOS auf den EV3 bringen.

Durch die Bereitstellung einer Java-Bibliothek und der entsprechenden Entwicklungsumgebung ist der Einstieg in Java und damit in die objektorientierte Programmierung mit LEGO Mindstorms möglich geworden.

3Vorbereitung der Umgebungen, Installation der Basissoftware und Grundeinführung

3.1LEGO-EV3-Software

 

3.1.1Installation

Die LEGO-EV3-Software installiert sich wie eine typische Windows-Anwendung über den paketierten Installer. Dabei gibt es nichts Besonderes zu beachten.

3.1.2Einführung in die Bedienung

Die grundlegende Bedienung der EV3 ist sehr intuitiv gestaltet. Nach Start der EV3-Software wird der Eingangsbildschirm angezeigt, von dem aus direkt in die Beispielprojekte von LEGO verzweigt werden kann.

image

Abb. 3–1 // LEGO-EV3-Software: Startbildschirm

Für die eigentliche Programmierung des EV3 wird über das Menü »Datei« – »Neues Projekt« ein neues EV3-Projekt angelegt, was zu folgender Anzeige führt, die die eigentliche Programmieroberfläche darstellt.

image

Abb. 3–2 // LEGO-EV3-Software: Projektansicht

Programme werden durch eine Sequenz von Programmierblöcken dargestellt, die nacheinander ausgeführt werden. Der Start eines Programms ist dabei der Start-Programmblock mit dem grünen Pfeil, über den ein Programm direkt auf den EV3-Brick übertragen und gestartet werden kann.

Die jeweiligen Programmierblöcke sind in unterschiedlichen Paletten in unterschiedlichen Farben gruppiert. Es sind sechs verschiedene Paletten verfügbar, wobei der Umfang der verfügbaren Programmierblöcke auch von installierten Erweiterungen abhängt:

image
image
image
image
image

Zu Beginn sind die Blöcke der grünen und orangen Palette vollkommen ausreichend, um erste Programme zu erstellen. Für komplexere Aufgaben werden die Blöcke der weiteren Paletten benötigt. Dies wird in den folgenden Kapiteln ausgeführt und dargestellt.

Ein einfaches Programm, das einen Roboter mit zwei großen Motoren vorwärtsfahren lässt, sieht beispielsweise folgendermaßen aus. Die Details zu den einzelnen Blöcken werden in den Folgekapiteln je nach Aufgabenstellung vertieft.

image

Abb. 3–3 // LEGO-EV3-Software: Beispiel Motorensteuerung

Bei einer Ausführung des Programms aus der Software direkt wird die Titelleiste des aktuell ausgeführte Programmierblocks schraffiert und durchlaufend animiert dargestellt, womit sich die Programmpfade nachvollziehen lassen.

3.2Installation EV3 Basic (Microsoft Small Basic)

 

3.2.1Installation

Die Installation von Microsoft Small Basic und der EV3 Basic Extension ist denkbar einfach. Für beides existieren MSI-Installationspakete, die mit sehr wenigen Optionen installiert werden können. Dabei ist zu beachten, dass für EV3 Basic nur Small Basic Version 1.2 unterstützt wird. Im Windows Store ist ebenfalls Small Basic verfügbar (Version 1.3), das aber nicht mit EV3 Basic kompatibel ist.

Dabei ist lediglich zu beachten, dass für EV3 Basic mindestens das .NET Framework 4.5 installiert sein muss, um die Installation abzuschließen. Dies ist unter Windows 10 standardmäßig der Fall. Allerdings muss das -NET Framework gegebenenfalls manuell aktiviert werden, damit die Installation der EV3 Basic Extension möglich ist. Die Aktivierung erfolgt über »Einstellungen« – »Apps« – »Programme und Features« – »Windows-Features aktivieren oder deaktivieren«. Dort muss ».NET Framework 3.5« aktiviert werden.

image

Abb. 3–4 // Installation .NET Framework unter Windows 10

3.2.2Einführung in die Bedienung

Nach dem Start von Small Basic öffnet sich die Entwicklungsumgebung mit dem Texteingabeeditor für das Programm. Es können mehrere Programme parallel geöffnet werden.

image

Abb. 3–5 // Microsoft Small Basic: Startbildschirm

Sobald im Programmeditor Text eingegeben wird, öffnet sich die IntelliSense genannte Eingabemöglichkeit, die einer Vorschlagsuche (Type Ahead) entspricht und passende Befehle und Methoden darstellt. Im rechten Bereich wird dabei immer die passende Hilfe eingeblendet, sodass auch ohne Kenntnis aller Befehle schnell die relevanten gefunden werden.

image

Abb. 3–6 // Microsoft Small Basic: Vorschlagsuche im Editor

Das klassische »Hallo Welt«-Programm mit Small Basic sieht folgendermaßen aus und kann durch Betätigen des Ausführen-Pfeils oder der image-Taste ausgeführt werden. Dabei wird automatisch ein ausführbares Windows-Programm (.exe) erzeugt und gestartet. Der gezeigte TextWindow-Befehl ist für Darstellung eines Textein- und -ausgabefensters als klassische Konsole notwendig.

image

Abb. 3–7 // Microsoft Small Basic: »Hello World«-Programm

image

Abb. 3–8 // Ausgabe des »Hello World«-Programms mit Small Basic

Auf der EV3-Basic-Seite sind verschiedene Tutorials verfügbar, die einen einfachen und schnellen Einstieg in Small Basic ermöglichen. In diesem Buch wird der Fokus auf die Ansteuerung des EV3 mithilfe von EV3 Basic gelegt.

Des Weiteren existiert von Microsoft ein sehr gutes Einführungsdokument zu Small Basic in deutscher Sprache, das alle Bereiche von Small Basic mit Beispielprogrammen und Ähnlichem erläutert. Das circa 70-seitige Dokument ist kostenfrei von Microsoft zu beziehen (»Small_Basic_Einfuehrung.pdf«1). Dennoch wird hier eine Kurzübersicht über die verfügbaren Befehlsgruppen/Klassen und Anweisungen/Sprachkonstrukte von Small Basic geliefert. Es wird dabei in Small Basic von »Klassen« gesprochen, weil diese Befehlsgruppen Methoden/Funktionsaufrufe ermöglichen, die damit statischen Methodenaufrufen in der Objektorientierung entsprechen:

Small-Basic-Klassen

Kurzerläuterung

Array

Verwaltung von Feldern und Operationen zur Manipulation von Feldern

Clock

Abfrage der Systemuhr

Controls

Verwaltung von Steuerungselementen auf einer grafischen Benutzeroberfläche (zum Beispiel Knöpfe)

Desktop

Zugriff auf den Windows-Desktop zum Beispiel zum Setzen des Hintergrundbilds

Dictionary

Zugriff auf einen Onlinelexikon zur Übersetzung von Begriffen

File

Operationen zum Schreiben und Lesen von Dateien im lokalen Dateisystem

Flickr

Zugriff auf Flickr-Bilderdienst im Internet

GraphicsWindow

Erzeugung und Zugriff auf ein grafisches Fenster für Grafikausgabe/Zeichnen

ImageList

Laden von Bilddateien in den lokalen Speicher zur weiteren Verarbeitung

Math

Bereitstellung verschiedener mathematischer Berechnungsoperationen (trigonometrische Funktionen, Winkelberechnungen, Betrag, Zufallszahl, Wurzel, Potenz)

Mouse

Zugriff auf die Maus und Abfrage der Knöpfe/Position

Network

Zugriff auf Ressourcen in einem Netzwerk, die per URL erreichbar sind

Program

Hilfsfunktionen zur Kontrolle der Programmausführung

Shapes

Hinzufügen, Bewegen und Rotieren von Formen im GraphicsWindow

Sound

Wiedergabe von Ton und Musik

Stack

Zwischenspeicherung von Werten in einem Stapel

TextWindow

Ein- und Ausgabefenster einer Konsolenanwendung

Text

Hilfsfunktionen zur Manipulation von Texten (Konkatenieren, Groß-/Kleinbuchstaben, Teiltexte)

Timer

Unterstützung von sich zeitlich wiederholenden Aktivitäten

Turtle

Logo-ähnliche Funktionalität, um mit einer Schildkröte im GraphicsWindow Formen mit einem Stift zu zeichnen

Small Basic Anweisungen

Kurzerläuterung

If… Then … Else … End If

Abfrage von Werten und bedingte Umsetzung aufgrund des boolesche Evaluationsergebnisses (Schalter)

For … EndFor

Schleife mit einer Zähloperation (inklusive Schritten) als Abbruchbedingung

While … EndWhile

Schleife mit einer generischen Abbruchbedingung

GoTo

Sprung zu einem Label (<Labelname>:), das an anderer Stelle im Programm definiert wurde

Sub … EndSub

Definition eines Unterprogramms

Die Übersicht der möglichen Anweisungen lässt erahnen, dass der Sprachumfang von Small Basic im Vergleich zu anderen Programmiersprachen eingeschränkt ist. Beispielweise existiert keine switch-Anweisung, um komfortabel auf den Inhalt eines Ausdrucks oder einer Variablen zu reagieren. Dies ist nur durch verschachtelte If…Then…Else…EndIf-Anweisungen in Small Basic umsetzbar.

Variablen sind in Small Basic generell global für das gesamte Programm nutzbar (vergleichbar wie in der LEGO-EV3-Software). Dies bedeutet, dass es keine Einschränkung (»Scoping«) von Variablen im Programm gibt, die nur in Unterprogrammen genutzt werden können. Small Basic unterstützt keine Parameterübergabe oder Rückgabewerte aus Unterprogrammen, dies ist über Variablen zu lösen. Nachdem alle Variablen global sind, können diese für Parameter/Rückgabewertübergabe verwendet werden. Alternativ dazu kann die Klasse Stack verwendet werden, um Inhalte über einen Stapelspeicher zu transportieren. Dies wird in diesem Buch nicht vertieft, da mit der EV3-Basic-Erweiterung ein alternativer Weg zur Übergabe von Parametern an Unterprogramme existiert (Klasse F), der in Kapitel 4.6.2 betrachtet wird.

Durch die Zuweisung eines Werts erhält die Variable implizit diesen Typ, der sich im Laufe des Programms aber theoretisch auch ändern kann (nicht bei EV3-Basic-Programmen).

Die Ansteuerung des EV3 erfolgt über die entsprechenden Befehlsgruppen/Klassen, die mit der EV3-Basic-Erweiterung installiert wurden. Seit März 2018 ist die Version 1.2.5 verfügbar, die weitere Sprachelemente zur Verfügung gestellt hat. Im Einzelnen sind dies die folgenden Klassen:

EV3 Basic Klassen

Kurzerläuterung

Assert

Vorbedingungsprüfung (Gleichheit, größer, kleiner) von Werten und Ausgabe eines Fehlers auf dem LCD

Byte

Manipulation von individuellen Bits einer 8-Bit-Repräsentanz sowie Operationen für AND, OR, NOT, XOR

Buttons

Ansteuerung und Abfrage der Knöpfe auf dem EV3-Brick

EV3

Spezialfunktionen des EV3-Bricks (zum Beispiel Abfrage Batterieladestand, Linux Systemcall) sowie Ansteuerung der Tasten-LEDs

EV3File

Operationen zum Lesen und Schreiben von Dateien auf dem EV3-Brick

F

Framework zum Erzeugen von Funktionen mit lokalen Variablen und Rückgabewerten

LCD

Ansteuerung des LCDs des EV3-Bricks zum Zeichnen und Schreiben

Mailbox

Kommunikation über Bluetooth mit einem anderen EV3-Brick

Motor

Steuerung eines oder mehrere Motoren sowie Auslesen der Rotationszähler von Motoren

Sensor

Ansteuerung der Sensoren zum Auslesen von Sensorwerten beziehungsweise zum Setzen von Modi oder Zurücksetzen inklusive Kommunikation mit I2C-Komponenten

Speaker

Ansteuerung des Lautsprechers zur Ausgabe eines Tons oder Wiedergabe einer Musikdatei

Thread

Unterstützung von Nebenläufigkeit in einem Small-Basic-Programm auf dem EV3-Brick

Vector

Hilfsfunktion zur Matrizen- und Vektorverarbeitung von Zahlenmengen in Listen

Anhand dieser Liste kann man sehen, dass EV3 Basic auch den Sprachumfang von Small Basic für die Nutzung auf dem EV3-Brick deutlich erweitert. Durch die Klasse Thread kommt die Möglichkeit der Nebenläufigkeit für Small-Basic-Programme auf dem EV3-Brick zum Einsatz, und über die Klasse F existiert ein Framework, um Funktionen mit lokalen Variablen, Übergabeparametern und Rückgabeparametern zu definieren und im weiteren Programmverlauf zu nutzen.

Die Ansteuerung der Motoren und Sensoren wird durch Übergabe bestimmter Parameter geregelt, die den jeweiligen Port bestimmen. Dabei können den Motor-Funktionen auch mehrere Ports übergeben werden, um zum Beispiel zwei Motoren gleichzeitig zu starten. Es werden hierfür einfach alle relevanten Port-Buchstaben als gemeinsamer Text zusammengesetzt übergeben:

Beispielcode

Beschreibung

Motor.Start("B",50)

Startet den Motor B mit der Geschwindigkeit 50

Motor.StartSteer("AB",20,50)

Startet die Motoren A und B mit der Geschwindigkeit 20 und der Drehung 50 (Linkskurve)

Den Sensorfunktionen kann immer nur genau ein Port übergeben werden. Dabei wird die Portnummer entsprechend dem Portanschluss am EV3-Brick angesprochen:

Sensor.GetMode(1)

Die Abfrage der Knöpfe (Buttons.getClicks()) liefert einen Text (String) aus Buchstaben mit allen Tastendrücken seit der letzten Abfrage beziehungsweise Buttons.Current den aktuellen Stand. Dabei werden die Knöpfe des EV3-Bricks mit folgenden Buchstaben beschrieben:

Buchstabe

Beschreibung

U

Up – Hinauf/hoch

D

Down – Hinunter/runter

L

Left – links

R

Right – rechts

E

Enter – Mittlere Taste