from machine import Pin, ADC
import utime
from neopixel import NeoPixel

# Setup WS2812 LED Ringe und Strip
NUM_LEDS_EYES = 16
NUM_LEDS_BELLY = 32
led_pin_eyes = Pin(0, Pin.OUT)
led_pin_belly = Pin(1, Pin.OUT)
eyes_left = NeoPixel(led_pin_eyes, NUM_LEDS_EYES)
eyes_right = NeoPixel(led_pin_eyes, NUM_LEDS_EYES)
belly = NeoPixel(led_pin_belly, NUM_LEDS_BELLY)

# Setup Potentiometer für Helligkeitssteuerung
potentiometer = ADC(Pin(26))

# Setup Keypad (4x4 Matrix)
keypad_pins = [
    [Pin(2, Pin.OUT), Pin(3, Pin.OUT), Pin(4, Pin.OUT), Pin(5, Pin.OUT)],
    [Pin(6, Pin.IN, Pin.PULL_DOWN), Pin(7, Pin.IN, Pin.PULL_DOWN), Pin(8, Pin.IN, Pin.PULL_DOWN), Pin(9, Pin.IN, Pin.PULL_DOWN)]
]
keypad_keys = [['1', '2', '3', 'A'],
               ['4', '5', '6', 'B'],
               ['7', '8', '9', 'C'],
               ['*', '0', '#', 'D']]

# Funktion zur Helligkeitsteuerung
def get_brightness():
    return potentiometer.read_u16() // 256  # 0 bis 255

# LED-Farben setzen
def set_color(led_strip, r, g, b):
    for i in range(len(led_strip)):
        led_strip[i] = (r, g, b)
    led_strip.write()

# Leuchtmodi
def mode_off():
    set_color(eyes_left, 0, 0, 0)
    set_color(eyes_right, 0, 0, 0)
    set_color(belly, 0, 0, 0)

def mode_breathing():
    for brightness in range(0, 255, 5):
        set_color(eyes_left, brightness, 0, 0)
        set_color(eyes_right, brightness, 0, 0)
        set_color(belly, brightness, brightness, 0)
        utime.sleep(0.05)
    for brightness in range(255, 0, -5):
        set_color(eyes_left, brightness, 0, 0)
        set_color(eyes_right, brightness, 0, 0)
        set_color(belly, brightness, brightness, 0)
        utime.sleep(0.05)

def mode_rainbow():
    for i in range(255):
        for j in range(NUM_LEDS_EYES):
            eyes_left[j] = wheel((i + j) & 255)
            eyes_right[j] = wheel((i + j) & 255)
        for k in range(NUM_LEDS_BELLY):
            belly[k] = wheel((i + k) & 255)
        eyes_left.write()
        eyes_right.write()
        belly.write()
        utime.sleep(0.05)

def mode_spooky():
    for _ in range(10):
        set_color(eyes_left, 255, 0, 0)  # Rote Augen
        set_color(eyes_right, 255, 0, 0)
        set_color(belly, 0, 0, 0)
        utime.sleep(0.1)
        set_color(eyes_left, 0, 0, 0)  # Augen aus
        set_color(eyes_right, 0, 0, 0)
        utime.sleep(0.1)

# Farben für den Regenbogenmodus generieren
def wheel(pos):
    if pos < 85:
        return (pos * 3, 255 - pos * 3, 0)
    elif pos < 170:
        pos -= 85
        return (255 - pos * 3, 0, pos * 3)
    else:
        pos -= 170
        return (0, pos * 3, 255 - pos * 3)

# Tasteneingaben verarbeiten
def read_keypad():
    for row_num, row in enumerate(keypad_pins[0]):
        row.value(1)
        for col_num, col in enumerate(keypad_pins[1]):
            if col.value() == 1:
                row.value(0)
                return keypad_keys[row_num][col_num]
        row.value(0)
    return None

# Hauptprogramm
def main():
    current_mode = 'A'  # Start im ausgeschalteten Modus
    
    while True:
        key = read_keypad()
        brightness = get_brightness()

        if key:
            current_mode = key

        if current_mode == 'A':
            mode_off()
        elif current_mode == '1':
            mode_breathing()  # Entspannendes Ein- und Ausatmen
        elif current_mode == '2':
            mode_rainbow()  # Farbdurchlauf (Regenbogen)
        elif current_mode == '3':
            mode_spooky()  # Gruselmodus mit roten Augen
        elif current_mode == 'B':
            # Weitere Modi kannst du hier hinzufügen
            pass

        utime.sleep(0.1)

main()
BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT