Skip to content

Commit cb9000b

Browse files
author
Frank Hunleth
committed
Improve 3 Hz blink timing and any odd blink period
1 parent 030077d commit cb9000b

2 files changed

Lines changed: 14 additions & 2 deletions

File tree

lib/delux/effects.ex

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -279,8 +279,10 @@ defmodule Delux.Effects do
279279
defp led_blink(0, _frequency), do: led_off()
280280

281281
defp led_blink(b, frequency) when frequency > 0 and frequency < 20 do
282-
on_time = round(500 / frequency)
283-
[{b, on_time}, {b, 0}, {0, on_time}, {0, 0}]
282+
period = round(1000 / frequency)
283+
on_time = div(period, 2)
284+
off_time = period - on_time
285+
[{b, on_time}, {b, 0}, {0, off_time}, {0, 0}]
284286
end
285287

286288
defp led_blink(b, frequency) when frequency >= 20, do: led_on(b)

test/delux/effects_test.exs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,16 @@ defmodule Delux.EffectsTest do
6767
assert pattern.blue == [{0, 3_600_000}, {0, 0}]
6868
end
6969

70+
test "blink period is close" do
71+
pattern = Effects.blink(:red, 3)
72+
73+
# 3 Hz has a ~333 ms period which isn't divisible by 2.
74+
# Therefore, on and off times should be different.
75+
assert pattern.red == [{1, 166}, {1, 0}, {0, 167}, {0, 0}]
76+
assert pattern.green == [{0, 3_600_000}, {0, 0}]
77+
assert pattern.blue == [{0, 3_600_000}, {0, 0}]
78+
end
79+
7080
test "description" do
7181
pattern = Effects.blink(:blue, 2)
7282
assert Program.text_description(pattern) == "blue at 2 Hz"

0 commit comments

Comments
 (0)