UnboundLocalError — Ультразвуковой датчик (HC-SR04) — Raspberry Pi

#python #raspberry-pi #sensors

Вопрос:

Я использую два датчика. Код работает для одного, но не для другого.

 import RPi.GPIO as GPIO            
import time                        
GPIO.setmode(GPIO.BOARD)                
GPIO.setwarnings(False)

TRIG = 8                                 
ECHO = 10
GPIO.setup(TRIG,GPIO.OUT)                 
GPIO.setup(ECHO,GPIO.IN)

print ("Distance measurement in progress")
GPIO.output(TRIG, False)                
print ("Waitng For Sensor To Settle")
time.sleep(1)
    
def dist ():
    while True:
        
        time.sleep(0.1)
        
        GPIO.output(TRIG, True)                 
        time.sleep(0.00001)                     
        GPIO.output(TRIG, False)                 

        while GPIO.input(ECHO)==0:               
            pulse_start = time.time()             

        while GPIO.input(ECHO)==1:               
            pulse_end = time.time()                

        pulse_duration = pulse_end - pulse_start 
        distance = (pulse_duration * 36320) / 2        
        distance = round(distance, 2)
          
        return distance

while True:
    print(dist())
 

здесь:ошибка

Я попробовал «глобальный», но на этот раз выдал мне «Ошибку имени». Пожалуйста, дайте мне другое решение.

Ладно, ребята, у меня для вас хорошие новости. (Собственное решение)

-Эти датчики работают с напряжением 3,3 В, поэтому я подключил два из них к контакту 3,3 В на Raspberry. Потому что не хочу использовать много диет на макете.

-Я попытался подключить один из них к контакту 5 В, а другой-к контакту 3,3 В. Это работает таким образом.(возможно, это поможет тем, у кого такая же проблема)

-Но все равно не понимаю, почему. Итак, есть ли какие-либо ограничения для использования контактов 3,3 В ?

Комментарии:

1. Этот код выдает вам ошибку? Это произойдет, если второй while цикл никогда не будет выполнен, но это маловероятно, если вы запустите код точно так, как описано выше.

2. Если GPIO.inpu(ECHO) не возвращается 1 (по какой-либо причине), то pulse_end никогда не назначается. Добавьте a print('GPIO is 1') ко второму while циклу, и мы увидим…

3. Я попробовал твой путь. Да, он никогда не выходит из первого цикла. @Пифократ