在Python中选择while循环的连续输入

2024-06-09 12:40:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我用的是树莓派,用的是Python。 我想接收来自距离传感器的连续输入,并由距离值决定是否发送输出。在

我有一个输出函数gogo和一个sense函数sense,它更新距离值。在

我希望当距离低于20时输出开始,当距离达到阈值20时停止输出,但是我能看到的唯一解决方案是另一个循环。在

我的代码不工作,我认为有一个很好的解决方案,但我不太精通循环。在

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

distance = 40.0

TRIG = 4
ECHO = 18

GPIO.setup(TRIG,GPIO.OUT)
GPIO.setup(ECHO,GPIO.IN)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(24, GPIO.OUT)
GPIO.setup(25, GPIO.OUT)

def gogo(): 
    Motor1A = 23
    Motor1B = 24
    Motor1E = 25

    GPIO.setup(Motor1A,GPIO.OUT)
    GPIO.setup(Motor1B,GPIO.OUT)
    GPIO.setup(Motor1E,GPIO.OUT)

    print "Turning motor on"
    GPIO.output(Motor1A,GPIO.HIGH)
    GPIO.output(Motor1B,GPIO.LOW)
    GPIO.output(Motor1E,GPIO.HIGH)

def sense():
    GPIO.output(TRIG, True)
    time.sleep(0.00001)
    GPIO.output(TRIG, False)

    while GPIO.input(ECHO) == False:
        start = time.time()

    while GPIO.input(ECHO) == True:
        end = time.time()

    sig_time = end-start

#CM:
    distance = sig_time / 0.000058

#inches:
#distance = sig_time / 0.000148

    print('Distance: {} centimeters'.format(distance))

while distance > 20.0:
    print (distance)
    sense()
else:
    print (distance)
    gogo()
    sense()

GPIO.cleanup()

Tags: echo距离outputgpiotimesetupoutdistance
1条回答
网友
1楼 · 发布于 2024-06-09 12:40:42

问题是作用域;distance经常出现在40个主代码中。它只在sense()中更新

首先,让我们编辑sense以返回距离的值

def sense():
    GPIO.output(TRIG, True)
    time.sleep(0.00001)
    GPIO.output(TRIG, False)

    while GPIO.input(ECHO) == False:
        start = time.time()

    while GPIO.input(ECHO) == True:
        end = time.time()

    sig_time = end-start

#CM:
    distance = sig_time / 0.000058

#inches:
#distance = sig_time / 0.000148

    print('Distance: {} centimeters'.format(distance))
    return distance

你也应该创建一个关闭马达的功能

你需要定义距离,也让我们做一个永远运行的循环。现在,你的循环只运行到distance<;20

^{pr2}$

相关问题 更多 >