我正在做一个带有两个超声波传感器的树莓派项目。但是现在我对python脚本有了一个问题。最后的print()函数总是告诉我0.0 23的距离,即使我将手悬停在传感器上,如果我拔下引脚23上的传感器,引脚24上的另一个传感器在正确的距离下工作正常
#Bibliotheken einbinden
import RPi.GPIO as GPIO
import time
from pykeyboard import PyKeyboard
#GPIO Modus (BOARD / BCM)
GPIO.setmode(GPIO.BCM)
#GPIO Pins zuweisen
GPIO_TRIGGER = 18
GPIO_ECHO_RECHTS = 24
GPIO_ECHO_LINKS = 23
#Richtung der GPIO-Pins festlegen (IN / OUT)
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
GPIO.setup(GPIO_ECHO_RECHTS, GPIO.IN)
GPIO.setup(GPIO_ECHO_LINKS, GPIO.IN)
#Instanz von PyKeyBoard erstellen
k = PyKeyboard()
#Testausagbe
print("Script startet")
def distanz():
# setze Trigger auf HIGH
GPIO.output(GPIO_TRIGGER, True)
# setze Trigger nach 0.01ms auf LOW
time.sleep(0.00001)
GPIO.output(GPIO_TRIGGER, False)
StartZeit_RECHTS = time.time()
StopZeit_RECHTS = time.time()
StartZeit_LINKS = time.time()
StopZeit_LINKS = time.time()
# speichere Startzeit des rechten sensors
while GPIO.input(GPIO_ECHO_RECHTS) == 0 and GPIO.input(GPIO_ECHO_LINKS) == 0:
StartZeit_RECHTS = time.time()
StartZeit_LINKS = time.time()
# speichere Ankunftszeit des rechten sensors
while GPIO.input(GPIO_ECHO_RECHTS) == 1 or GPIO.input(GPIO_ECHO_LINKS) == 1:
StopZeit_RECHTS = time.time()
StopZeit_LINKS = time.time()
# Zeit Differenz zwischen Start und Ankunft des rechten sensors
TimeElapsed_RECHTS = StopZeit_RECHTS - StartZeit_RECHTS
# mit der Schallgeschwindigkeit (34300 cm/s) multiplizieren
# und durch 2 teilen, da hin und zurueck
distanz_RECHTS = (TimeElapsed_RECHTS * 34300) / 2
# Zeit Differenz zwischen Start und Ankunft des linken sensors
TimeElapsed_LINKS = StopZeit_LINKS - StartZeit_LINKS
# mit der Schallgeschwindigkeit (34300 cm/s) multiplizieren
# und durch 2 teilen, da hin und zurueck
distanz_LINKS = (TimeElapsed_LINKS * 34300) / 2
if distanz_RECHTS < 12.0 and distanz_RECHTS > 0.0:
#Kommando um ein Tab weiter zu springen
k.press_key(k.control_l_key)
k.tap_key(k.tab_key)
k.release_key(k.control_l_key)
return distanz_RECHTS
elif distanz_LINKS < 12.0 and distanz_LINKS > 0.0:
#Kommando um ein Tab zurueck zu springen
k.press_key(k.control_l_key)
k.press_key(k.shift_l_key)
k.tap_key(k.tab_key)
k.release_key(k.control_l_key)
k.release_key(k.shift_l_key)
return distanz_LINKS
else:
return 0.0
if __name__ == '__main__':
try:
while True:
abstand = distanz()
print ("Gemessene Entfernung = %.1f cm" % abstand)
time.sleep(1)
# Beim Abbruch durch STRG+C resetten
except KeyboardInterrupt:
print("Messung vom User gestoppt")
GPIO.cleanup()
这就是我正在编写的脚本。我知道while循环有问题,我已经尝试了很多方法,但都不起作用。两个传感器都应该只检测到它们前面有多远的东西。如果你不理解代码中的某些东西,那并不重要,这只是德语。
希望有人能帮我
发布于 2016-12-19 19:08:38
我认为你应该拆分第二个while循环。拆分两个while循环是很好的。首先,while循环在两个传感器都发送低信号时作出响应。但是,第二个while循环一旦在任何传感器中接收到高信号,就会立即执行。它不会等待第二个传感器做出响应。
因此,将while循环拆分为四个while循环,两个用于发送信号,两个用于接收信号。
https://stackoverflow.com/questions/36105183
复制相似问题