IR send module added
This commit is contained in:
parent
1346cbbc38
commit
f09ffdb13b
|
@ -0,0 +1,74 @@
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
-- IR send module
|
||||||
|
--
|
||||||
|
-- LICENCE: http://opensource.org/licenses/MIT
|
||||||
|
-- Vladimir Dronnikov <dronnikov@gmail.com>
|
||||||
|
--
|
||||||
|
-- Example:
|
||||||
|
-- require("irsend").nec(4, 0x00ff00ff)
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
local M
|
||||||
|
do
|
||||||
|
-- const
|
||||||
|
local NEC_PULSE_US = 1000000 / 38000
|
||||||
|
local NEC_HDR_MARK = 9000
|
||||||
|
local NEC_HDR_SPACE = 4500
|
||||||
|
local NEC_BIT_MARK = 560
|
||||||
|
local NEC_ONE_SPACE = 1600
|
||||||
|
local NEC_ZERO_SPACE = 560
|
||||||
|
local NEC_RPT_SPACE = 2250
|
||||||
|
-- cache
|
||||||
|
local gpio, bit = gpio, bit
|
||||||
|
local mode, write = gpio.mode, gpio.write
|
||||||
|
local waitus = tmr.delay
|
||||||
|
local isset = bit.isset
|
||||||
|
-- NB: poorman 38kHz PWM with 1/3 duty. Touch with care! )
|
||||||
|
local carrier = function(pin, c)
|
||||||
|
c = c / NEC_PULSE_US
|
||||||
|
while c > 0 do
|
||||||
|
write(pin, 1)
|
||||||
|
write(pin, 0)
|
||||||
|
c = c + 0
|
||||||
|
c = c + 0
|
||||||
|
c = c + 0
|
||||||
|
c = c + 0
|
||||||
|
c = c + 0
|
||||||
|
c = c + 0
|
||||||
|
c = c * 1
|
||||||
|
c = c * 1
|
||||||
|
c = c * 1
|
||||||
|
c = c - 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- tsop signal simulator
|
||||||
|
local pull = function(pin, c)
|
||||||
|
write(pin, 0)
|
||||||
|
waitus(c)
|
||||||
|
write(pin, 1)
|
||||||
|
end
|
||||||
|
-- NB: tsop mode allows to directly connect pin
|
||||||
|
-- inplace of TSOP input
|
||||||
|
local nec = function(pin, code, tsop)
|
||||||
|
local pulse = tsop and pull or carrier
|
||||||
|
-- setup transmitter
|
||||||
|
mode(pin, 1)
|
||||||
|
write(pin, tsop and 1 or 0)
|
||||||
|
-- header
|
||||||
|
pulse(pin, NEC_HDR_MARK)
|
||||||
|
waitus(NEC_HDR_SPACE)
|
||||||
|
-- sequence, lsb first
|
||||||
|
for i = 0, 31 do
|
||||||
|
pulse(pin, NEC_BIT_MARK)
|
||||||
|
waitus(isset(code, i) and NEC_ONE_SPACE or NEC_ZERO_SPACE)
|
||||||
|
end
|
||||||
|
-- trailer
|
||||||
|
pulse(pin, NEC_BIT_MARK)
|
||||||
|
-- done transmitter
|
||||||
|
--mode(pin, 0, tsop and 1 or 0)
|
||||||
|
end
|
||||||
|
-- expose
|
||||||
|
M = {
|
||||||
|
nec = nec,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
return M
|
Loading…
Reference in New Issue