LBotics.at

Im Ultra Sonic Sensor 2 des mBot2 sind 8 blaue LEDs eingebaut, die einzeln ein- und ausgeschaltet werden können. Je vier davon sind um den Sender und den Empfänger des Ultraschallsensors angeordnet und geben ihr Licht durch den durchsichtigen Plastikring nach vorne ab.

Beispiel 1 - Ein- und Ausschalten der 8 LEDs

Im folgenden Beispiel werden die 8 LEDs nacheinander ein- und ausgeschaltet. Nachdem eine LED mit der maximalen Helligkeit eingeschaltet wurde, wird eine Sekunde gewartet, danach ausgeschaltet und die nächste LED eingeschaltet.

import cyberpi, mbuild, time

mbuild.ultrasonic2.set_bri(100,1)
time.sleep(1)
mbuild.ultrasonic2.set_bri(0,1)
mbuild.ultrasonic2.set_bri(100,2)
time.sleep(1)
mbuild.ultrasonic2.set_bri(0,2)
mbuild.ultrasonic2.set_bri(100,3)
time.sleep(1)
mbuild.ultrasonic2.set_bri(0,3)
mbuild.ultrasonic2.set_bri(100,4)
time.sleep(1)
mbuild.ultrasonic2.set_bri(0,4)
mbuild.ultrasonic2.set_bri(100,5)
time.sleep(1)
mbuild.ultrasonic2.set_bri(0,5)
mbuild.ultrasonic2.set_bri(100,6)
time.sleep(1)
mbuild.ultrasonic2.set_bri(0,6)
mbuild.ultrasonic2.set_bri(100,7)
time.sleep(1)
mbuild.ultrasonic2.set_bri(0,7)
mbuild.ultrasonic2.set_bri(100,8)
time.sleep(1)
mbuild.ultrasonic2.set_bri(0,8)
Erklärungen zu diesem Skript

1: import cyberpi, mbuild, time

Import des Moduls cyberpi, mbuild und time

Das Modul mbuild wird benötigt, da darin der vorgefertigte Code für den Ultraschallsensor bereitgestellt wird.

3: mbuild.ultrasonic2.set_bri(100,1)

Mit der Funktion mbuild.ultrasonic2.set_bri(brightness, port) wird die Helligkeit einer der 8 LEDs gesetzt. Diese kann auf Werte zwischen 0 (LED finster) und 100 (maximale Helligkeit) gesetzt werden. An zweiter Stelle übergibt man die Nummer (siehe Darstellung oben) der jweiligen LED, für die der jeweilige Helligkeitswert übergeben wird.

brightness: 0, ..., 100 (positiver, ganzzahliger Wert zwischen 0 und 100, entspricht der Helligkeit einer LED)

port: 1, ..., 8 oder "all" (ganzzahliger Wert zwischen 1 und 8, entspricht der Position der jeweiligen LED, oder der String "all" für alle LEDs geleichzeitig)

Eine while-Schleife mit einer Zählvariable und einer Laufzeitbedingung

Oft ergeben sich in einem Skript Code-Blöcke, die mehrmals hintereinander ausgeführt werden sollen. Anstatt diese mehrfach das Skript zu schreiben, kann man einen Code-Block innerhalb einer Schleife platzieren und angeben, wie oft die Ausführung der Zeilen in diesem Block wiederholt werden soll.

Dazu benötigt man eine Zählvariable und eine Laufzeitbedingung, mit der anhand des aktuellen Werts der Zählvariable überprüft wird, ob die Schleife noch weiterlaufen soll, oder nicht.

Für die meisten Arten von Schleifen wird in einer Programmiersprache festgelegt:

  1. eine Zählvariable mit einem Startwert
  2. eine Laufzeitbedingung
  3. eine Vorschrift, wie sich der Wert der Zählvariable nach einem Schleifendurchlauf ändern soll
int_i = 1

while int_i<=100:
Anweisung 1
Anweisung 2
Anweisung 3
. . .
int_i = int_i + 1

In diesem Codebeispiel sind die einzelnen Teile, die bei einer while-Schleife mit einer Zählvariable und einer Laufzeitbedingung benötigt werden, farblich hervorgehoben.

  • Zunächst wird mit int_i = 1 die Zählvariable festgelegt und ihr der Startwert zugewiesen.
  • Hinter dem Schlüsselwort while steht die Laufzeitbedingung int_i<=100 - die Anweisungen in der Schleife werden also solange wiederholt hintereinander ausgeführt, solange der Wert der Zählvariable int_i kleiner oder gleich 100 ist.
  • Im Anchluss daran folgen eingerückt! alle Code-Zeilen, die innerhalb der Schleife wiederholt ausgeführt werden sollen, während die Schleife läuft.
  • In der letzten Anweisung wird festgelegt, dass der Wert der Zählvariable int_i um 1 erhöht werden soll.
Beispiel 2 - Ein- und Ausschalten der 8 LEDs mit einer while-Schleife

