-
Notifications
You must be signed in to change notification settings - Fork 0
/
klo-light.lua
71 lines (62 loc) · 1.82 KB
/
klo-light.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
SOURCE_VERSION = 2
-- Constants
local r = 0
local g = 1
local b = 2
local w = 3
local sine_speed = 0.07
local noise_speed = 0.1
local mode_full_bright = 0
local mode_night = 1
-- Variables
local klo_enabled = true
local light_mode = mode_night
function setup()
set_priority(3)
--add_output_group('klo')
add_output_alias('klo-r')
add_output_alias('klo-g')
add_output_alias('klo-b')
add_output_alias('klo-w')
add_event_subscription('button-front-door-left', EVENT_TYPE_BUTTON_DOWN, 'handle_down')
add_event_subscription('button-front-door-left', EVENT_TYPE_BUTTON_LONG_PRESS, 'handle_long_press')
end
function handle_down(address, _typ)
program_enable('klo-light')
klo_enabled = not klo_enabled
if not klo_enabled then
light_mode = mode_night
end
end
function handle_long_press(address, _typ, duration)
light_mode = mode_full_bright
klo_enabled = true
end
function compute_white(index, now)
if light_mode == mode_full_bright then
return HIGH
end
local t = (now - START) * sine_speed
return map_to_value(0, 1, map_range(-1, 1, 0.7, 0.8, math.sin(t + (math.pi / 4) * index)))
end
function compute_color(index, now)
if light_mode == mode_full_bright then
return HIGH
end
local t = (now - START) * noise_speed
return map_to_value(0, 1, map_range(-1, 1, 0.5, 0.9, noise2d(index, t)))
end
function tick(now)
local global_enabled = get_global("global_enable")
if global_enabled and klo_enabled then
set_alias('klo-w', compute_white(w, now))
set_alias('klo-r', compute_color(r, now))
set_alias('klo-g', compute_color(g, now))
set_alias('klo-b', compute_color(b, now))
else
set_alias('klo-r', LOW)
set_alias('klo-g', LOW)
set_alias('klo-b', LOW)
set_alias('klo-w', LOW)
end
end