from machine import Pin
from utime import sleep_ms
import random
import _thread
# Pin.N als Ausgangspin setzen, damit Strom darauf gegeben werden kann.
# Pin.N bekommt den Namen "led.N"
led1 = Pin(15, Pin.OUT)
led2 = Pin(19, Pin.OUT)
led3 = Pin(21, Pin.OUT)
led4 = Pin(16, Pin.OUT)
led5 = Pin(17, Pin.OUT)
led6 = Pin(5, Pin.OUT)
led7 = Pin(18, Pin.OUT)
buttonled_red = Pin(33, Pin.OUT)
buttonled_green = Pin(27, Pin.OUT)
buttonled_blue = Pin(4, Pin.OUT)
button = Pin(26, Pin.IN, Pin.PULL_DOWN)
# Pin 12 als Eingangspin setzen, damit dort Strom gemessen werden kann.
# Den Programmierbaren, internen Widerstand auf Gnd setzen, damit der Standardwert
# bei losgelassenem Knopf immer 0 ist.
# Dieser konfigurierte Pin bekommt den Namen "button"
# Funktion zum Testen aller LEDs beim Start
def ledtest():
sleep_ms(100)
led1.on() # LED1 anschalten
led2.on() # LED2 anschalten
led3.on() # LED3 anschalten
led4.on() # LED4 anschalten
led5.on() # LED5 anschalten
led6.on() # LED6 anschalten
led7.on() # LED7 anschalten
buttonled_red.on() # buttonled_red anschalten
buttonled_green.on() # buttonled_green anschalten
buttonled_blue.on() # buttonled_blue anschalten
sleep_ms(1000) # Eine Sekunde warten
led1.off() # LED1 ausschalten
led2.off() # LED2 ausschalten
led3.off() # LED3 ausschalten
led4.off() # LED4 ausschalten
led5.off() # LED5 ausschalten
led6.off() # LED6 ausschalten
led7.off() # LED7 ausschalten
buttonled_red.off() # buttonled_red anschalten
buttonled_green.off() # buttonled_green anschalten
buttonled_blue.off() # buttonled_blue anschalten
# Funktion zum Anzeigen der Würfel-Animation
def rollen():
print("Rolle den Würfel")
# In welcher Reihenfolge solleen die LEDs blinken
leds = [led1, led2, led3, led6, led5, led4]
# Wieviele LEDs gibt es überhaupt (Hier: led_nummer = 6)
led_nummer = len(leds)
# In welchen Zeitintervallen sollen die LEDs blinken
sleeps = [100, 150, 200]
# Wieviele Zeitintervalle gibt es überhaupt (Hier: 3)
sleep_nummer = len(sleeps)
# Index für LEDs und Zeiten setzen
led_index = 0
sleep_index = 0
# Abarbeiten der Roll-Animation
while True:
# Aktuelle LED und Zeitintervall je Durchgang ermitteln
current_led = leds[led_index]
current_sleep = sleeps[sleep_index]
# current_led für die Zeit von current_sleep einschalten
current_led.on()
sleep_ms(current_sleep)
# current_led für die Zeit von current_sleep ausschalten
current_led.off()
sleep_ms(current_sleep)
# led_index um eins erhöhen um die nächste LED zu schalten
led_index = led_index + 1
# Wenn alle LEDs ein mal im Zeitintervall geblinkt haben, dann den
# sleep_index um eins erhöhen um den nachsten Zeitintervall auszuwählen und
# led_index wieder auf 0 setzen damit alle LEDs im neuen Zeitintervall blinken
if led_nummer == led_index:
sleep_index = sleep_index +1
led_index = 0
# Wenn alle Zeitintervalle abgearbeitet sind, die Schleife verlassen
if sleep_nummer == sleep_index:
break
# Funktion zum Ausschalten aller Würfel-LEDs
def alleaus():
print("Alle Würfel-LEDs ausschalten")
led1.off()
led2.off()
led3.off()
led4.off()
led5.off()
led6.off()
led7.off()
# Funktion zum Anzeigen der Eins
def eins():
# Die Eins blinkt 3 mal
for i in range(3):
led7.on()
sleep_ms(200)
led7.off()
sleep_ms(200)
# Die Eins dauerhaft anzeigen bis der Button wieder gedrückt wird
led7.on()
# Funktion zum Anzeigen der Zwei
def zwei():
# Die Zwei blinkt 3 mal
for i in range(3):
led3.on()
led4.on()
sleep_ms(200)
led3.off()
led4.off()
sleep_ms(200)
# Die Zwei dauerhaft anzeigen bis der Button wieder gedrückt wird
led3.on()
led4.on()
# Funktion zum Anzeigen der Drei
def drei():
# Die Drei blinkt 3 mal
for i in range(3):
led3.on()
led4.on()
led7.on()
sleep_ms(200)
led3.off()
led4.off()
led7.off()
sleep_ms(200)
# Die Zahl Drei dauerhaft anzeigen bis der Button wieder gedrückt wird
led3.on()
led4.on()
led7.on()
# Funktion zum Anzeigen der Vier
def vier():
# Die Vier blinkt 3 mal
for i in range(3):
led1.on()
led3.on()
led4.on()
led6.on()
sleep_ms(200)
led1.off()
led3.off()
led4.off()
led6.off()
sleep_ms(200)
# Die Vier dauerhaft anzeigen bis der Button wieder gedrückt wird
led1.on()
led3.on()
led4.on()
led6.on()
# Funktion zum Anzeigen der Fünf
def fuenf():
# Die Fünf blinkt 3 mal
for i in range(3):
led1.on()
led3.on()
led4.on()
led6.on()
led7.on()
sleep_ms(200)
led1.off()
led3.off()
led4.off()
led6.off()
led7.off()
sleep_ms(200)
# Die Fünf dauerhaft anzeigen bis der Button wieder gedrückt wird
led1.on()
led3.on()
led4.on()
led6.on()
led7.on()
# Funktion zum Anzeigen der Sechs
def sechs():
# Die Sechs blinkt 3 mal
for i in range(3):
led1.on()
led2.on()
led3.on()
led4.on()
led5.on()
led6.on()
sleep_ms(200)
led1.off()
led2.off()
led3.off()
led4.off()
led5.off()
led6.off()
sleep_ms(200)
# Die Sechs dauerhaft anzeigen bis der Button wieder gedrückt wird
led1.on()
led2.on()
led3.on()
led4.on()
led5.on()
led6.on()
# Funktion zum Ermitteln einer zufälligen Zahl zwischen 1 und 6
def wuerfel():
# Eine Zufallszahl im Bereich von 1 bis 6 ermitteln
#zahl = random.randint(1, 6)
if SCHUMMEL == 0:
# Eine Zufallszahl im Bereich von 1 bis 6 ermitteln
zahl = random.randint(1, 6)
elif SCHUMMEL == 1:
# SCHUMMEL-MODUS: es wird eine 1 gewürfelt
zahl = 1
elif SCHUMMEL == 2:
# SCHUMMEL-MODUS: es wird eine 2 gewürfelt
zahl = 2
elif SCHUMMEL == 3:
# SCHUMMEL-MODUS: es wird eine 3 gewürfelt
zahl = 3
elif SCHUMMEL == 4:
# SCHUMMEL-MODUS: es wird eine 4 gewürfelt
zahl = 4
elif SCHUMMEL == 5:
# SCHUMMEL-MODUS: es wird eine 5 gewürfelt
zahl = 5
elif SCHUMMEL == 6:
# SCHUMMEL-MODUS: es wird eine 6 gewürfelt
zahl = 6
# Auswerten des Würfelns
if zahl == 1:
zahlentext = "Eins"
eins()
elif zahl == 2:
zahlentext = "Zwei"
zwei()
elif zahl == 3:
zahlentext = "Drei"
drei()
elif zahl == 4:
zahlentext = "Vier"
vier()
elif zahl == 5:
zahlentext = "Fünf"
fuenf()
elif zahl == 6:
zahlentext = "Sechs"
sechs()
print("Eine {} wurde gewürfelt".format(zahlentext))
return zahl
# Funktion der Logik im Hauptprogramm
def logik():
# Umschalten der Button-LEDs beim Würfeln auf ROT
buttonled_green.off()
buttonled_red.on()
# Alle Würfel-LEDs ausschalten
alleaus()
# Würfel-Animation starten Zahl ermitteln und LEDs anzeigen
rollen()
zahl = wuerfel()
# Umschalten der Button-LEDs nach dem Würfeln wieder auf GRÜN
buttonled_red.off()
buttonled_green.on()
return zahl
# Lässt die grüne Button-LED blinken, wenn eine 6 gewürfelt wurde
def blinksechs():
while True:
# Wenn eine Sechs gewürfelt wurde und der Button nicht neu gedrückt wurde,
# dann soll die Button-LED blinken bis der Button neu geedrückt wird.
if ZAHL == 6 and buttonstatus == 0:
buttonled_green.on()
sleep_ms(200)
buttonled_green.off()
sleep_ms(200)
sleep_ms(10) # Eine hundertstel Sekunde warten, damit der Prozessor nicht überlastet
# Hauptprogramm starten
ledtest()
buttonled_green.on()
global ZAHL
ZAHL = 0
global SCHUMMEL
SCHUMMEL = 0
# Einen Thread starten um die grüne Button-LED blinken zu lassen, wenn eine 6 gewürfelt wurde
_thread.start_new_thread(blinksechs, ()) # den Nebenprozess starten
while True:
# Button-Status abfragen
buttonstatus = button.value()
# Der Button wurde gedrückt
if buttonstatus == 1:
print(" ")
print("----------------------------------")
print("---> Der Knopf wurde gedrückt <---")
print("----------------------------------")
ZAHL = logik()
#print("Die Zahl war: {}".format(ZAHL))
print("Runde beendet...")
buttonstatus = 0
# Der Button wurde NICHT gedrückt
elif buttonstatus == 0:
sleep_ms(10)