Читать книгу Programmieren mit LEGO® MIND-STORMS® 51515 und SPIKE® Prime - Alexander Schulze - Страница 19

3.1.5Einführung in die Bedienung der Python-Programmierumgebung

Оглавление

Python ist eine textbasierte Programmiersprache, die der Kategorie der höheren Programmiersprachen zugeordnet wird. In den meisten Fällen werden Python-Programme interpretiert. Dies bedeutet, dass kein Compiler vorab das Programm in Maschinencode übersetzt, sondern erst zur Laufzeit die Übersetzung passiert. Dies hat den Vorteil, dass Skripte direkt ausgeführt werden können, was auch bei LEGO der Fall ist. Nachteilig an diesem Vorgehen ist, dass die korrekte Ausführbarkeit erst während der Laufzeit geprüft wird und somit Fehler im Programmcode nicht von der LEGO-Programmierumgebung beim Erstellen der Programme geprüft und gemeldet werden können (z. B. fehlerhaft genutzte Variablen). Python hat das Ziel, einen gut lesbaren, knappen Programmierstil zu unterstützen, was beispielsweise dazu führt, dass Einrückungen anstelle von geschweiften Klammern für die Strukturierung von Blöcken genutzt werden müssen.

Python ist eine objektorientierte Programmiersprache, unterstützt aber auch andere Programmierparadigmen wie die aspektorientierte und die funktionale Programmierung. Variablen erhalten in Python keinen festen Typ, vielmehr bietet Python eine dynamische Typisierung an.

Python bietet wie Java für die Behandlung von Fehlern die Ausnahmebehandlung (Englisch: exception handling), was kurz in Kapitel 6.6 aufgegriffen wird.

Für die Ansteuerung des Hubs, der Motoren und Sensoren liefert LEGO eine vollständige aus verschiedenen Modulen bestehende Python-Bibliothek mit. Damit lassen sich die verfügbaren Komponenten vollständig ansteuern und verwalten.

Die folgenden Klassen spiegeln dabei die wichtigsten Bereiche wider.

Python-Klassen Kurzerläuterung
App Wiedergabe von Musik auf dem verbundenen Computer/Tablet
Button Abfrage des Status der linken oder rechten Taste des Hubs, Zugriff über die Hub-Klasse (MSHub bzw. PrimeHub)
ColorSensor Zugriff auf den Farbsensor zum Auslesen der Sensorwerte und Warten auf Ereignisse
ForceSensor Zugriff auf den Kraftsensor (nur LEGO Spike Prime) zum Auslesen der Sensorwerte und Warten auf Ereignisse
DistanceSensor Zugriff auf den Ultraschallsensor zum Auslesen der Sensorwerte und Warten auf Ereignisse
LightMatrix Ansteuerung der Lichtmatrix, Zugriff über die Hub-Klasse (MSHub bzw. PrimeHub)
MotionSensor Abfrage des Status des Kreiselsensors (Drehwinkel, Orientierung, Gesten o. ä.), Zugriff über die Hub-Klasse (MSHub bzw. PrimeHub)
Motor Zugriff auf einen einzelnen Motor zum Auslesen des Drehwinkels und zum Starten und Stoppen des Motors
MotorPair Zugriff auf zwei Motoren zur gleichzeitigen Ansteuerung
PrimeHub/MSHub Zugriff auf den Hub und die darin integrierten Komponenten (Lichtmatrix, Kreiselsensor, Tasten, Lautsprecher)
Speaker Zugriff auf den Lautsprecher und Ausgabe von Tönen
StatusLight Ansteuerung des Statuslichts des Hubs in der Zentraltaste, Zugriff über die Hub-Klasse (MSHub bzw. PrimeHub)
Timer Zugriff auf den Zeitgeber zur Abfrage von Systemstartzeiten

Die Ansteuerung der Motoren und Sensoren wird durch Übergabe bestimmter Parameter geregelt, die den jeweiligen Port bestimmen. Dabei können der Klasse MotorPair auch mehrere Ports übergeben werden, um zum Beispiel zwei Motoren gleichzeitig zu starten.

Beispielcode Beschreibung
motor_pair = MotorPair(‘A’, ‘B’) motor_pair.move(10, ‚cm‘) Initialisiert ein Motor-Paar, welches an die Ports A und B angeschlossen ist, startet beide Motoren für eine Fahrt von 10 cm (bezogen auf die Größe der Standard-Räder des Sets)
motor = Motor(‘A’) motor.run_for_degrees(90) Initialisiert den Motor an Port A und lässt diesen um 90 Grad im Uhrzeigersinn drehen

Die Python-Programmierumgebung von LEGO erzeugt beim Anlegen eines neuen Python-Projekts automatisch ein Grundgerüst eines Python-Programms. Damit die Klassen für die Programmierung des Hubs genutzt werden können, müssen diese in das Programm importiert werden. Details zum Thema Import werden noch u. a. in Abschnitt 3.1.7 behandelt. Das Grundgerüst enthält bereits die wichtigsten Imports von Klassen, die für die gewöhnliche Programmierung benötigt werden. Für die Aufgaben in diesem Buch sind nicht alle Imports notwendig, können aber einfach bestehen bleiben. Wenn weitere Module, Klassen oder Funktionen benötigt werden, wird dies bei der jeweiligen Aufgabe behandelt. An dieser Stelle besteht allerdings ein Unterschied zwischen LEGO Mindstorms und LEGO Spike Prime. Die relevanten Python-Klassen sind bei LEGO Mindstorms im Modul mindstorms zu finden, bei LEGO Spike Prime im Modul spike. Außerdem ist die Klasse zum Ansteuern des Hubs in den beiden Modulen unterschiedlich benannt. Bei LEGO Mindstorms heißt die Klasse MSHub bei LEGO Spike Prime PrimeHub.

Bei LEGO Mindstorms sieht das Grundgerüst eines Python-Programms, welches die Programmierumgebung erzeugt, folgendermaßen aus:

from mindstorms import MSHub, Motor, MotorPair, ColorSensor, DistanceSensor, App

from mindstorms.control import wait_for_seconds, wait_until, Timer

from mindstorms.operator import greater_than, greater_than_or_equal_to, less_

than, less_than_or_equal_to, equal_to, not_equal_to

import math

# Create your objects here.

hub = MSHub()

# Write your program here.

hub.speaker.beep()

Bei LEGO Spike Prime sieht das Grundgerüst eines Python-Programms, welches die Programmierumgebung erzeugt, folgendermaßen aus:

from spike import PrimeHub, LightMatrix, Button, StatusLight, ForceSensor,

MotionSensor, Speaker, ColorSensor, App, DistanceSensor, Motor, MotorPair

from spike.control import wait_for_seconds, wait_until, Timer

from math import *

hub = PrimeHub()

hub.light_matrix.show_image('HAPPY')

Programmieren mit LEGO® MIND-STORMS® 51515 und SPIKE® Prime

Подняться наверх