-
Notifications
You must be signed in to change notification settings - Fork 0
/
distance.py
90 lines (56 loc) · 1.93 KB
/
distance.py
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
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import RPi.GPIO as GPIO
# Which GPIO's are used [0]=BCM Port Number [1]=BCM Name [2]=Use [3]=Pin
# ----------------------------------------------------------------------
arrgpio = [(23,"GPIO0","Echo",16),(24,"GPIO7","Trig",18)]
# Set GPIO Channels
# -----------------
GPIO.setmode(GPIO.BCM)
GPIO.setup(arrgpio[0][0], GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(arrgpio[1][0], GPIO.OUT)
GPIO.output(arrgpio[1][0], False)
# A couple of variables
# ---------------------
EXIT = 0 # Infinite loop
decpulsetrigger = 0.0001 # Trigger duration
inttimeout = 2100 # Number of loop iterations before timeout called
# Wait for 2 seconds to allow the ultrasonics to settle (probably not needed)
# ---------------------------------------------------------------------------
print "Waiting for 2 seconds....."
time.sleep(2)
# Go
# --
print "Running...."
# Never ending loop
# -----------------
while EXIT == 0:
# Trigger high for 0.0001s then low
GPIO.output(arrgpio[1][0], True)
time.sleep(decpulsetrigger)
GPIO.output(arrgpio[1][0], False)
# Wait for echo to go high (or timeout)
intcountdown = inttimeout
while (GPIO.input(arrgpio[0][0]) == 0 and intcountdown > 0):
intcountdown = intcountdown - 1
# If echo is high
if intcountdown > 0:
# Start timer and init timeout countdown
echostart = time.time()
intcountdown = inttimeout
# Wait for echo to go low (or timeout)
while (GPIO.input(arrgpio[0][0]) == 1 and intcountdown > 0):
intcountdown = intcountdown - 1
# Stop timer
echoend = time.time()
# Echo duration
echoduration = echoend - echostart
# Display distance
if intcountdown > 0:
intdistance = (echoduration*1000000)/58
print "Distance = " + str(intdistance) + "cm"
else:
print "Distance - timeout"
# Wait at least .01s before re trig (or in this case .1s)
time.sleep(.1)