Auch in diesem Beispiel werden die 8 LEDs nacheinander ein- und ausgeschaltet. Hier aber nun nicht mit je einer Code-Zeile zum Ein- und Ausschalten der LED, sondern mit Hilfe einer while-Schleife. Bei dieser wird zunächst die Zählvariable int_i mit dem Startwert 1 fesgelegt. Innerhalb der Schleife wird der aktuelle Wert der Zählvariabe int_i verwendet um die jeweilige LED anzusprechen, bei der man die Helligkeit einstellen oder diese wieder ausschalten möchte.

Die Schleife läuft solange der Wert der Zählvariable int_i kleiner oder gleich 8 ist. Nachdem die Code-Zeilen innerhalb der Schleife einmal ausgeführt wurden, wird der Wert der Zählvariablen um eins erhöht.

Wie man deutlich erkennen kann, wenn man die das Beispiel-Skript oben und das folgende vergleicht, kann man sich mit der Verwendung von Schleifen das Schreiben vieler Code-Zeilen ersparen. Schleifen werden vielfach dafür verwendet um Code-Blöcke, die mehrfach ausgeführt werden sollen, nur einmal im Code zu schreiben.

import cyberpi, mbuild, time

int_i = 1

while int_i<=8:
mbuild.ultrasonic2.set_bri(100,int_i)
time.sleep(1)
mbuild.ultrasonic2.set_bri(0,int_i)
int_i = int_i + 1
Erklärungen zu diesem Skript

1: import cyberpi, mbuild, time

Import des Moduls cyberpi, mbuild und time

Das Modul mbuild wird benötigt, da darin der vorgefertigte Code für den Ultraschallsensor bereitgestellt wird.

3: int_i = 1

In dieser Zeile wird die Variable int_i festgelegt, die in der Folge als Zählvariable der while-Schleife dienen soll. Dieser wird der Startwert 1 zugewiesen

5. while int_i<=8:

Nun wird mit der Laufzeitbedingung int_i<=8 festgelegt, wie lange die while-Schleife laufen soll, bzw. wie lange die Code-Zeilen innerhalb der Schleife wiederholt ausgeführt werden sollen.

6 - 9: mbuild.ultr . . . int_i + 1

Dies sind die Code-Zeilen, die in der Schleife wiederholt ausgeführt werden, solange die Schleife läuft. Diese werden in Python eingerückt geschrieben.

6: mbuild.ultrasonic2.set_bri(100,int_i)

Mit der Funktion mbuild.ultrasonic2.set_bri(brightness, port) wird die Intensität der gewünschten LED gesetzt - hier 100. Für den zweiten Wert (die Position der LED) wird hier nicht 1, 2, ..., 8 übergeben, sondern der aktuelle Wert der Variable int_i. Dieser ist beim ersten Schleifendurchlauf 1, beim 2. Schleifendurchlauf 2, beim 3. Schleifendurchlauf 3, ...

7: time.sleep(1)

An dieser Stelle wird die weitere Ausführung des Skripts für eine Sekunde angehalten.

8: mbuild.ultrasonic2.set_bri(0,int_i)

In dieser Zeile wird die LED, die eine Sekunde zuvor eingeschaltet wurde, wieder ausgeschaltet. Der zweite Wert wird wiederum nicht explizit hingeschrieben, sondern es wird der aktuelle Wert der Variable int_i hergenommen.

9. int_i = int_i + 1

In dieser Zeile befindet sich ein ganz entscheidener Teil der Schleife: Hier wird festgelegt, wie der Wert der Zählvariable int_i nach einem Schleifendurchlauf verändert wird. Mit der Vorschrift int_i = int_i + 1 legt man fest, dass zum aktuellen Wert der Zählvariable die Zahl 1 dazugezählt wird.

Zusammenfassung - Was wurde in diesem Abschnitt gelernt?
mBot2
  • Die Funktion Funktion mbuild.ultrasonic2.set_bri(brightness, port) dient zum Setzen der Helligkeit einer der 8 LEDs des Ultra Sonic Sensors 2. Die Helligkeitswerte können zwischen 0 und 100 liegen, die jeweilige LED wird über die Zahlen 1, 2, ..., 8 angesprochen. Soll ein Helligkeitswert für alle LEDs gleichtzeitig übergeben werden, so ist als zweiter Wert der String "all" zu übergeben.
Python
  • In while-Schleifen, bei denen eine Zählvariable und eine Laufzeitbedingung verwendet werden, kann das wiederholte Ausführen von Code-Blöcken gesteuert werden. Der aktuelle Wert der Zählvariable kann auch innerhalb der Schleife für Berechnungen, if-Abfragen, ... herangezogen werden.
  • Bei einer while-Schleife mit einer Zählvariable wird festgelegt:
    1. eine Zählvariable mit einem Startwert
    2. eine Laufzeitbedingung
    3. eine Vorschrift, wie sich der Wert der Zählvariable nach einem Schleifendurchlauf ändern soll