ben_bienne Geschrieben June 21, 2014 at 09:53 Geschrieben June 21, 2014 at 09:53 Hi all, Actually I use a Motion Detector and Raspberry Pi with camera to take picture when something is moving. It work good. I can switch on/off the Motion Detector with my computer keyboard Now I would like to do the same without my keyboard and screen but with a manual switch. I have an IO4 Bricklet and a button ON/OFF. I am new in programming and I don't find the way to do this. Can someone help me. Here is my python code #!/usr/bin/env python # -*- coding: utf-8 -*- HOST = "localhost" PORT = 4223 UID = "ksc" # Change to your UID from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_motion_detector import MotionDetector import picamera import time camera_name = "cameraA_" # Callback function for end of detection cycle def cb_detection_cycle_ended(): if not system_activ: return print('Detection Cycle Ended (next detection possible in ~3 seconds)') # Callback function for detected motion def cb_motion_detected(): if not system_activ: return print('Motion Detected') with picamera.PiCamera() as camera: date_time = int(time.time()) date_string = str(date_time) camera.resolution = (1024, 768) camera.start_preview() # Camera warm-up time time.sleep(2) camera.capture(camera_name + date_string +".jpg") if __name__ == "__main__": ipcon = IPConnection() # Create IP connection md = MotionDetector(UID, ipcon) # Create device object ipcon.connect(HOST, PORT) # Connect to brickd system_activ = True # Don't use device before ipcon is connected # Register detected callback to function cb_motion_detected md.register_callback(md.CALLBACK_MOTION_DETECTED, cb_motion_detected) # Register detection cycle ended callback to function cb_detection_cycle_ended md.register_callback(md.CALLBACK_DETECTION_CYCLE_ENDED, cb_detection_cycle_ended) while True: print "Select an option:" print "1. Turn surveillance off" if system_activ is True else "1. Turn surveillance on" print "0. Exit" option = int(raw_input("Option: ")) if option == 0: break elif option == 1: if system_activ: system_activ = False print "Surveillance is disabled" else: system_activ = True print "Surveillance is enabled" else: print "Invalid input!" # raw_input('Press key to exit\n') # Use input() in Python 3 ipcon.disconnect() Thank's in advance Zitieren
photron Geschrieben June 23, 2014 at 10:46 Geschrieben June 23, 2014 at 10:46 Take a look at the interrupt example for the IO-4 Bricklet. You connect your button to pin 0 and a GND pin on the IO-4 Bricklet. Each time the button is pressed or released you get an interrupt callback. You can modify the cb_interrupt() function from the example like this (untested): def cb_interrupt(interrupt_mask, value_mask): # test if interrupt is from pin 0 if interrupt_mask & (1 << 0): # test if button is pressed or released if value_mask & (1 << 0): print "button released" else print "button pressed" if system_activ: system_activ = False print "surveillance is disabled" else: system_activ = True print "surveillance is enabled" Now your script can tell if the button was pressed or released. With this information you can then set your system_activ variable. Zitieren
ben_bienne Geschrieben June 23, 2014 at 16:27 Autor Geschrieben June 23, 2014 at 16:27 Thank you for the help! It work's! Here is the complete code #!/usr/bin/env python # -*- coding: utf-8 -*- HOST = "localhost" PORT = 4223 UID = "ksc" # Change to your UID es = "he6" # Change to your UID from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_motion_detector import MotionDetector from tinkerforge.bricklet_io4 import IO4 import time system_activ = True def cb_interrupt(interrupt_mask, value_mask): global system_activ # test if interrupt is from pin 0 if interrupt_mask & (1 << 0): # test if button is pressed or released if value_mask & (1 << 0): print "button released" else: print "button pressed" if system_activ: system_activ = False print ("surveillance is disabled ", +system_activ) else: system_activ = True print ("surveillance is enabled ", +system_activ) # Callback function for end of detection cycle def cb_detection_cycle_ended(): if not system_activ: return print('Detection Cycle Ended (next detection possible in ~3 seconds)') # Callback function for detected motion def cb_motion_detected(): if not system_activ: return print('Motion Detected') if __name__ == "__main__": ipcon = IPConnection() # Create IP connection md = MotionDetector(UID, ipcon) # Create device object io = IO4(es, 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 0 and pin 1 io.set_interrupt(1 << 0 ) # Register detected callback to function cb_motion_detected md.register_callback(md.CALLBACK_MOTION_DETECTED, cb_motion_detected) # Register detection cycle ended callback to function cb_detection_cycle_ended md.register_callback(md.CALLBACK_DETECTION_CYCLE_ENDED, cb_detection_cycle_ended) raw_input('Press key to exit\n') # Use input() in Python 3 ipcon.disconnect() 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.