X-Git-Url: https://vault307.fbx.one/gitweb/micorpython_ir.git/blobdiff_plain/22acf8e1d02787907c7eacba1756b5acd1c4495f..36140aa568d4a538adafb03e575b26de8a0784ef:/ir_tx/nec.py diff --git a/ir_tx/nec.py b/ir_tx/nec.py new file mode 100644 index 0000000..8cf39e7 --- /dev/null +++ b/ir_tx/nec.py @@ -0,0 +1,38 @@ +# nec.py Encoder for IR remote control using synchronous code +# NEC protocol. + +# Author: Peter Hinch +# Copyright Peter Hinch 2020 Released under the MIT license + +from micropython import const +from ir_tx import IR, STOP + +_TBURST = const(563) +_T_ONE = const(1687) + +class NEC(IR): + + def __init__(self, pin, freq=38000, verbose=False): # NEC specifies 38KHz + super().__init__(pin, freq, 68, 50, verbose) + + def _bit(self, b): + self.append(_TBURST, _T_ONE if b else _TBURST) + + def tx(self, addr, data, _): # Ignore toggle + self.append(9000, 4500) + if addr < 256: # Short address: append complement + addr |= ((addr ^ 0xff) << 8) + for _ in range(16): + self._bit(addr & 1) + addr >>= 1 + data |= ((data ^ 0xff) << 8) + for _ in range(16): + self._bit(data & 1) + data >>= 1 + self.append(_TBURST) + + def repeat(self): + self.aptr = 0 + self.append(9000, 2250, _TBURST, STOP) + self.aptr = 0 # Reset pointer + self.cb(self._tim) # Initiate physical transmission.