You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
2.6 KiB

# Based on NeoPixel library and strandtest example by Tony DiCola (tony@tonydicola.com)
# To be used with a 12x1 NeoPixel LED stripe.
# Place the LEDs in a circle an watch the time go by ...
# red = hours
# blue = minutes 1-5
# green = seconds
# (To run the program permanently and with autostart use systemd.)
import time
import datetime
import math
from neopixel import *
# LED strip configuration:
LED_COUNT = 12 # Number of LED pixels.
LED_PIN = 18 # GPIO pin connected to the pixels (must support PWM!).
LED_FREQ_HZ = 800000 # LED signal frequency in hertz (usually 800khz)
LED_DMA = 10 # DMA channel to use for generating signal (try 10)
LED_BRIGHTNESS = 255 # Set to 0 for darkest and 255 for brightest
# True to invert the signal (when using NPN transistor level shift)
LED_INVERT = False
# Main program logic follows:
if __name__ == '__main__':
# Create NeoPixel object with appropriate configuration.
strip = Adafruit_NeoPixel(
LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS)
# Intialize the library (must be called once before other functions).
strip.begin()
for i in range(0, strip.numPixels(), 1):
strip.setPixelColor(i, Color(0, 0, 0))
while True:
now = datetime.datetime.now()
# Low light during 19-8 o'clock
if(8 < now.hour < 19):
strip.setBrightness(200)
else:
strip.setBrightness(25)
hour = now.hour % 12
minute = now.minute / 5
second = now.second / 5
secondmodulo = now.second % 5
timeslot_in_microseconds = secondmodulo * 1000000 + now.microsecond
for i in range(0, strip.numPixels(), 1):
secondplusone = second + 1 if(second < 11) else 0
secondminusone = second - 1 if(second > 0) else 11
colorarray = [0, 0, 0]
if i == second:
if timeslot_in_microseconds < 2500000:
colorarray[0] = int(
0.0000508 * timeslot_in_microseconds) + 126
else:
colorarray[0] = 382 - \
int(0.0000508 * timeslot_in_microseconds)
if i == secondplusone:
colorarray[0] = int(0.0000256 * timeslot_in_microseconds)
if i == secondminusone:
colorarray[0] = int(
0.0000256 * timeslot_in_microseconds) * -1 + 128
if i == minute:
colorarray[2] = 200
if i == hour:
colorarray[1] = 200
strip.setPixelColor(
i, Color(colorarray[0], colorarray[1], colorarray[2]))
strip.show()
time.sleep(0.1)