]> vault307.fbx.one Git - micorpython_ir.git/commitdiff
micropython_ir projects master
authorJimmy <jimipunk88@gmail.com>
Tue, 25 Jun 2024 00:08:50 +0000 (19:08 -0500)
committerJimmy <jimipunk88@gmail.com>
Tue, 25 Jun 2024 00:08:50 +0000 (19:08 -0500)
irRemote/rokuRemote.py [new file with mode: 0644]
ir_tx/test.py

diff --git a/irRemote/rokuRemote.py b/irRemote/rokuRemote.py
new file mode 100644 (file)
index 0000000..aa4603c
--- /dev/null
@@ -0,0 +1,86 @@
+from machine import Pin
+import uasyncio as asyncio
+from primitives.switch import Switch
+from primitives.delay_ms import Delay_ms
+from ir_tx.nec import NEC
+
+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, proto):
+        self.irb = irb
+        self.sw = Switch(pin)
+        self.addr = addr
+        self.data = data
+        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
+        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
+        print(self.data)
+        # 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)
+
+    def ofunc(self):  # Button release: cancel repeat timer
+        self.tim.stop()
+        Rbutton.toggle ^= 1  # Toggle control
+
+    async def repeat(self):
+        await asyncio.sleep(0)  # Let timer stop before retriggering
+        if not self.sw():  # Button is still pressed: retrigger
+            self.tim.trigger(108)
+            if self.proto == 0:
+                self.irb.repeat()  # NEC special case: send REPEAT code
+                print(self.data)
+            else:
+                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
+                print(self.data)
+                
+async def main(proto):
+    pin = Pin(16, Pin.OUT, value = 0) #IRled=irb
+    addr=0xc7ea
+    #TODO: Set up buttons (see ir_tx.test)
+    #Power  0x17  \button=Pin(pin, Pin.IN, Pin.PULL_UP)\ (yellow)5
+    #Home   0x03  \Pin(pin, Pin.IN, Pin.PULL_UP)\
+    #Back   0x66  \Pin(pin, Pin.IN, Pin.PULL_UP)\
+    #VolU   0x0f  \Pin(pin, Pin.IN, Pin.PULL_UP)\
+    #VolD   0x10  \Pin(pin, Pin.IN, Pin.PULL_UP)\
+    #Up     0x19  \Pin(pin, Pin.IN, Pin.PULL_UP)\  (green)20
+    #Down   0x33  \Pin(pin, Pin.IN, Pin.PULL_UP)\
+    #Left   0x1e  \Pin(pin, Pin.IN, Pin.PULL_UP)\  (brown)26
+    #Right  0x2d  \Pin(pin, Pin.IN, Pin.PULL_UP)\
+    #OK     0x2a  \Pin(pin, Pin.IN, Pin.PULL_UP)\  (blue)27
+    
+    classes = (NEC,0)
+    irb = classes[proto](pin, 38000)  # My decoder chip is 38KHz
+    # Uncomment the following to print transmit timing
+    # irb.timeit = True
+
+    b = []  # Rbutton instances
+    pbutton=Pin(5,Pin.IN,Pin.PULL_UP)
+    ubutton=Pin(20,Pin.IN,Pin.PULL_UP)
+    lbutton=Pin(26,Pin.IN,Pin.PULL_UP)
+    ebutton=Pin(27,Pin.IN,Pin.PULL_UP)
+    b.append(Rbutton(irb, pbutton, addr, 0x17, proto))
+    b.append(Rbutton(irb, ubutton,addr,0x19,proto))
+    b.append(Rbutton(irb, lbutton,addr,0x1e,proto))
+    b.append(Rbutton(irb, ebutton,addr,0x2a,proto))
+    #b.append(Rbutton(irb, buttonName,addr,DATA,proto))\replace buttonName, DATA
+    led = Pin(25, Pin.OUT)
+    while True:
+            await asyncio.sleep_ms(500)
+            led(not led())
+    
+def test(proto=0):  #(runs script allowing to try different classes)
+    loop.run_until_complete(main(proto))
+
+test()
\ No newline at end of file
index c9e3366e35482f57d76e87c6935018770f728fb1..db41ff3a76032e825188b3b79a9bb9850e663236 100644 (file)
@@ -130,3 +130,5 @@ else:
 
 def test(proto=0):
     loop.run_until_complete(main(proto))
+
+test()
\ No newline at end of file