Ich habe jetzt das ganze nochmal ausführlich getestet. In der Callback-Funktion ist immer der 1. Parameter data, also die daten, der 2. ist die adresse und der 3. ist ctl (was auch immer das ist) queue ist dann als 4. parameter (durch print getestet).
Dann bin ich nochmal das Beispiel von __deets__ (2. Seite ganz oben) durchgegangen, das zeigte mir, das was dort in der Funktion callback bei dem code 'uasyncio.create_task(queue.put(val))' als Parameter bei 'queue.put' stehen kann was will, denn das kann man in der Funktion dispatcher per 'await queue.get()' ausgeben lassen, bzw wird übermittelt.
Soweit so gut, alles verstanden. Nur genau das macht es in meinen Code nicht. Habe das nochmal geändert wie vorgeschlagen (vielen dank dafür), aber wenn ich das Programm starte, wird startet bei der Funktion dispatcher die while-Schleife nicht.
Hier nochmal der Code, ich denke mal es liegt an der Callback Methode.
Das Objekt queue wird aber am Anfang der Methode dispatcher als print ausgegeben
, also sollte das Prinzip ja funktionieren. Nur die while-Schleife im dispatcher startet nicht.
Code: Alles auswählen
def callback(data, addr, ctl,queue):
if data > 0: # NEC protocol sends repeat codes.
print('Data {:05x} Addr {:04x}'.format(data, addr))
uasyncio.create_task(queue.put(data))
async def dispatcher(queue):
print(queue)
task = None
while True:
command = await queue.get()
print(command)
print("dispatcher")
async def main():
command_queue = Queue()
ir = NEC_16 (Pin(16, Pin.IN), callback, command_queue)
await dispatcher(command_queue)
if __name__ == '__main__':
uasyncio.run(main())