import time
import neopixel
from adafruit_ssd1306 import I2CDevice, SSD1306_DISPLAY
from rotary import RotaryEncoder
# GPIO-Pins definieren
neo_pin = 1
encoder_clk = 2
encoder_dt = 3
encoder_sw = 4
oled_scl = 17
oled_sda = 16
# Konstanten
neo_pixel_anzahl = 24
encoder_steps_per_rotation = 360
drehrichtung_links = -1
drehrichtung_rechts = 1
tasten_druckzeit = 3 # Sekunden
anzeige_dauer = 0.5 # Sekunden
# Initialisierung
neo = neopixel.NeoPixel(neo_pin, neo_pixel_anzahl, brightness=1.0)
oled = I2CDevice(oled_sda, oled_scl, address=0x3C)
display = SSD1306_DISPLAY(oled, width=128, height=64)
# Variablen
neo_rot = 255
neo_gruen = 255
neo_blau = 255
neo_helligkeit = 100
neo_pixel_nr = 0
rotary_taste = 0
rotary_dt = 0
rotary_clk = 0
rotary_pos = 0
rotary_vorherige_pos = 0
led_speed = 0.1
# Programmzustand
programm_auswahl = 1 # Standardprogramm
anzeige_zustand = 0 # 0: keine Anzeige, 1: Statusanzeige
# Funktionen
def zeige_status():
display.clear()
display.text("Programm: " + str(programm_auswahl), 0, 0, font=1)
display.text("Helligkeit: " + str(neo_helligkeit), 0, 16, font=1)
display.text("Geschwindigkeit: " + str(led_speed * 100) + "%", 0, 32, font=1)
display.display()
def zeige_programm_auswahl():
display.clear()
display.text("1. O-Weis", 0, 0, font=1)
display.text("2. O-Rot", 0, 16, font=1)
display.text("3. Rainbow", 0, 32, font=1)
display.text(". - O", 64, 0, font=1)
display.text("... - O", 64, 16, font=1)
display.text(".8. - O", 64, 32, font=1)
display.text("o-O rotate", 0, 48, font=1)
display.text("....X rotate", 64, 48, font=1)
display.text("Hell (Wert)", 0, 64, font=1)
display.text("Speed (Wert)", 64, 64, font=1)
display.display()
def alle_leds_an(farbe):
neo.fill(farbe)
neo.show()
def led_kreis_weiss():
for i in range(neo_pixel_anzahl):
neo[i] = (255, 255, 255)
neo.show()
time.sleep(led_speed)
neo[i] = (0, 0, 0)
neo.show()
def led_kreise_weiss(anzahl_leds):
for i in range(0, neo_pixel_anzahl, anzahl_leds):
for j in range(anzahl_leds):
neo[(i + j) % neo_pixel_anzahl] = (255, 255, 255)
neo.show()
time.sleep(led_speed)
for j in range(anzahl_leds):
neo[(i + j) % neo_pixel_anzahl] = (0, 0, 0)
neo.show()
def led_kreis_dimmen():
for helligkeit in range(0, 256):