Sfoglia il codice sorgente

IR send module added

Vladimir Dronnikov 9 anni fa
parent
commit
f09ffdb13b
1 ha cambiato i file con 74 aggiunte e 0 eliminazioni
  1. 74 0
      lua_examples/irsend.lua

+ 74 - 0
lua_examples/irsend.lua

@@ -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