Beschreibe, was die folgenden Programme bewirken und vergleiche sie. Probiere es ggf. mit deinem Calliope aus.
# Imports go at the top
from calliopemini import *
if button_a.is_pressed():
display.show(Image.HEART)
else:
display.clear()
Programm A.
# Imports go at the top
from calliopemini import *
# Code in a 'while True:' loop repeats forever
while True:
if button_a.is_pressed():
display.show(Image.HEART)
else:
display.clear()
Programm B.
Mit Verzweigungen kann man den Calliope je nach Situation anders reagieren lassen. Dazu wird die Ausführung der Anweisungen an eine oder mehrere Bedingungen gekoppelt. Diese Bedingung muss entweder "wahr" oder "falsch" ergeben, um eindeutig zu entscheiden, ob die Anweisungen ausgeführt werden sollen oder nicht.

Als Bedingung eignen sich sechseckige Blöcke. Manche Sensoreingaben, wie zum Beispiel das Drücken einer Taste, kann man direkt als Bedingung verwenden (erkennbar an der sechseckigen Form). Bei anderen Sensorblöcken, die z. B. eine Zahl bereitstellen, erhält man die Bedingung erst durch den Vergleich mit einer anderen Zahl, sodass aus dem Vergleich ein Wahrheitswert (wahr/falsch) entsteht. Die Zahl, die zum Vergleich herangezogen wird, nennt man auch "Schwellwert".


Wichtig: Die folgenden Blöcke sind keine Verzweigungen, sondern sogenannte Ereignisse.

Ereignisse unterbrechen das eigentlich ablaufende Programm in der Endlosschleife, wenn das angegebene Ereignis eintritt. Diese Unterbrechung sollte immer möglichst kurz sein, weil das Programm sonst bei mehreren Ereignissen zu viel hin- und herspringt und man den Überblick verliert. Insbesondere sind (Endlos-)Schleifen innerhalb eines Ereignisses ein No-Go.

Als Bedingung eignen sich hellblaue Blöcke. Manche Sensoreingaben, wie zum Beispiel das Drücken einer Taste, kann man auch direkt als Bedingung verwenden (erkennbar an der hellblauen Nase). Bei anderen Sensorblöcken erhält man erst durch den Vergleich mit einer Zahl einen Wahrheitswert (wahr oder falsch). Die Zahl, die zum Vergleich herangezogen wird, nennt man auch Schwellwert.


