2016-03-19 126 views
3

我正在與兩個超聲波傳感器的Raspberry Pi項目。但是現在我遇到了python腳本的問題。在最後的print()函數總是告訴我0.0釐米距離,即使我用我的手懸停在傳感器 如果我拔掉上23腳的其他傳感器的傳感器上的引腳24個工作正確與正確的距離樹莓派上的兩個超聲波傳感器與Python腳本

#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循環有什麼問題,並且我已經嘗試了很多東西,但都沒有成功。 兩個傳感器都應該檢測到它們前面有多遠。 如果你不明白代碼中的內容,那不重要,它只是德語。

希望有人能幫助我

回答

0

我認爲你應該拆分第二個while循環。它很好地分割兩個while循環。 當兩個傳感器發送低信號時,第一個while循環響應。 但是,第二個while循環只要在任何傳感器中收到高信號就立即執行。它不會等待第二個傳感器作出響應。

所以將while循環分成四個while循環兩個用於發送信號和兩個用於接收信號。