Adafruit_Learning_System_Gu.../blahaj/code.py
2022-03-22 00:34:59 -04:00

132 lines
3.2 KiB
Python

# SPDX-FileCopyrightText: 2022 Eva Herrada for Adafruit Industries
#
# SPDX-License-Identifier: MIT
import time
import board
from adafruit_lc709203f import LC709203F
import adafruit_pcf8523
from simpleio import tone
import neopixel
from adafruit_led_animation.animation.rainbow import Rainbow
rtc = adafruit_pcf8523.PCF8523(board.I2C())
battery = LC709203F(board.I2C())
indicator = neopixel.NeoPixel(board.A1, 1)
LEDs = neopixel.NeoPixel(board.A2, 20)
LEDs.fill((0, 0, 0))
rainbow = Rainbow(LEDs, speed=0.1, period=2)
days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
sleep = {
0: (22, 50),
1: (23, 08),
2: (22, 50),
3: (22, 50),
4: (22, 50),
5: None,
6: None,
}
wake = {
0: (11, 30),
1: (9, 50),
2: (9, 50),
3: (9, 50),
4: (9, 50),
5: (9, 50),
6: (11, 30),
}
BPM = 160
ringtone = [
(330, 0.5),
(294, 0.5),
(185, 1),
(208, 1),
(277, 0.5),
(247, 0.5),
(147, 1),
(165, 1),
(247, 0.5),
(220, 0.5),
(139, 1),
(165, 1),
(220, 2),
]
SET_DATE = False # Set this to True on first run and False for subsequent runs
if SET_DATE:
# Make sure to set this to the current date and time before using
YEAR = 2022
MONTH = 3
DAY = 21
HOUR = 16
MINUTE = 54
SEC = 0
WDAY = 1 # 0 Sunday, 1 Monday, etc.
t = time.struct_time((YEAR, MONTH, DAY, HOUR, MINUTE, SEC, WDAY, -1, -1))
print("Setting time to:", t) # uncomment for debugging
rtc.datetime = t
print()
on_always = True # Set to False for animation only to be on when alarm rings
indicate = True
start = time.monotonic()
wait = 1
while True:
if on_always:
rainbow.animate()
if time.monotonic() - start > wait:
start = time.monotonic()
wait = 1
t = rtc.datetime
bat = min(max(int(battery.cell_percent), 0), 100)
g = int((bat / 100) * 255)
r = int((1 - (bat / 100)) * 255)
if bat >= 15:
indicator.fill([r, g, 0])
if bat < 15:
if indicate:
indicator.fill([0, 0, 0])
indicate = False
else:
indicator.fill([r, g, 0])
indicate = True
print(f"Date: {days[t.tm_wday]} {t.tm_mday}/{t.tm_mon}/{t.tm_year}")
print(f"Time: {t.tm_hour}:{t.tm_min}:{t.tm_sec}")
print(f"Batt: {bat}%\n")
night = sleep[t.tm_wday]
morning = wake[t.tm_wday]
if night:
if night[0] == t.tm_hour and night[1] == t.tm_min:
for i in ringtone:
print(i[0])
tone(board.A0, i[0], i[1] * (60 / BPM))
wait = 60
if not on_always:
while time.monotonic() - start < 5:
rainbow.animate()
rainbow.fill([0, 0, 0])
if morning:
if morning[0] == t.tm_hour and morning[1] == t.tm_min:
for i in ringtone:
print(i[0])
tone(board.A0, i[0], i[1] * (60 / BPM))
wait = 60
if not on_always:
while time.monotonic() - start < 5:
rainbow.animate()
rainbow.fill([0, 0, 0])