# Imports go at the top
from calliopemini import *
# Code in a 'while True:' loop repeats forever
while True:
if button_a.is_pressed(): # die Funktion "is_pressed()" liefert einen Wahrheitswert (wahr/falsch)
display.scroll('Fall 1') # wird ausgeführt, falls Knopf A gedrückt wurde
Programm A: Einfache Verzweigung
# Imports go at the top
from calliopemini import *
# Code in a 'while True:' loop repeats forever
while True:
if button_a.is_pressed(): # die Funktion "is_pressed()" liefert einen Wahrheitswert (wahr/falsch)
display.scroll('Fall 1') # wird ausgeführt, falls Knopf A gedrückt wurde
else:
display.clear() # wird ausgeführt, falls Kopf A *nicht* gedrückt wurde
Programm B: Verzweigung mit sonst-Fall
# Imports go at the top
from calliopemini import *
# Code in a 'while True:' loop repeats forever
while True:
if button_a.is_pressed(): # die Funktion "is_pressed()" liefert einen Wahrheitswert (wahr/falsch)
display.scroll('Fall 1') # wird ausgeführt, falls Knopf A gedrückt wurde
elif (microphone.sound_level() > 125): # die Funktion "sound_level()" liefert eine Zahl von 0 bis 255
# erst durch den Vergleich dieser Zahl mit 125 wird daraus ein Wahrheitswert (wahr/falsch)
display.scroll('Fall 2') # wird ausgeführt, falls Knopf A NICHT gedrückt wurde, aber Knopf B gedrückt wurde
else:
display.clear() # wird ausgeführt, falls Knopf A NICHT gedrückt wurde und Knopf B NICHT gedrückt wurde
Programm C: Verschachtelte Verzweigung
Die Bedingung muss immer wahr oder falsch ergeben. Manche Sensoreingaben, wie zum Beispiel das Drücken einer Taste, kann man über eine Funktion direkt als Bedingung verwenden (z. B. is_pressed()). Bei anderen Sensoreingaben, die z. B. eine Zahl bereitstellen (z. B. sound_level()), erhält man die Bedingung erst durch den Vergleich mit einer anderen Zahl, sodass aus dem Vergleich ein Wahrheitswert (wahr/falsch) entsteht. Die Zahl, die zum Vergleich herangezogen wird, nennt man auch "Schwellwert".
Fußgängerampel
Eine Fußgängerampel wechselt auf Knopfdruck von rot auf grün und nach einiger Zeit zurück auf rot.
Straßenlaterne
Eine Straßenlaterne geht automatisch an, wenn es dunkel ist, und aus, wenn es hell ist.
Alarmanlage für das Etui
Die Alarmanlage gibt ein lautes Piepsen von sich, wenn das Etui geöffnet oder angehoben wird.
Temperaturampel
Die Temperaturampel zeigt an, ob die Temperatur zu kalt, angenehm oder zu warm ist.
Lärmampel
Die Lärmampel zeigt an, ob die Lautstärke angenehm, noch erträglich oder zu laut ist.
Die folgenden Programme funktionieren nicht richtig, obwohl sie auf den ersten Blick richtig aussehen.
# Imports go at the top
from calliopemini import *
import neopixel
n = 3
np = neopixel.NeoPixel(pin_RGB, n)
# Code in a 'while True:' loop repeats forever
while True:
if button_a.is_pressed():
np.fill((255,0,0)) # füllt alle Pixel mit der Farbe rot
np.show()
np.fill((0,255,0)) # füllt alle Pixel mit der Farbe grün
np.show()
Programm A: Die RGB-LED soll im Normalfall rot anzeigen, aber wenn Taste A gedrückt wird, soll sie grün anzeigen.
# Imports go at the top
from calliopemini import *
import neopixel
n = 3
np = neopixel.NeoPixel(pin_RGB, n)
np.fill((255,0,0)) # füllt alle Pixel mit der Farbe rot
np.show()
# Code in a 'while True:' loop repeats forever
while True:
if button_a.is_pressed():
np.fill((255,0,0)) # füllt alle Pixel mit der Farbe rot
np.show()
while button_a.is_pressed() == False: # solange Knopf A nicht noch mal gedrückt wurde
pass # mache nichts
# Knopf A wurde gedrückt, sonst landet man nicht hier
np.fill((0,255,0)) # füllt alle Pixel mit der Farbe grün
np.show()
Programm B: Die RGB-LED soll zunächst rot anzeigen. Wenn Taste A gedrückt wird, soll sie grün anzeigen. Wenn Taste A noch mal gedrückt wird, soll sie wieder rot anzeigen.
Max hat eine Lautstärkeampel gebaut und beschwert sich: "Meine Ampel wird nie rot! Der Mikrofon-Sensor funktioniert nicht!"
Erkläre, worin das Problem wiklich liegt und wie es sich beheben lässt.
# Imports go at the top
from calliopemini import *
import neopixel
n = 3
np = neopixel.NeoPixel(pin_RGB, n)
# Code in a 'while True:' loop repeats forever
while True:
if microphone.sound_level() < 50:
np.fill((0,255,0)) # füllt alle Pixel mit der Farbe grün
np.show()
elif microphone.sound_level() > 50:
np.fill((255,255,0)) # füllt alle Pixel mit der Farbe gelb
np.show()
elif microphone.sound_level() > 100:
np.fill((255,0,0)) # füllt alle Pixel mit der Farbe rot
np.show()
Das folgende Programm soll ein Nachtlicht im Flur dazu bringen, im Dunkeln zu leuchten, während es tagsüber aus ist.
# Imports go at the top
from calliopemini import *
import neopixel
n = 3
np = neopixel.NeoPixel(pin_RGB, n)
# Code in a 'while True:' loop repeats forever
while True:
if microphone.sound_level() < 77:
np.fill((200,200,0)) # füllt alle Pixel mit der Farbe gelb
np.show()
else:
np.clear()
Leo beobachtet, dass das Nachtlicht in der Dämmerung, wenn es noch nicht richtig dunkel, aber auch nicht mehr hell ist, immer anfängt zu flackern. Es geht also ständig an und wieder aus (siehe Video).