Created
May 26, 2016 20:26
-
-
Save erebor/c932b817be5b85f9ec1816d54443baae to your computer and use it in GitHub Desktop.
Ring clock for ws2812 led
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
$:.unshift(File.expand_path('../../lib', __FILE__)) | |
require 'ws2812' | |
class Ring | |
attr_accessor :led_count | |
def initialize(number_of_leds) | |
@led_count = number_of_leds | |
end | |
def ws | |
return @ws if defined? @ws | |
# +n+ leds at pin 18, using defaults | |
@ws = Ws2812::Basic.new(led_count, 18) | |
@ws.open | |
end | |
def get_led_rgb(number) | |
[ws[number].r, ws[number].g, ws[number].b] | |
end | |
def set_led_off(number) | |
ws.set number, 0, 0, 0 | |
ws.show | |
end | |
def set_led_rgb(number, r, g, b) | |
return if get_led_rgb(number) == [r, g, b] | |
ws.set number, r, g, b | |
ws.show | |
end | |
def brightness=(level) | |
ws.brightness = level | |
ws.show | |
end | |
def normalize_on_range(value, range) | |
(value / (range.to_f / (led_count - 1) )).to_i | |
end | |
end | |
r = Ring.new(24) | |
hour_color = [14, 199, 33] | |
min_color = [0, 5, 199] | |
sec_color = [140, 14, 14] | |
old_hour_led = 0 | |
old_min_led = 0 | |
old_sec_led = 0 | |
while true | |
t = Time.now | |
hour_led = t.hour | |
min_led = r.normalize_on_range(t.min, 60) | |
sec_led = r.normalize_on_range(t.sec, 60) | |
if hour_led != old_hour_led || | |
[old_min_led, old_sec_led].include?(hour_led) | |
r.set_led_off old_hour_led | |
r.set_led_rgb hour_led, *hour_color | |
old_hour_led = hour_led | |
end | |
if min_led != old_min_led || | |
[old_hour_led, old_sec_led].include?(min_led) | |
r.set_led_off old_min_led unless hour_led == old_min_led | |
r.set_led_rgb min_led, *min_color | |
old_min_led = min_led | |
end | |
if sec_led != old_sec_led | |
r.set_led_off old_sec_led unless [hour_led, min_led].include? old_sec_led | |
r.set_led_rgb sec_led, *sec_color | |
old_sec_led = sec_led | |
end | |
sleep 1 | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment