1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
| import RPi.GPIO as GPIO
import time, sys
from subprocess import Popen
import subprocess as sp
import tkinter as tk
player = False
distance = 400
# Videos definitions
movie1 = ('/home/pi/Videos/test1.mp4')
movie2 = ('/home/pi/Videos/test2.mp4')
# Pin definitions
trigger_pin_left = 8
echo_pin_left = 7
trigger_pin_right = 18
echo_pin_right = 23
#Initialise the GPIO pins
GPIO.setmode(GPIO.BCM)
GPIO.setup(trigger_pin_left, GPIO.OUT)
GPIO.setup(echo_pin_left, GPIO.IN)
GPIO.setup(trigger_pin_right, GPIO.OUT)
GPIO.setup(echo_pin_right, GPIO.IN)
# These three functions encapsulate SR-04 range finder use
# Send a trigger pulse, using the pin supplied as a parameter
# The pulse has a duration of 100 microseconds
def send_trigger_pulse(pin):
GPIO.output(pin, True)
time.sleep(0.0001)
GPIO.output(pin, False)
# Wait for the echo pin (supplied as the first parameter) to
# change to high or low as specified in the value parameter
# The timeout parameter prevents the function from hanging, if
# for any reason this doesn't happen
def wait_for_echo(pin, value, timeout):
count = timeout
while GPIO.input(pin) != value and count > 0:
count -= 1
# Measure the distance in cm, using a rangefinder attached
# to the two pins specified as parameters.
def get_distance(trigger_pin, echo_pin):
send_trigger_pulse(trigger_pin)
# Wait for the echo pin to become True indicating that
# the pulse of ultrasound has finished sending.
wait_for_echo(echo_pin, True, 10000)
# make a note of the time
start = time.time()
# Wait for the echo to become False indicating that an
# obstacle has been detected
wait_for_echo(echo_pin, False, 10000)
# See how long it took
finish = time.time()
pulse_len = finish - start
# Calculate the dsatnce using the speed of sound
distance_cm = pulse_len / 0.000058
return (int(distance_cm))
def video_lance():
# Lancemment des videos en fonction de la distance
omxc = Popen(['omxplayer', '-b', movie1])
player = True
# Measure the distances from both rangefinders
def mesure_distance():
left_distance = get_distance(trigger_pin_left, echo_pin_left)
right_distance = get_distance(trigger_pin_right, echo_pin_right)
if left_distance < right_distance:
distance = left_distance
if right_distance < left_distance:
distance = right_distance
# Fonction pour le contrôle au clavier
def key_in(event):
##shows key or tk code for the key
if event.keysym == 'Escape':
# set GPIO pins to be inputs
GPIO.cleanup()
# Sortir du programme
sys.exit()
root = tk.Tk()
ent=tk.Entry(root)
ent.bind_all('<Key>', key_in)
ent.focus_set()
root.mainloop()
while True:
if player==False:
mesure_distance()
if distance < 30:
video_lance()
player==True |
Partager