2016-01-06 103 views
0

我已經設置了3個HC-SR04超聲波傳感器,可以連續運行樹莓派。其中兩個傳感器完美工作,而其中一個非常不穩定。我多次更換電線,傳感器和麪包板,並更改與傳感器相關的觸發和回顯引腳。我已經調試代碼,並隔離在下面的代碼中的問題傳感器:帶有樹莓派2b +的超聲波傳感器造成編譯錯誤

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() 

,上面寫着「打印(」東西「)」行允許代碼編譯,但拿不出距離讀數,並會繼續打印「作品」,表示它在第一個while循環中連續運行。意外地當「打印(」任何「)」行被刪除時,錯誤:

print (stop1-start1) * 17000 
NameError: name 'start1' is not defined 

打印到終端。上面註釋的代碼與功能傳感器的代碼完全相同,但與當前未註釋的代碼隔離開來的代碼沒有錯誤。任何想法或建議將不勝感激。

謝謝。

+0

在while循環外定義stop1和start1 – Gusman

回答

0

我認爲你有一個計時問題,這會導致你的代碼根據「小」時序變化而以不同的方式運行。

由於未初始化start1,您的代碼失敗。

當你在你的代碼(打印「任何東西」)是一個顯著延遲的延遲,while循環將運行並初始化啓動1

當你沒有延遲,

GPIO.input(ECHO1) 

將不會等於零,while循環將不會運行,並且會出現錯誤。

我認爲你應該初始化你的變量,你應該檢查是否有時間要求,你不知道。

同時請注意,在樹莓派運行蟒蛇,會不會是一個實時系統,所以請注意實時約束,並精心打造是定時敏感的代碼。

+0

非常感謝您的幫助,解決了這個問題。 –