Input & Output

Ein Programm arbeitet in der Regel immer mit verschiedenen Daten. Dabei unterscheidet man zwischen dem sogenannten Input und dem Output.

Als Input werden immer Informationen bezeichnet, die dem Programm bzw. Gerät, in diesem Fall unserem Joy-Car, zugeführt werden. Dies kann beispielsweise die Erkennung eines Hindernisses oder ein simpler Knopfdruck sein. Die Information (Eingabe-Input) wird dem Gerät zugeführt und kann entsprechend vom Programm verarbeitet werden.

Als Output bezeichnet man Informationen, die vom Gerät ausgegeben werden. Die Information (Ausgabe-Output) ist quasi eine Reaktion des Gerätes und kann beispielsweise das Aktivieren eines Scheinwerfers oder das simple Ausgeben einer Temperatur-Information sein.

Temperatursensor

Im folgenden Beispiel warten wir auf die Eingabe (Input) durch den Knopf A. Sobald hier eine Eingabe erkannt wurde, geben wir die Temperatur unseres micro:bit aus (Output).

input.onButtonPressed(Button.A, function () {
    basic.showString("" + (input.temperature()))
})

Der Beispielcode in MicroPython ist da, weil es ihn auch in MakeCode gibt. Das ist super praktisch, denn wenn du schon mit MakeCode klar kommst, kannst du viel leichter mit MicroPython loslegen. Indem wir Beispielcodes in beiden Umgebungen haben, kannst du ohne große Unterbrechung weiterlernen. So verstehst du besser, wie Programmierung funktioniert und kannst sehen, wie man dieselben Sachen in verschiedenen Programmiersprachen macht.

# Notwendige Bibliotheken importieren
from microbit import *

while True:
    # wenn Taste A gedrückt wird
    if button_a.get_presses():
        # Temperatur auf der LED-Matrix anzeigen
        display.scroll(str(temperature()))

Kompass

Als Ausgabe muss natürlich nicht zwingend eine Temperatur verwendet werden. Ausgaben können auch Lichtsignale, Berechnungsinformationen oder sogar, wie im nächsten Beispiel, Kompassdaten sein. Hier erwarten wir erneut den Tastendruck auf Knopf A, um die Kompassausrichtung auszugeben.

Im beim Start-Block wird die Kalibrierung des Kompasses gestartet. Ist der Kompass nicht kalibriert und es wird auf die Kompassausrichtung zugegriffen, wird die Kalibrierung automatisch gestartet. Um den Kompass zu kalibrieren, kippe den micro:bit in alle Richtungen, bis alle LEDs auf dem micro:bit an sind. Wenn der Knopf A gedrückt wird, zeigt der micro:bit dann die Ausrichtung in Grad an. Vorne ist dort, wo das Micro-USB-Kabel angeschlossen wird. Die Himmelsrichtungen in Grad sind wie folgt:

Himmelsrichtung Zahl in Grad (°)
Nord 0 °
Osten 90 °
Süden 180 °
Westen 270 °

Die Ausgabe von Daten, wie in diesem Fall die Kompassinformationen, muss nicht zwangsläufig auf der kleinen LED-Matrix des micro:bits ausgegeben werden. Oftmals ist es für eine schnelle Einsicht in die Daten über die Konsolenausgabe der Programmierumgebung viel bequemer, sich die Datensätze anzeigen zu lassen. Mit dem folgenden Beispiel geben wir unsere Kompassausrichtung auf diesem Wege direkt aus.

Info

Daten die über den seriellen Port ausgegeben werden kannst du dir im seriellen Monitor anschauen. Klicke dazu auf Konsole anzeigen Gerät. Der Button erscheint erst, wenn Daten über die serielle Schnittstelle ausgegeben werden (dazu muss der micro:bit über ein USB-Kabel mit dem Computer verbunden sein).

input.onButtonPressed(Button.A, function () {
    basic.showString("" + (input.compassHeading()))
})
input.calibrateCompass()

Der Beispielcode in MicroPython ist da, weil es ihn auch in MakeCode gibt. Das ist super praktisch, denn wenn du schon mit MakeCode klar kommst, kannst du viel leichter mit MicroPython loslegen. Indem wir Beispielcodes in beiden Umgebungen haben, kannst du ohne große Unterbrechung weiterlernen. So verstehst du besser, wie Programmierung funktioniert und kannst sehen, wie man dieselben Sachen in verschiedenen Programmiersprachen macht.

# Notwendige Bibliotheken importieren
from microbit import *

# Kompass kalibrieren
compass.calibrate()

while True:
    # wenn Taste A gedrückt wird
    if button_a.get_presses():
        # Anzeige der Überschrift des micro:bit auf der LED-Matrix
        display.scroll(str(compass.heading()))

Ausgabe verzögern

Hier wird für jede Ausgabe eine eigene, neue Zeile angefügt. Zusätzlich verlangsamen wir die Ausgabe noch, indem wir eine pausiere (ms) ...-Anweisung hinzufügen.

