forked from tjclement/esp-dimmer-software
-
Notifications
You must be signed in to change notification settings - Fork 1
/
pwmDimmer.lua
61 lines (45 loc) · 1.31 KB
/
pwmDimmer.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
local pwmDimmer = {}
pwmDimmer.targetDuties = {}
pwmDimmer.currentDuties = {}
function pwmDimmer.fadeTo (pin, newDuty)
local currentDuty = pwmDimmer.currentDuties[pin]
if not pin or not newDuty then
return
end
if currentDuty == nil then
pwm.setup(pin, 500, 0)
currentDuty = 0
pwmDimmer.currentDuties[pin] = currentDuty
end
pwmDimmer.targetDuties[pin] = newDuty
tmr.alarm(5, 1, 1, function()
local step
local target = pwmDimmer.targetDuties[pin]
local currentDuty = pwmDimmer.currentDuties[pin]
if target == currentDuty then
tmr.stop(5)
return
end
if target > currentDuty then step = 1 else step = -1 end
pwmDimmer.currentDuties[pin] = pwmDimmer.currentDuties[pin] + step
pwm.setduty(pin, pwmDimmer.currentDuties[pin])
end)
end
function pwmDimmer.setTo (pin, newDuty)
if not pin or not newDuty then
return
end
if pwmDimmer.currentDuties[pin] ~= nil then
pwm.setup(pin, 1000, 1023)
end
pwm.setduty(pin, newDuty)
pwmDimmer.currentDuties[pin] = newDuty
end
function pwmDimmer.getDuty (pin)
if pwmDimmer.currentDuties[pin] ~= nil then
return pwmDimmer.currentDuties[pin]
else
return 0
end
end
return pwmDimmer