topi Geschrieben September 8, 2017 at 13:53 Geschrieben September 8, 2017 at 13:53 Hallo, ich bin mit meinem marginalen Python-Kenntnissen ans vorläufige Ende gekommen und hoffe auf Tipps der Python-Kenner hier im Forum. Gegeben und funktionierend, basierend auf den Beispielen im Tinkerforge Website, ist folgender Python-Code: HOST = "localhost" PORT = 4223 UID = "XXX" # Change XYZ to the UID of your LCD 20x4 Bricklet from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_lcd_20x4 import BrickletLCD20x4 import os # Callback function for button pressed callback def cb_button_pressed(button): print("Button Pressed: " + str(button)) print("backlight=",lcd.is_backlight_on()) if button == 0: if lcd.is_backlight_on() is True: lcd.backlight_off() else: lcd.backlight_on() if button == 3: os.system("sudo systemctl reboot") # Callback function for button released callback def cb_button_released(button): print("Button Released: " + str(button)) if __name__ == "__main__": ipcon = IPConnection() # Create IP connection lcd = BrickletLCD20x4(UID, ipcon) # Create device object ipcon.connect(HOST, PORT) # Connect to brickd # Don't use device before ipcon is connected # Register button pressed callback to function cb_button_pressed lcd.register_callback(lcd.CALLBACK_BUTTON_PRESSED, cb_button_pressed) # Register button released callback to function cb_button_released #lcd.register_callback(lcd.CALLBACK_BUTTON_RELEASED, cb_button_released) input("Press key to exit\n") # Use input() in Python 3 ipcon.disconnect() Wo ich nun nicht mehr weiter weiss ist, wie kann ich für Button 3 eine funktionale Abfrage einbauen in der Art "Bitte Button 3 nochmals drücken für System Reboot!" Button 3 soll dabei innerhalb von 5 Sekunden nochmals gedrückt werden, ansonsten würde alles wieder in den Ausganszustand zurückfallen. Vielen Dank für hilfreiche Tipps im Voraus, topi Zitieren
__LC__ Geschrieben September 9, 2017 at 20:21 Geschrieben September 9, 2017 at 20:21 Moin topi. Anbei mal ein einfaches Beispiel wie du es machen könntest: from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_lcd_20x4 import BrickletLCD20x4 import os, time def callback_wrapper(): timestamp = -1 def cb_button_pressed(button): print("Button {0} pressed...".format(button)) if button == 0: if lcd.is_backlight_on(): lcd.backlight_off() else: lcd.backlight_on() elif button == 3: nonlocal timestamp if time.time() - timestamp > 5: print('Press button 3 within the next 5 seconds again...') timestamp = time.time() else: print('Shutdown now...') timestamp = -1 # This line is only necessary for testing purpose without real shutdown! return cb_button_pressed if __name__ == "__main__": UID = "XYZ" # Change XYZ to the UID of your LCD 20x4 Bricklet HOST = "127.0.0.1" PORT = 4223 ipcon = IPConnection() lcd = BrickletLCD20x4(UID, ipcon) ipcon.connect(HOST, PORT) button_pressed_callback = callback_wrapper() lcd.register_callback(lcd.CALLBACK_BUTTON_PRESSED, button_pressed_callback) input("Press key to exit\n") ipcon.disconnect() Hoffe es entspricht dem was du dir vorgestellt hast. Bei Fragen einfach fragen. Viele Grüße __LC__ Nachtrag 10.09.2017: Zur besseren Übersichtlichkeit habe ich den Code-Schnipsel nochmal leicht abgeändert. Zitieren
topi Geschrieben September 11, 2017 at 06:19 Autor Geschrieben September 11, 2017 at 06:19 Guten Morgen __LC__, Herzlichen Dank für die schnelle Hilfe. Es funktioniert und ist das, was ich mir mit der Absicherung gegen versehentliches Drücken von Button 3 vorstellte 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.