basic.forever(function () {
    serial.writeLine("" + (input.compassHeading()))
    basic.pause(100)
})

Der Beispielcode in MicroPython ist da, weil es ihn auch in MakeCode gibt. Das ist super praktisch, denn wenn du schon mit MakeCode klar kommst, kannst du viel leichter mit MicroPython loslegen. Indem wir Beispielcodes in beiden Umgebungen haben, kannst du ohne große Unterbrechung weiterlernen. So verstehst du besser, wie Programmierung funktioniert und kannst sehen, wie man dieselben Sachen in verschiedenen Programmiersprachen macht.

# Notwendige Bibliotheken importieren
from microbit import *

# Kompass kalibrieren
compass.calibrate()

while True:
    # Ausgabe der Kompassrichtung auf dem seriellen Monitor
    print(str(compass.heading()))
    # 100 ms warten
    sleep(100)

Durchschnitt berechnen

Die Informationen können, bevor eine Ausgabe erfolgt, auch zunächst erst verarbeitet werden. Im nächsten Beispiel sammeln wir zunächst in einer für-Schleife insgesamt 10-mal die Kompassausrichtung und addieren diesen Wert auf unsere median-Variable. Danach bilden wir den gesamten Durchschnitt, indem wir unsere median-Variable durch 10 teilen. Erst danach, also nachdem wir unsere Verarbeitung abgeschlossen haben, erfolgt unsere Ausgabe.

Ihr fragt euch bestimmt, welchen Vorteil der Durchschnitt von 10 Messwerten gegenüber dem direkt gemessenen Wert hat. Wie ihr bemerkt habt, verändert sich die Ausrichtung eures micro:bit auch wenn er still auf dem Tisch liegt. Diese Abweichungen werden durch den Durchschnitt mehrerer Messwerte vermindert. Dies ist eine Vorgehensweise, um Daten zu "glätten".

let median = 0
basic.forever(function () {
    for (let index = 0; index < 10; index++) {
        median = median + input.compassHeading()
        basic.pause(10)
    }
    serial.writeLine("" + (Math.round(median / 10)))
    median = 0
})

Der Beispielcode in MicroPython ist da, weil es ihn auch in MakeCode gibt. Das ist super praktisch, denn wenn du schon mit MakeCode klar kommst, kannst du viel leichter mit MicroPython loslegen. Indem wir Beispielcodes in beiden Umgebungen haben, kannst du ohne große Unterbrechung weiterlernen. So verstehst du besser, wie Programmierung funktioniert und kannst sehen, wie man dieselben Sachen in verschiedenen Programmiersprachen macht.

# Notwendige Bibliotheken importieren
from microbit import *

# calibrate compass
compass.calibrate()

# Variable auf 0 setzen, um den Median zu berechnen
median = 0

while True:
    # Die 10-malige Himmelsrichtung des Kompasses
    for i in range(0,10):
        # Die Richtung des Kompasses wird zum Median addiert
        median += compass.heading()
        sleep(10)
    # Median auf dem seriellen Monitor ausgeben
    print(int(median/10))

    # Median zurücksetzen
    median=0

Noch genauer

Die Größe und Komplexität der Verarbeitung spielen dabei keine Rolle. Während unsere Durchschnittsberechnung aus dem vorherigen Beispiel noch sehr klein war, erweitern wir im nächsten Beispiel unsere Berechnung, indem wir den Durchschnitt aus insgesamt 50 Messungen berechnen. Dazu erhöhen wir die Durchläufe unserer für-Schleife auf 50 und ergänzen auch unsere Division für die Durchschnittsberechnung.

let median = 0
basic.forever(function () {
    for (let index = 0; index < 50; index++) {
        median = median + input.compassHeading()
        basic.pause(10)
    }
    serial.writeLine("" + (Math.round(median / 50)))
    median = 0
})

Der Beispielcode in MicroPython ist da, weil es ihn auch in MakeCode gibt. Das ist super praktisch, denn wenn du schon mit MakeCode klar kommst, kannst du viel leichter mit MicroPython loslegen. Indem wir Beispielcodes in beiden Umgebungen haben, kannst du ohne große Unterbrechung weiterlernen. So verstehst du besser, wie Programmierung funktioniert und kannst sehen, wie man dieselben Sachen in verschiedenen Programmiersprachen macht.

# Notwendige Bibliotheken importieren
from microbit import *

# calibrate compass
compass.calibrate()

# Variable auf 0 setzen, um den Median zu berechnen
median = 0

while True:
    # Die 50-malige Himmelsrichtung des Kompasses
    for i in range(0,50):
        # Die Richtung des Kompasses wird zum Median addiert
        median += compass.heading()
        sleep(10)
    # Median auf dem seriellen Monitor ausgeben
    print(int(median/50))

    # Median zurücksetzen
    median=0