import time
import board
import busio
import adafruit_ds1307
import neopixel
from digitalio import DigitalInOut, Direction, Pull
btn1 = DigitalInOut(board.GP11)
btn1.direction = Direction.INPUT
btn1.pull = Pull.UP
btn2 = DigitalInOut(board.GP12)
btn2.direction = Direction.INPUT
btn2.pull = Pull.UP
rgb = neopixel.NeoPixel(board.GP2, 60, brightness=1.0, auto_write=False)
i2c = busio.I2C(board.GP1, board.GP0) #RP2040
rtc = adafruit_ds1307.DS1307(i2c)
days = ("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")
# year, mon, date, hour, min, sec, wday, yday, isdst
rtc.datetime = time.struct_time((2024, 4, 11, 18, 29, 0, 4, -1, -1))
# Main loop:
while True:
t = rtc.datetime
print("{} {}/{}/{} {}:{:02}:{:02}".format(days[int(t.tm_wday)], t.tm_mday, t.tm_mon, t.tm_year, t.tm_hour, t.tm_min, t.tm_sec))
# print("btn1.value = {}, btn1State = {}".format(btn1.value, btn1State))
if btn1.value == False:
minute = t.tm_min
hour1 = t.tm_hour
minute = minute + 1
c = minute // 12 + 1
if minute >= 60:
hour1 = hour1 + 1
minute = 0
if hour1 >= 24:
hour1 = 0
rgb[(minute + 30) % 60] = [0, 255, 0]
# rgb[(t.tm_hour * 5 + 30) % 60 + (t.tm_min // 12)] = [255, 0, 0]
for i in range(0, c): # 先填滿hour燈數,顏色
rgb[((t.tm_hour * 5 + 30) % 60 + (t.tm_min // 12)) - i] = [255, 0, 0]
rgb[(t.tm_sec + 30) % 60] = [0, 0, 255]
rgb.write()
time.sleep(0.3)
rgb.fill(0)
rgb.write()
rtc.datetime = time.struct_time((t.tm_year, t.tm_mon, t.tm_mday, hour1, minute, 0, t.tm_wday, t.tm_yday, t.tm_isdst))
continue
if btn2.value == False:
minute1 = t.tm_min
hour1 = t.tm_hour
minute1 = minute1 - 1
c = minute1 // 12 + 1
if minute1 < 0:
hour1 = hour1 - 1
minute1 = 60
if hour1 <= 0:
hour1 = 24
rgb[(minute1 + 30) % 60] = [0, 255, 0]
# rgb[(t.tm_hour * 5 + 30) % 60 + (t.tm_min // 12)] = [255, 0, 0]
for i in range(0, c): # 先填滿hour燈數,顏色
rgb[((t.tm_hour * 5 + 30) % 60 + (t.tm_min // 12)) - i] = [255, 0, 0]
rgb[(t.tm_sec + 30) % 60] = [0, 0, 255]
rgb.write()
time.sleep(0.3)
rgb.fill(0)
rgb.write()
rtc.datetime = time.struct_time((t.tm_year, t.tm_mon, t.tm_mday, hour1, minute1, 0, t.tm_wday, t.tm_yday, t.tm_isdst))
continue
h = (t.tm_hour * 5 + 30) % 60 + (t.tm_min // 12)
m = (t.tm_min + 30) % 60
s = (t.tm_sec + 30) % 60
c = t.tm_min // 12 + 1
rgb.fill(0)
for i in range(0, c): # 先填滿hour燈數,顏色
rgb[h - i] = [255, 0, 0]
if m > h - c and m <= h: # 再判斷 minute 顏色
rgb[m] = [255, 255, 0]
else:
rgb[m] = [0, 255, 0]
if s > h - c and s <= h and s == m: # 最後再判斷 second 顏色
rgb[s] = [255, 255, 255]
elif s == m:
rgb[s] = [0, 255, 255]
elif s > h - c and s <= h:
rgb[s] = [255, 0, 255]
else:
rgb[s] = [0, 0, 255]
rgb.write()
time.sleep(1) # wait a second