From f09ffdb13bd9da1249b130188e515156b96a1eb2 Mon Sep 17 00:00:00 2001 From: Vladimir Dronnikov Date: Wed, 28 Jan 2015 10:47:00 +0300 Subject: [PATCH] IR send module added --- lua_examples/irsend.lua | 74 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 lua_examples/irsend.lua diff --git a/lua_examples/irsend.lua b/lua_examples/irsend.lua new file mode 100644 index 00000000..4ccd2ebb --- /dev/null +++ b/lua_examples/irsend.lua @@ -0,0 +1,74 @@ +------------------------------------------------------------------------------ +-- IR send module +-- +-- LICENCE: http://opensource.org/licenses/MIT +-- Vladimir Dronnikov +-- +-- 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