Hatkat

_init__ - IR_REMOTE

Dec 29th, 2023
944
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.82 KB | None | 0 0
  1. # Author: Jonathan Martin OrdoΓ±ez
  2. # Guardar en la carpeta ir_rx como __init__.py
  3. from machine import Timer, Pin
  4. from array import array
  5. from utime import ticks_us
  6.  
  7.  
  8. class IR_RX():
  9.     # Result/error codes
  10.     # Repeat button code
  11.     REPEAT = -1
  12.     # Error codes
  13.     BADSTART = -2
  14.     BADBLOCK = -3
  15.     BADREP = -4
  16.     OVERRUN = -5
  17.     BADDATA = -6
  18.     BADADDR = -7
  19.  
  20.     def __init__(self, pin, nedges, tblock, callback, *args):  # Optional args for callback
  21.         self._pin = pin
  22.         self._nedges = nedges
  23.         self._tblock = tblock
  24.         self.callback = callback
  25.         self.args = args
  26.         self._errf = lambda _ : None
  27.         self.verbose = False
  28.  
  29.         self._times = array('i',  (0 for _ in range(nedges + 1)))  # +1 for overrun
  30.         pin.irq(handler = self._cb_pin, trigger = (Pin.IRQ_FALLING | Pin.IRQ_RISING))
  31.         self.edge = 0
  32.         self.tim = Timer(-1)  # Sofware timer
  33.         self.cb = self.decode
  34.  
  35.     # Pin interrupt. Save time of each edge for later decode.
  36.     def _cb_pin(self, line):
  37.         t = ticks_us()
  38.         # On overrun ignore pulses until software timer times out
  39.         if self.edge <= self._nedges:  # Allow 1 extra pulse to record overrun
  40.             if not self.edge:  # First edge received
  41.                 self.tim.init(period=self._tblock , mode=Timer.ONE_SHOT, callback=self.cb)
  42.             self._times[self.edge] = t
  43.             self.edge += 1
  44.  
  45.     def do_callback(self, cmd, addr, ext, thresh=0):
  46.         self.edge = 0
  47.         if cmd >= thresh:
  48.             self.callback(cmd, *self.args)  # Llamada a la funciΓ³n callback con un solo argumento 'cmd'
  49.         else:
  50.             self._errf(cmd)
  51.  
  52.  
  53.     def error_function(self, func):
  54.         self._errf = func
  55.  
  56.     def close(self):
  57.         self._pin.irq(handler = None)
  58.         self.tim.deinit()
  59.  
  60.  
Advertisement
Add Comment
Please, Sign In to add comment