首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有Raspberry pi 2b+的超声波传感器会产生编译错误

带有Raspberry pi 2b+的超声波传感器会产生编译错误
EN

Stack Overflow用户
提问于 2016-01-06 19:05:32
回答 2查看 862关注 0票数 0

我已经设置了3个HC- up 04超声波传感器,以连续运行与覆盆子皮。其中两个传感器工作得很好,而其中一个传感器非常不一致。我多次更换了电线、传感器和面包板,并更换了与传感器相关的三角和回声引脚。我已经调试了代码,并在下面的代码中隔离了问题传感器:

代码语言:javascript
复制
import RPi.GPIO as GPIO
import time

TRIG1 = 13
ECHO1 = 15

##TRIG2 = 22
##ECHO2 = 18
##
##TRIG3 = 37
##ECHO3 = 40

GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)

GPIO.setup(TRIG1, GPIO.OUT)
GPIO.output(TRIG1, 0)

##GPIO.setup(TRIG2, GPIO.OUT)
##GPIO.output(TRIG2, 0)
##
##GPIO.setup(TRIG3, GPIO.OUT)
##GPIO.output(TRIG3, 0)

GPIO.setup(ECHO1, GPIO.IN)
##GPIO.setup(ECHO2, GPIO.IN)
##GPIO.setup(ECHO3, GPIO.IN)

while True:
        time.sleep(0.1)

        GPIO.output(TRIG1, 1)
        time.sleep(0.00001)
        GPIO.output(TRIG1, 0)
        print("anything")
        while GPIO.input(ECHO1) == 0:
                print("Works")
                time.sleep(1)
                start1 = time.time()

        while GPIO.input(ECHO1) ==1:
                stop1 = time.time()
        print("sensor 1:")
        print (stop1-start1) * 17000

##        time.sleep(0.1)
##
##        GPIO.output(TRIG2, 1)
##        time.sleep(0.00001)
##        GPIO.output(TRIG2, 0)
##
##        while GPIO.input(ECHO2) == 0:
##                start2 = time.time()
##
##        while GPIO.input(ECHO2) == 1:
##                stop2 = time.time()
##        print("sensor 2:")
##        print (stop2-start2) * 17000
##
##        time.sleep(0.1)
##
##        GPIO.output(TRIG3, 1)
##        time.sleep(0.00001)
##        GPIO.output(TRIG3, 0)
##
##        while GPIO.input(ECHO3) == 0:
##                start3 = time.time()
##
##        while GPIO.input(ECHO3) == 1:
##                stop3 = time.time()
##        print("sensor 3:")
##        print (stop3-start3) * 17000

GPIO.cleanup()

读取“print (”任何“任何”)的行允许代码编译,但不需要进行距离读取,并将继续打印"Works“,这表示它在第一个while循环中连续运行。意外地,当删除“print(”任何“任何”)行时,错误:

代码语言:javascript
复制
print (stop1-start1) * 17000
NameError: name 'start1' is not defined

航站楼的指纹。上面注释掉的代码与用于正常工作的传感器的代码相同,当从当前未注释的代码中分离出来时,不会出现错误。如有任何意见或建议,将不胜感激。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-06 19:51:50

我认为您有一个计时问题,这会导致您的代码根据“小”时间变化而以不同的方式运行。

您的代码由于没有初始化start1而失败。

当代码中有延迟(打印“任何”)是一个重要的延迟时,while循环将运行并初始化start1。

当你没有延迟的时候,

代码语言:javascript
复制
GPIO.input(ECHO1)

将不等于零,while循环将不运行,您将得到错误。

我认为你应该初始化你的变量,你应该检查是否有你不知道的时间要求。

另外,请注意在raspberry pi上运行python,不会是一个实时系统,因此请注意实时限制,并小心编写计时敏感的代码。

票数 0
EN

Stack Overflow用户

发布于 2018-03-22 04:17:32

我想你有申报问题。首先您需要声明,然后声明全局。我换了6,7,40和44行。你看

代码语言:javascript
复制
import RPi.GPIO as GPIO
import time

TRIG1 = 13
ECHO1 = 15
start1=0.00
stop1=0.00
##TRIG2 = 22
##ECHO2 = 18
##
##TRIG3 = 37
##ECHO3 = 40

GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)

GPIO.setup(TRIG1, GPIO.OUT)
GPIO.output(TRIG1, 0)

##GPIO.setup(TRIG2, GPIO.OUT)
##GPIO.output(TRIG2, 0)
##
##GPIO.setup(TRIG3, GPIO.OUT)
##GPIO.output(TRIG3, 0)

GPIO.setup(ECHO1, GPIO.IN)
##GPIO.setup(ECHO2, GPIO.IN)
##GPIO.setup(ECHO3, GPIO.IN)

while True:
    time.sleep(0.1)

    GPIO.output(TRIG1, 1)
    time.sleep(0.00001)
    GPIO.output(TRIG1, 0)
    print("anything")
    while GPIO.input(ECHO1) == 0:
        print("Works")
        time.sleep(1)
        global start1
        start1 = time.time()

    while GPIO.input(ECHO1) == 1:
        global stop1
        stop1 = time.time()
    print("sensor 1:")
    print (stop1 - start1) * 17000

##        time.sleep(0.1)
##
##        GPIO.output(TRIG2, 1)
##        time.sleep(0.00001)
##        GPIO.output(TRIG2, 0)
##
##        while GPIO.input(ECHO2) == 0:
##                start2 = time.time()
##
##        while GPIO.input(ECHO2) == 1:
##                stop2 = time.time()
##        print("sensor 2:")
##        print (stop2-start2) * 17000
##
##        time.sleep(0.1)
##
##        GPIO.output(TRIG3, 1)
##        time.sleep(0.00001)
##        GPIO.output(TRIG3, 0)
##
##        while GPIO.input(ECHO3) == 0:
##                start3 = time.time()
##
##        while GPIO.input(ECHO3) == 1:
##                stop3 = time.time()
##        print("sensor 3:")
##        print (stop3-start3) * 17000

GPIO.cleanup()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34640777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档