X-Git-Url: https://vault307.fbx.one/gitweb/micorpython_ir.git/blobdiff_plain/d8d6758c3370f4adc636aed7b935a492754f6062..12683170548778e5d933f2f2052164547cc15113:/ir_tx/test.py?ds=sidebyside diff --git a/ir_tx/test.py b/ir_tx/test.py index b175dcd..c1961fd 100644 --- a/ir_tx/test.py +++ b/ir_tx/test.py @@ -1,4 +1,4 @@ -# ir_tx_test.py Test for nonblocking NEC/SONY/RC-5/RC-6 mode 0 IR blaster. +# ir_tx.test Test for nonblocking NEC/SONY/RC-5/RC-6 mode 0 IR blaster. # Released under the MIT License (MIT). See LICENSE. @@ -12,7 +12,8 @@ if ESP32: else: from pyb import Pin, LED import uasyncio as asyncio -from aswitch import Switch, Delay_ms +from primitives.switch import Switch +from primitives.delay_ms import Delay_ms # Import all implemented classes from ir_tx.nec import NEC from ir_tx.sony import SONY_12, SONY_15, SONY_20 @@ -20,20 +21,24 @@ from ir_tx.philips import RC5, RC6_M0 loop = asyncio.get_event_loop() +# If button is held down normal behaviour is to retransmit +# but most NEC models send a REPEAT code class Rbutton: toggle = 1 # toggle is ignored in NEC mode - def __init__(self, irb, pin, addr, data, rep_code=False): + def __init__(self, irb, pin, addr, data, proto): self.irb = irb self.sw = Switch(pin) self.addr = addr self.data = data - self.rep_code = rep_code + self.proto = proto + self.sw.close_func(self.cfunc) self.sw.open_func(self.ofunc) self.tim = Delay_ms(self.repeat) def cfunc(self): # Button push: send data - self.irb.transmit(self.addr, self.data, Rbutton.toggle) + tog = 0 if self.proto < 3 else Rbutton.toggle # NEC, sony 12, 15: toggle==0 + self.irb.transmit(self.addr, self.data, tog, True) # Test validation # Auto repeat. The Sony protocol specifies 45ms but this is tight. # In 20 bit mode a data burst can be upto 39ms long. self.tim.trigger(108) @@ -46,28 +51,28 @@ class Rbutton: await asyncio.sleep(0) # Let timer stop before retriggering if not self.sw(): # Button is still pressed: retrigger self.tim.trigger(108) - if self.rep_code: + if self.proto == 0: self.irb.repeat() # NEC special case: send REPEAT code else: - self.irb.transmit(self.addr, self.data, Rbutton.toggle) + tog = 0 if self.proto < 3 else Rbutton.toggle # NEC, sony 12, 15: toggle==0 + self.irb.transmit(self.addr, self.data, tog, True) # Test validation async def main(proto): - # Test uses a 38KHz carrier. Some Philips systems use 36KHz. - # If button is held down normal behaviour is to retransmit - # but most NEC models send a REPEAT code - rep_code = proto == 0 # Rbutton constructor requires False for RC-X. NEC protocol only. + # Test uses a 38KHz carrier. if ESP32: # Pins for IR LED gate - pin = (Pin(23, Pin.OUT, value = 0), Pin(21, Pin.OUT, value = 0)) + pin = Pin(23, Pin.OUT, value = 0) else: pin = Pin('X1') classes = (NEC, SONY_12, SONY_15, SONY_20, RC5, RC6_M0) irb = classes[proto](pin, 38000) # My decoder chip is 38KHz + # Uncomment the following to print transmit timing + # irb.timeit = True b = [] # Rbutton instances px3 = Pin(18, Pin.IN, Pin.PULL_UP) if ESP32 else Pin('X3', Pin.IN, Pin.PULL_UP) px4 = Pin(19, Pin.IN, Pin.PULL_UP) if ESP32 else Pin('X4', Pin.IN, Pin.PULL_UP) - b.append(Rbutton(irb, px3, 0x1, 0x7, rep_code)) - b.append(Rbutton(irb, px4, 0x10, 0xb, rep_code)) + b.append(Rbutton(irb, px3, 0x1, 0x7, proto)) + b.append(Rbutton(irb, px4, 0x10, 0xb, proto)) if ESP32: while True: print('Running') @@ -80,7 +85,7 @@ async def main(proto): # Greeting strings. Common: s = '''Test for IR transmitter. Run: -from ir_tx_test import test +from ir_tx.test import test test() for NEC protocol test(1) for Sony SIRC 12 bit test(2) for Sony SIRC 15 bit @@ -97,7 +102,7 @@ Ground pin X4 to send addr 0x10 data 0x0b.''' # ESP32 sesp = ''' -IR LED gate on pins 23, 21 +IR LED gate on pin 23 Ground pin 18 to send addr 1 data 7 Ground pin 19 to send addr 0x10 data 0x0b.'''