# Simple NEC remote decode-and-type keyboard example # When used with the Adafruit NEC remote will act like a keyboard and # type out keypresses. import time import adafruit_irremote from adafruit_hid.keyboard import Keyboard from adafruit_hid.keycode import Keycode from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS import adafruit_dotstar import pulseio import board led = adafruit_dotstar.DotStar(board.APA102_SCK, board.APA102_MOSI, 1) # The keyboard object! time.sleep(1) # Sleep for a bit to avoid a race condition on some systems keyboard = Keyboard() keyboard_layout = KeyboardLayoutUS(keyboard) # We're in the US :) # our infrared pulse decoder helpers pulsein = pulseio.PulseIn(board.REMOTEIN, maxlen=120, idle_state=True) decoder = adafruit_irremote.GenericDecode() # size must match what you are decoding! for NEC use 4 received_code = bytearray(4) # Make a list of lists with the IR code expected and our keypress out's infrared_to_key = ( ([255, 2, 191, 64], (Keycode.LEFT_CONTROL, Keycode.UP_ARROW)), # Vol+ ([255, 2, 255, 0], (Keycode.LEFT_CONTROL, Keycode.DOWN_ARROW)), # Vol- ([255, 2, 127, 128],(Keycode.SPACE,)), ([255, 2, 111, 144],(Keycode.ENTER,)), # Enter / Save ([255, 2, 143, 112],(Keycode.DELETE,)), # Backwards arrow ([255, 2, 159, 96], (Keycode.ESCAPE,)), # Setup ([255, 2, 79, 176], (Keycode.DOWN_ARROW,)), ([255, 2, 239, 16], (Keycode.LEFT_ARROW,)), ([255, 2, 95, 160], (Keycode.UP_ARROW,)), ([255, 2, 175, 80], (Keycode.RIGHT_ARROW,)), ([255, 2, 207, 48], (Keycode.ZERO,)), ([255, 2, 247, 8], (Keycode.ONE,)), ([255, 2, 119, 136],(Keycode.TWO,)), ([255, 2, 183, 72], (Keycode.THREE,)), ([255, 2, 215, 40], (Keycode.FOUR,)), ([255, 2, 87, 168], (Keycode.FIVE,)), ([255, 2, 151, 104],(Keycode.SIX,)), ([255, 2, 231, 24], (Keycode.SEVEN,)), ([255, 2, 103, 152],(Keycode.EIGHT,)), ([255, 2, 167, 88], (Keycode.NINE,)), ) print("Ready for NEC remote input!") while True: led[0] = (0, 0, 0) # LED off pulses = decoder.read_pulses(pulsein) #print("\tHeard", len(pulses), "Pulses:", pulses) try: code = decoder.decode_bits(pulses, debug=False) print("Decoded:", code) # Reads 4-byte code transmitted by NEC remotes and # sends a matching key command for pairs in infrared_to_key: if pairs[0] == code: led[0] = (0, 100, 0) # flash green print("Matched IR code to keypresses: ", pairs[1]) keyboard.press(*pairs[1]) keyboard.release_all() except adafruit_irremote.IRNECRepeatException: # unusual short code! print("NEC repeat!") except adafruit_irremote.IRDecodeException as e: # failed to decode led[0] = (100, 0, 0) # flash red print("Failed to decode: ", e.args) print("----------------------------")