Gast Robin Geschrieben July 6, 2013 at 23:08 Geschrieben July 6, 2013 at 23:08 Hallo zusammen, bis vor kurzem war es noch problemlos möglich mit dem in der Dokumentation bereitsgestellten Beispiel ein Interrupt auf das IO-16 Bricklet in Python 3 zu legen. Aktuell habe ich jedoch das Problem, dass zwar grundsätzlich der Interrupt erkannt wird, allerdings erst, nachdem ich den input am Ende des Programms ausgelöst habe. Dadurch beendet sich das Programm natürlich auch und ich bin keinen Schritt weiter. Wird kein input eingegeben, dann wird auch kein Interrupt angezeigt oder ausgeführt. Hat jemand eine Idee woran das liegen kann? Die Firmware und Bindings habe ich jetzt auch schon ohne Erfolg aktualisiert. Hier nochmal der angepasste Code aus der Dokumentation: #!/usr/bin/env python # -*- coding: utf-8 -*- HOST = "localhost" PORT = 4223 UID = "uid" # Change to your UID from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_io16 import IO16 # Callback function for interrupts def cb_interrupt(port, interrupt_mask, value_mask): print('Interrupt on port: ' + port) print('Interrupt by: ' + str(bin(interrupt_mask))) print('Value: ' + str(bin(value_mask))) if __name__ == "__main__": ipcon = IPConnection() # Create IP connection io = IO16(UID, ipcon) # Create device object ipcon.connect(HOST, PORT) # Connect to brickd # Don't use device before ipcon is connected # Register callback for interrupts io.register_callback(io.CALLBACK_INTERRUPT, cb_interrupt) # Enable interrupt on pin 2 of port a io.set_port_interrupt('a', 0xFF) input('Press key to exit\n') # Use input() in Python 3 ipcon.disconnect() Wenn ich das input weglasse, dann wird das Programm natürlich direkt beendet und auch hier komme ich also keinen Schritt weiter. Zitieren
Gast Robin Geschrieben July 7, 2013 at 11:07 Geschrieben July 7, 2013 at 11:07 Ok, es scheint jetzt, als hätte ich eine Lösung gefunden. Ich habe das ganze bisher zwar nur beim Temperatr threshold Callback ausprobiert, hatte da aber das gleiche Problem. Es reicht eine unendliche Schleife zu erstellen. Es ist natürliche eher ein Workaround als eine schöne Lösung, funktioniert aber trotzdem. import time TinkerForge Code while true: time.sleep (999) #Auch jeder andere große Wert möglich, beeinflusst Programm nicht Zitieren
photron Geschrieben July 8, 2013 at 07:36 Geschrieben July 8, 2013 at 07:36 Funktioniert hier ohne Probleme unter Linux mit Python 3.2.3. Probier mal nach den prints stdout zu flushen: #!/usr/bin/env python import sys HOST = "localhost" PORT = 4223 UID = "aE7" # Change to your UID from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_io16 import IO16 # Callback function for interrupts def cb_interrupt(port, interrupt_mask, value_mask): print('Interrupt on port: ' + port) print('Interrupt by: ' + str(bin(interrupt_mask))) print('Value: ' + str(bin(value_mask))) sys.stdout.flush() if __name__ == "__main__": # [...] Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.