Lernpfad:Einführung in den micro:bit/9: Unterschied zwischen den Versionen

Aus Informatik-Box
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 59: Zeile 59:


Im Beispiel oben prüft die Funktion <code>check_coords</code>, ob die Parameter <code>x</code> und <code>y</code> korrekte Indizes für LEDs des {{micro:bit}} Displays sind (also zwischen <code>0</code> und <code>4</code> liegen). Ist ein Wert nicht in diesem Bereich, werden die Werte auf <code>0</code> oder <code>4</code> gesetzt. Es wird dann eine Liste mit angepassten <code>x</code> und <code>y</code> Werten ''zurückgegeben'', die auf jeden Fall korrekte Indizes darstellen.  
Im Beispiel oben prüft die Funktion <code>check_coords</code>, ob die Parameter <code>x</code> und <code>y</code> korrekte Indizes für LEDs des {{micro:bit}} Displays sind (also zwischen <code>0</code> und <code>4</code> liegen). Ist ein Wert nicht in diesem Bereich, werden die Werte auf <code>0</code> oder <code>4</code> gesetzt. Es wird dann eine Liste mit angepassten <code>x</code> und <code>y</code> Werten ''zurückgegeben'', die auf jeden Fall korrekte Indizes darstellen.  
Die Variablen <code>x1</code> und <code>y1</code> werden in Zeile 28 dann auf die beiden Werte der Liste gesetzt, die von <code>check_coords</code> ''zurückgegeben'' wurde.
{{Info:End}}
{{Info:End}}



Version vom 12. Dezember 2023, 12:13 Uhr

MuEditor.png
Arbeitsauftrag

Übertrage das Programm unten in den Thonny und überspiele es auf den micro:bit.

Teste das Programm und erkläre seine Funktion. Notiere dir dazu Stichpunkte im Heft und ergänze neue Befehle in deiner Befehlsübersicht.

Tipp: Kippe den micro:bit doch mal leicht in eine Richtung.

from microbit import *

## Hilfsfunktion
def check_coords(x, y):
  if x > 4:
    x = 4
  elif x < 0:
    x = 0
  if y > 4:
    y = 4
  elif y < 0:
    y = 0
  return (x, y)

## Initialisierung
sens = 350  # Mess-Sensitivität des Akzelerometer
x = 0
y = 0
display.clear()
display.set_pixel(x, y, 6)

## Endlosschleife
while True:
  x1 = x + int(accelerometer.get_x()/sens)
  y1 = y + int(accelerometer.get_y()/sens)

  x1, y1 = check_coords(x1, y1)

  if x1 != x or y1 != y:
    display.set_pixel(x, y, 0)
    display.set_pixel(x1, y1, 6)
    x, y = x1, y1

  sleep(200)
Icon Info.png

Das Schlüsselwort return

In Zeile 13 siehst Du das neue Schlüsselwort return im Python-Code. Es kann am Ende einer Funktion vorkommen und bedeutet, dass die Funktion sofort beendet ist und der Wert, der hinter return steht als Ergebnis der Funktion "zurückgegeben" werden soll.

Der zurückgegebene Wert wird beim Benutzen der Funktion (dem Aufruf) für die Funktion eingesetzt. Im folgenden Beispiel wird also das Ergebnis 5 ausgegeben, da die Funktion verdoppeln beim Aufruf verdoppeln(2) durch die Rückgabe 4 ersetzt wird und dann + 1 gerechnet wird.

def verdoppeln( zahl ):
  return zahl * 2
 
ergebnis = verdoppeln(2) + 1
print(ergebnis)

Im Beispiel oben prüft die Funktion check_coords, ob die Parameter x und y korrekte Indizes für LEDs des micro:bit Displays sind (also zwischen 0 und 4 liegen). Ist ein Wert nicht in diesem Bereich, werden die Werte auf 0 oder 4 gesetzt. Es wird dann eine Liste mit angepassten x und y Werten zurückgegeben, die auf jeden Fall korrekte Indizes darstellen.

Die Variablen x1 und y1 werden in Zeile 28 dann auf die beiden Werte der Liste gesetzt, die von check_coords zurückgegeben wurde.


MuEditor.png
Arbeitsauftrag

Erweitere das Programm nun zu einem kleinen Spiel. Das Ziel soll es sein, alle LEDs des Displays einzuschalten. Nimm dazu folgende Änderungen vor:

  1. Anstatt die alte LED auszuschalten, setze ihren Wert auf 3.
  2. Implementiere eine Methode check_display() die prüft, ob alle LEDs an sind und in diesem Fall True liefert, ansonten False.
  3. Nutze check_display(), um vor jedem sleep() das Display zu prüfen.
  4. Falls das Display komplett an ist, schalte alle LEDs auf 6 und breche die Endlosschleife ab.
Tipp

Du kannst eine LED des Displays mit den Funktionen display.get_pixel(x, y) abrufen und mit display.set_pixel(x, y, value) einschalten. x und y sind der Spalten- und Zeilenindex der LED zwischen 0 und 4. value ist ein Helligkeitswert zwischen 0 und 6.

Du kannst alle LEDs prüfen oder schalten, indem Du zwei Zählschleifen benutzt:

# Schaltet alle LEDs auf die Helligkeit 3
for y in range(5):
    for x in range(5):
        display.set_pixel(x, y, 3)
Lösung
from microbit import *

## Hilfsfunktion
def check_coords(x, y):
  if x > 4:
    x = 4
  elif x < 0:
    x = 0
  if y > 4:
    y = 4
  elif y < 0:
    y = 0
  return (x, y)

## Hilfsfunktion, um das Display zu prüfen
def check_display():
    for y in range(5):
        for x in range(5):
            if display.get_pixel(x, y) == 0:
                return False
    return True


## Hilfsfunktion, um das Display einzuschalten
def on(value=6):
    for y in range(5):
        for x in range(5):
            display.set_pixel(x, y, value)

## Initialisierung
sens = 350  # Mess-Sensitivität des Akzelerometer
x = 0
y = 0
display.clear()
display.set_pixel(x, y, 6)

## Endlosschleife
while True:
  x1 = x + int(accelerometer.get_x()/sens)
  y1 = y + int(accelerometer.get_y()/sens)

  x1, y1 = check_coords(x1, y1)

  if x1 != x or y1 != y:
    display.set_pixel(x, y, 3)
    display.set_pixel(x1, y1, 6)
    x, y = x1, y1
    if check_display():
        on()
        break

  sleep(200)