Daisy chained neopixel led strips for position lights

the example at ardupilot/libraries/AP_Scripting/examples/LED_poslight.lua at master · ArduPilot/ardupilot · GitHub

uses two separate servo output for left and right.
I want to use single servo output with daisy chained led strips.

how would I go about doing that?

serialLED:set_num_neopixel(12, 24)

serialLED:set_RGB(12, 0, 255, 0, 0)
serialLED:set_RGB(12, 1, 255, 0, 0)
serialLED:set_RGB(12, 2, 255, 0, 0)
serialLED:set_RGB(12, 3, 255, 0, 0)
serialLED:set_RGB(12, 4, 255, 0, 0)
serialLED:set_RGB(12, 5, 255, 0, 0)
serialLED:set_RGB(12, 6, 255, 0, 0)
serialLED:set_RGB(12, 7, 255, 0, 0)

serialLED:set_RGB(12, 8, 0, 255, 0)
serialLED:set_RGB(12, 9, 0, 255, 0)
serialLED:set_RGB(12, 10, 0, 255, 0)
serialLED:set_RGB(12, 11, 0, 255, 0)
serialLED:set_RGB(12, 12, 0, 255, 0)
serialLED:set_RGB(12, 13, 0, 255, 0)
serialLED:set_RGB(12, 14, 0, 255, 0)
serialLED:set_RGB(12, 15, 0, 255, 0)

serialLED:set_RGB(12, 16, 255, 255, 255)
serialLED:set_RGB(12, 17, 255, 255, 255)
serialLED:set_RGB(12, 18, 255, 255, 255)
serialLED:set_RGB(12, 19, 255, 255, 255)
serialLED:set_RGB(12, 20, 255, 255, 255)
serialLED:set_RGB(12, 21, 255, 255, 255)
serialLED:set_RGB(12, 22, 255, 255, 255)
serialLED:set_RGB(12, 23, 255, 255, 255)

serialLED:send(12)

I kind of got them to light up with 8 red / 8 green / 8 white led’s
but I think there must be better way then write them out like this.

how do I make them to blink ?

Use a function with a for loop to iterate over LEDs in a group.

to do what? to make them blink ?

See here and ignore the bit about ProfiLED. The basic function calls are the same for NeoPixel.

local timer = 0

assert(serialLED:set_num_neopixel(13, 24),“Failed LED setup”)
– 13 is the servo channel, 24 is the number of led’s in the daisy chain

function update_LEDs()
if arming:is_armed() then
if (timer == 0) then
serialLED:set_RGB(13, -1, 255, 255, 255) – servo 13 all led’s in the string
elseif (timer == 1) then
for i=0,7 do
serialLED:set_RGB(13, i, 255, 0, 0)
end
for i=8,15 do
serialLED:set_RGB(13, i, 0, 255, 0)
end
for i=16,23 do
serialLED:set_RGB(13, i, 0, 0, 0)
end
elseif (timer == 2) then
serialLED:set_RGB(13, -1, 255, 255, 255)
elseif (timer == 3) then
for i=0,7 do
serialLED:set_RGB(13, i, 255, 0, 0)
end
for i=8,15 do
serialLED:set_RGB(13, i, 0, 255, 0)
end
for i=16,23 do
serialLED:set_RGB(13, i, 150, 150, 150)
end
end
timer = timer + 1
if (timer > 10) then
timer = 0
end
else
for i=0,7 do – led 0 to 7 in string
serialLED:set_RGB(13, i, 255, 0, 0)
end
for i=8,15 do – led 8 to 15 in string
serialLED:set_RGB(13, i, 0, 255, 0)
end
for i=16,23 do – led 16 to 23 in string
serialLED:set_RGB(13, i, 255, 255, 255)
end
timer = 0
end
serialLED:send(13) – 13 is the servo channel

return update_LEDs, 100 – update every 100 miliseconds
end

return update_LEDs()

kinda messy, but seems to work.