Code: Select all
#Sense Hat alarm clock
#Author Kratos
#Version 12.10.15
from sense_hat import SenseHat
import time
import os
import pygame
from pygame.locals import *
pygame.init()
pygame.display.set_mode((640, 480))
sense = SenseHat()
green = 0, 255, 0
red = 255, 0, 0
blue = 0, 0, 255
light = False
running = True
not_executed = 1
hr = 6
current = 6
do_hr = 0
do_minu = 1
minu = 0
moodh = 20
moodm = 0
r = 255
g = 0
b = 0
pixels = [
[255, 0, 0], [255, 0, 0], [255, 87, 0], [255, 196, 0], [205, 255, 0], [95, 255, 0], [0, 255, 13], [0, 255, 122],
[255, 0, 0], [255, 96, 0], [255, 205, 0], [196, 255, 0], [87, 255, 0], [0, 255, 22], [0, 255, 131], [0, 255, 240],
[255, 105, 0], [255, 214, 0], [187, 255, 0], [78, 255, 0], [0, 255, 30], [0, 255, 140], [0, 255, 248], [0, 152, 255],
[255, 223, 0], [178, 255, 0], [70, 255, 0], [0, 255, 40], [0, 255, 148], [0, 253, 255], [0, 144, 255], [0, 34, 255],
[170, 255, 0], [61, 255, 0], [0, 255, 48], [0, 255, 157], [0, 243, 255], [0, 134, 255], [0, 26, 255], [83, 0, 255],
[52, 255, 0], [0, 255, 57], [0, 255, 166], [0, 235, 255], [0, 126, 255], [0, 17, 255], [92, 0, 255], [201, 0, 255],
[0, 255, 66], [0, 255, 174], [0, 226, 255], [0, 117, 255], [0, 8, 255], [100, 0, 255], [210, 0, 255], [255, 0, 192],
[0, 255, 183], [0, 217, 255], [0, 109, 255], [0, 0, 255], [110, 0, 255], [218, 0, 255], [255, 0, 183], [255, 0, 74]
]
msleep = lambda x: time.sleep(x / 1000.0)
sense.clear()
sense.low_light = light
sense.show_message("Please set your alarm.", text_colour=green)
time.sleep(1)
while running:
message = current
message = int(message)
sense.show_message(str(message), text_colour=blue)
for event in pygame.event.get():
if (event.type == KEYUP) or (event.type == KEYDOWN):
if do_hr == 0:
if (event.key == K_DOWN) and hr >= 0:
sense.clear()
hr = hr - 0.5
current = hr
elif (event.key == K_UP) and hr <= 24:
sense.clear()
hr = hr + 0.5
current = hr
elif (event.key == K_RIGHT):
hr = int(hr)
sense.clear()
do_hr = 1
do_minu = 0
current = minu
time.sleep(1)
if do_minu == 0:
if (event.key == K_DOWN) and minu >= 0:
sense.clear()
minu = minu - 0.5
current = minu
elif (event.key == K_UP) and minu <= 60:
sense.clear()
minu = minu + 0.5
current = minu
elif (event.key == K_RETURN):
minu = int(minu)
sense.clear()
message = "Alarm at: {0:02}:{1:02}".format(hr, minu)
sense.show_message(message, text_colour=green)
pygame.quit ()
running = False
time.sleep(1)
message = "Light show at: {0:02}:{1:02}".format(moodh, moodm)
sense.show_message(message, text_colour=red)
try:
def pulse():
sense.clear(red)
os.popen("sudo omxplayer /home/pi/alarm.mp3")
sense.clear()
time.sleep(0.5)
return
def rainbow():
light = True
sense.low_light = light
def next_colour(pix):
r = pix[0]
g = pix[1]
b = pix[2]
if (r == 255 and g < 255 and b == 0):
g += 1
if (g == 255 and r > 0 and b == 0):
r -= 1
if (g == 255 and b < 255 and r == 0):
b += 1
if (b == 255 and g > 0 and r == 0):
g -= 1
if (b == 255 and r < 255 and g == 0):
r += 1
if (r == 255 and b > 0 and g == 0):
b -= 1
pix[0] = r
pix[1] = g
pix[2] = b
for pix in pixels:
next_colour(pix)
sense.set_pixels(pixels)
msleep(2)
while(not_executed):
tm = list(time.localtime())
hour = tm[3]
minute = tm[4]
if hour == moodh:
rainbow()
if hour == 1 + moodh:
sense.clear()
if hour == hr and minute >= minu:
light = False
sense.low_light = light
pulse()
not_executed = 0
except KeyboardInterrupt:
not_executed = 0
sense.clear()
print("Stopping...")
I copied the light show part from the demo programs, so I won't take credit for that piece. Enjoy!
Kratos