-
Notifications
You must be signed in to change notification settings - Fork 1
/
apa102.lua
49 lines (42 loc) · 1.09 KB
/
apa102.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
--[[
APA102 control helpers
Use these to push pixels to apa102 (dotstar) lights over SPI on the nodemcu platform.
Alan Rager
Feb 11, 2015
--]]
apa102 = {}
--Initialize for writing spi
function apa102.init()
-- Thanks, elevation: http://www.esp8266.com/viewtopic.php?p=8959#p8959
-- Posted Feb 04, 2015, lifted Feb 11, 2015
spi.setup(1, spi.MASTER, spi.CPOL_LOW, spi.CPHA_LOW, spi.DATABITS_8, 0);
end
--[[
Write out a string of bytes to the apa102 lights
@param number brightness - a single byte of data to write; 3 bits high, then 5 bits of brightness to set globally
@param string data - a string of bytes in bgr order to write to the light strip
--]]
function apa102.write(brightness, data)
local led_count = string.len(data) / 3
local output_buffer = ""
local bright_char = string.char(brightness)
for i=0,(led_count - 1) do
output_buffer = output_buffer..
bright_char..
string.sub(
data,
(i * 3) + 1,
(i * 3) + 3
)
end
return spi.send(
1,
string.rep(
string.char(0x00),
4
)..output_buffer..string.rep(
string.char(0xff),
led_count * 2
)
)
end