import machine
import time
import random
# --- Konfiguration ---
NUM_LEDS = 7
# Wir nutzen GPIO 0 bis 6 für LEDs
LED_PINS = [0, 1, 2, 3, 4, 5, 6]
# Wir nutzen GPIO 7 bis 13 für Taster
BTN_PINS = [7, 8, 9, 10, 11, 12, 13]
# --- Setup ---
leds = []
buttons = []
# LEDs initialisieren
for pin_num in LED_PINS:
pin = machine.Pin(pin_num, machine.Pin.OUT)
leds.append(pin)
# Taster initialisieren (mit Pull-Up Widerstand)
# Taster gedrückt = LOW (0), Losgelassen = HIGH (1)
for pin_num in BTN_PINS:
pin = machine.Pin(pin_num, machine.Pin.IN, machine.Pin.PULL_UP)
buttons.append(pin)
def update_leds():
"""Aktualisiert alle LEDs basierend auf ihrem Status."""
# (Hier nicht zwingend nötig, da wir direkt schreiben,
# aber gut für Erweiterungen)
pass
def toggle(index):
"""
Schaltet die LED am Index und ihre beiden Nachbarn um.
Logik: (Index - 1), Index, (Index + 1)
"""
indices_to_toggle = [
(index - 1) % NUM_LEDS, # Linker Nachbar (Wrap-around)
index, # Die LED selbst
(index + 1) % NUM_LEDS # Rechter Nachbar (Wrap-around)
]
for i in indices_to_toggle:
leds[i].toggle()
def check_win():
"""Prüft, ob alle LEDs leuchten."""
for led in leds:
if led.value() == 0: # Wenn auch nur eine aus ist
return False
return True
def victory_dance():
"""Ein kleines Blinkmuster bei Gewinn."""
print("GEWONNEN!")
for _ in range(5):
for led in leds: led.value(0)
time.sleep(0.2)
for led in leds: led.value(1)
time.sleep(0.2)
# --- Spielstart ---
print("Spiel gestartet! Druecke Taster, um alle Lichter anzuschalten.")
# Optional: Zufälliges Muster zum Start generieren
# Wir simulieren einfach 5 zufällige Klicks, damit es lösbar bleibt.
for _ in range(5):
toggle(random.randint(0, NUM_LEDS - 1))
# --- Main Loop ---
last_btn_states = [1] * NUM_LEDS # Speichert vorherigen Status (1=offen)
while True:
if check_win():
victory_dance()
# Nach Gewinntanz neues Spiel
for _ in range(5):
toggle(random.randint(0, NUM_LEDS - 1))
for i in range(NUM_LEDS):
current_val = buttons[i].value()
# Prüfung auf fallende Flanke (Button wurde gerade gedrückt)
if current_val == 0 and last_btn_states[i] == 1:
print(f"Taster {i} gedrückt")
toggle(i)
time.sleep(0.05) # Einfaches Entprellen
last_btn_states[i] = current_val
time.sleep(0.01) # CPU Last reduzieren