Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python脚本在Raspberry Pi上安装两个超声波传感器_Python_Raspberry Pi_Arduino Ultra Sonic - Fatal编程技术网

用Python脚本在Raspberry Pi上安装两个超声波传感器

用Python脚本在Raspberry Pi上安装两个超声波传感器,python,raspberry-pi,arduino-ultra-sonic,Python,Raspberry Pi,Arduino Ultra Sonic,我正在做一个有两个超声波传感器的树莓Pi项目。但是现在我对python脚本有一个问题。最后的print()函数总是告诉我0.0cm的距离,即使我将手悬停在传感器上 如果拔下针脚23上的传感器,针脚24上的另一个传感器将以正确的距离正常工作 #Bibliotheken einbinden import RPi.GPIO as GPIO import time from pykeyboard import PyKeyboard #GPIO Modus (BOARD / BCM) GPIO.setm

我正在做一个有两个超声波传感器的树莓Pi项目。但是现在我对python脚本有一个问题。最后的print()函数总是告诉我0.0cm的距离,即使我将手悬停在传感器上 如果拔下针脚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()
#艾因宾登图书馆
将RPi.GPIO导入为GPIO
导入时间
从pykeyboard导入pykeyboard
#GPIO模块(板/车身控制模块)
GPIO.setmode(GPIO.BCM)
#GPIO引脚zuweisen
GPIO_触发器=18
GPIO_ECHO_RECHTS=24
GPIO_回声_链路=23
#Richtung der GPIO Pins festlegen(输入/输出)
GPIO.setup(GPIO_触发器,GPIO.OUT)
GPIO.setup(GPIO\u ECHO\u RECHTS,GPIO.IN)
GPIO.setup(GPIO\u ECHO\u链接,GPIO.IN)
#伊内斯·冯·佩尔斯泰伦
k=PyKeyboard()
#特斯塔萨格贝
打印(“脚本开始”)
def distanz():
#设置触发auf高
输出(GPIO_触发器,真)
#设置触发器nach 0.01ms auf低
睡眠时间(0.00001)
GPIO.output(GPIO_触发器,False)
StartZeit_RECHTS=time.time()
StopZeit_RECHTS=time.time()
StartZeit_LINKS=time.time()
StopZeit_LINKS=time.time()
#斯皮尔谢尔·斯塔泽特传感器
而GPIO.input(GPIO_ECHO_RECHTS)=0和GPIO.input(GPIO_ECHO_LINKS)==0:
StartZeit_RECHTS=time.time()
StartZeit_LINKS=time.time()
#传感器制造商
而GPIO.input(GPIO_ECHO_RECHTS)==1或GPIO.input(GPIO_ECHO_LINKS)==1:
StopZeit_RECHTS=time.time()
StopZeit_LINKS=time.time()
#安装不同的zwischen启动和传感器
经过的时间=停止时间-开始时间
#麻省理工学院Schallgeschwindigkeit(34300厘米/秒)倍增器
#和德尔奇2泰伦、大欣和祖鲁克
distanz_RECHTS=(经过的时间*34300)/2
#Zeit Differencez zwischen启动和关闭linken传感器
timeappeased\u LINKS=StopZeit\u LINKS-StartZeit\u LINKS
#麻省理工学院Schallgeschwindigkeit(34300厘米/秒)倍增器
#和德尔奇2泰伦、大欣和祖鲁克
distanz_LINKS=(timeappeased_LINKS*34300)/2
如果distanz_RECHTS<12.0且distanz_RECHTS>0.0:
#这是我的梦想
k、 按键(k控制键)
k、 轻触键(k.tab键)
k、 释放键(k.控制键)
返回区
elif distanz_链接<12.0和distanz_链接>0.0:
#这是我的梦想
k、 按键(k控制键)
k、 按键(k.shift\U l\U键)
k、 轻触键(k.tab键)
k、 释放键(k.控制键)
k、 释放按钮(k.shift按钮)
返回distanz_链接
其他:
返回0.0
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
尝试:
尽管如此:
Abstrand=distanz()
打印(“Gemessene Entfernung=%.1f厘米”%Abstrand)
时间。睡眠(1)
#Beim Abbruch durch STRG+C重置
除键盘中断外:
打印(“Messung vom用户gestoppt”)
GPIO.cleanup()
这是我正在编程的脚本。我知道while循环有问题,我已经尝试了很多方法,但都没有效果。 两个传感器都应该检测前方有多远。 如果您不理解代码中的某些内容,这并不重要,它只是德语


希望有人能帮我

我想你应该把第二个while循环分开。拆分两个while循环很好。 当两个传感器都发送低信号时,第一个while环路响应。 但第二个while循环在任何传感器中接收到高信号后立即执行。它不会等待第二个传感器响应

因此,将while循环分成四个while循环,其中两个用于发送信号,两个用于接收信号