# Import modules
from machine import I2C, Pin, Timer
from pico_i2c_lcd import I2cLcd
import time
time.sleep(0.5) # Wait for USB to become ready
from timer import Clock
# LCD screen
# i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
# I2C_ADDR = i2c.scan()[0]
# lcd = I2cLcd(i2c, I2C_ADDR, 2, 16)
# LEDs
led_h1 = Pin(2, Pin.OUT, value=0)
led_h2 = Pin(3, Pin.OUT, value=0)
led_h4 = Pin(4, Pin.OUT, value=0)
led_h8 = Pin(5, Pin.OUT, value=0)
led_h16 = Pin(6, Pin.OUT, value=0)
led_m1 = Pin(7, Pin.OUT, value=0)
led_m2 = Pin(8, Pin.OUT, value=0)
led_m4 = Pin(9, Pin.OUT, value=0)
led_m8 = Pin(10, Pin.OUT, value=0)
led_m16 = Pin(11, Pin.OUT, value=0)
led_m32 = Pin(12, Pin.OUT, value=0)
led_s1 = Pin(13, Pin.OUT, value=0)
led_s2 = Pin(14, Pin.OUT, value=0)
led_s4 = Pin(15, Pin.OUT, value=0)
led_s8 = Pin(16, Pin.OUT, value=0)
led_s16 = Pin(17, Pin.OUT, value=0)
led_s32 = Pin(18, Pin.OUT, value=0)
# Buttons
button_intensity = Pin(19, Pin.IN)
button_mode = Pin(20, Pin.IN)
button_plus = Pin(21, Pin.IN)
button_minus = Pin(22, Pin.IN)
# Global variables
button_sleep = 500
mode_state = 0
button_pressed = time.ticks_ms()
# Clock object
clock = Clock()
def run(ev):
global intensity
# LCD screen
h, m, s = clock.hours, clock.minutes, clock.seconds
screen = f'{clock.zfill(h, 2)}:{clock.zfill(m, 2)}:{clock.zfill(s, 2)}'
# lcd.clear()
# lcd.putstr("HH:MM:SS\n")
# lcd.putstr(screen)
print(screen)
# LEDs
h, m, s = clock.b_hours, clock.b_minutes, clock.b_seconds
print(h, m, s)
h16, h8, h4, h2, h1 = list(clock.b_hours)
m32, m16, m8, m4, m2, m1 = list(clock.b_minutes)
s32, s16, s8, s4, s2, s1 = list(clock.b_seconds)
led_h1.value(int(h1))
led_h2.value(int(h2))
led_h4.value(int(h4))
led_h8.value(int(h8))
led_h16.value(int(h16))
led_m1.value(int(m1))
led_m2.value(int(m2))
led_m4.value(int(m4))
led_m8.value(int(m8))
led_m16.value(int(m16))
led_m32.value(int(m32))
led_s1.value(int(s1))
led_s2.value(int(s2))
led_s4.value(int(s4))
led_s8.value(int(s8))
led_s16.value(int(s16))
led_s32.value(int(s32))
clock.increase_seconds()
def edit_clock(increase):
# Edit hours
if mode_state == 1:
clock.increase_hours(hours=increase)
# Edit minutes
elif mode_state == 2:
clock.increase_minutes(minutes=increase)
# Edit seconds
elif mode_state == 3:
clock.increase_seconds(seconds=increase)
def button_handler(pin):
global button_pressed, mode_state
if time.ticks_diff(time.ticks_ms(), button_pressed) > button_sleep:
if pin == button_mode:
mode_state = (mode_state + 1) % 4
elif pin == button_plus:
edit_clock(increase=1)
elif pin == button_minus:
edit_clock(increase=-1)
button_pressed = time.ticks_ms()
# Timer
tim = Timer(period=1000, mode=Timer.PERIODIC, callback=run)
# Button handlers
button_mode.irq(trigger=machine.Pin.IRQ_RISING, handler=button_handler)
button_plus.irq(trigger=machine.Pin.IRQ_RISING, handler=button_handler)
button_minus.irq(trigger=machine.Pin.IRQ_RISING, handler=button_handler)