import machine
import neopixel
import time
import ssd1306
# --- BEÁLLÍTÁSOK ---
NUM_LEDS_MAIN = 25
DATA_PIN_MAIN = 28
NUM_LEDS_ZERO = 4
DATA_PIN_ZERO = 27 # A 4 db Nulla-LED GPIO pine
# NeoPixel szalagok inicializálása
np_main = neopixel.NeoPixel(machine.Pin(DATA_PIN_MAIN), NUM_LEDS_MAIN)
np_zero = neopixel.NeoPixel(machine.Pin(DATA_PIN_ZERO), NUM_LEDS_ZERO)
# I2C és OLED kijelző inicializálása (128x64)
i2c = machine.I2C(0, sda=machine.Pin(16), scl=machine.Pin(17), freq=400000)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
# Fő LED csoportok indexei (0-tól 24-ig)
H1_LEDS = [0, 1] # H1: max 2 LED
H2_LEDS = [2, 3, 4, 5, 6, 7, 8, 9, 10] # H2: max 9 LED
P1_LEDS = [11, 12, 13, 14, 15] # P1: max 5 LED
P2_LEDS = [16, 17, 18, 19, 20, 21, 22, 23, 24] # P2: max 9 LED
# Színek beállítása (R, G, B)
COLOR_HOUR = (0, 150, 255) # Narancssárga az óráknak
COLOR_MINUTE = (0, 150, 255) # Kék a perceknek
COLOR_ZERO = (255, 255, 255) # Fehér a Nulla (0) jelző LED-eknek
COLOR_OFF = (0, 0, 0)
def display_digit(led_group, value, color):
"""Annyi LED-et gyújt fel a dominó mezőben, amennyi az érték (value)"""
for i, led_index in enumerate(led_group):
if i < value:
np_main[led_index] = color
else:
np_main[led_index] = COLOR_OFF
def update_zero_leds(h1, h2, p1, p2):
"""
Frissíti a GPIO27-en lévő 4 db Nulla-LED-et.
Index 0: H1 nulla jelzője
Index 1: H2 nulla jelzője
Index 2: P1 nulla jelzője
Index 3: P2 nulla jelzője
"""
np_zero[0] = COLOR_ZERO if h1 == 0 else COLOR_OFF
np_zero[1] = COLOR_ZERO if h2 == 0 else COLOR_OFF
np_zero[2] = COLOR_ZERO if p1 == 0 else COLOR_OFF
np_zero[3] = COLOR_ZERO if p2 == 0 else COLOR_OFF
np_zero.write()
def update_display_and_leds(hours, minutes):
"""Frissíti a fő LED-eket, a Nulla-LED-eket és az OLED kijelzőt"""
h1 = hours // 10
h2 = hours % 10
p1 = minutes // 10
p2 = minutes % 10
# 1. Fő dominó LED-ek frissítése (GPIO28)
display_digit(H1_LEDS, h1, COLOR_HOUR)
display_digit(H2_LEDS, h2, COLOR_HOUR)
display_digit(P1_LEDS, p1, COLOR_MINUTE)
display_digit(P2_LEDS, p2, COLOR_MINUTE)
np_main.write()
# 2. Nulla-LED-ek frissítése (GPIO27)
update_zero_leds(h1, h2, p1, p2)
# 3. OLED kijelző frissítése
oled.fill(0)
oled.text("DOMINO CLOCK", 16, 4)
oled.hline(0, 16, 128, 1)
time_str = "{:02d}:{:02d}".format(hours, minutes)
oled.text("IDO: " + time_str, 20, 28)
domino_str = "Domino: {}{}:{}{}".format(h1, h2, p1, p2)
oled.text(domino_str, 8, 48)
oled.show()
# --- TESZT CIKLUS ---
# Beállítva pl. 00:00-ra vagy 01:00-ra a teszteléshez
test_hours = 0
test_minutes = 0
while True:
update_display_and_leds(test_hours, test_minutes)
time.sleep(5) # 1 másodpercenként lépteti a percet a teszthez
test_minutes += 1
if test_minutes >= 60:
test_minutes = 0
test_hours = (test_hours + 1) % 24Loading
ssd1306
ssd1306
LED szallag a dominó körül