2015-08-30 1 views
1

Ниже приведен код, который я запускал на Intel Galileo Gen2. Мне просто интересно, почему, когда объект действительно приближается к ультразвуковому сенсору, программа останавливается и жалуется на то, что переменная sig «локальная переменная sig» ссылается перед назначением »?Galileo и ультразвуковая ошибка при расстоянии менее 4 см.

import mraa 
import time 

trig = mraa.Gpio(0) 
echo = mraa.Gpio(1) 

trig.dir(mraa.DIR_OUT) 
echo.dir(mraa.DIR_IN) 


def distance(measure='cm'): 
    trig.write(0) 
    time.sleep(0.2) 

    trig.write(1) 
    time.sleep(0.00001) 
    trig.write(0) 

    while echo.read() == 0: 
      nosig = time.time() 

    while echo.read() == 1: 
      sig = time.time() 

    # et = Elapsed Time 
    et = sig - nosig 

    if measure == 'cm': 
      distance = et * 17150 
    elif measure == 'in': 
      distance = et/0.000148 
    else: 
      print('improper choice of measurement!!') 
      distance = None 

    return distance 


while True: 
    print(distance('cm')) 

ответ

2

Ваша проблема в том, что шип, создаваемый вашим датчиком, слишком короткий, чтобы его заметили, так как частота дискретизации вашего while echo.read() ограничена.

Это никогда не определяет переменную sig.

Чтобы преодолеть это, определите sig = None при вводе функции, а затем проверьте, является ли это None - тогда вы знаете, что вы не можете использовать свои измерения.

Если вы хотите сэмплировать более высокую частоту, вам нужно использовать язык, который быстрее, чем Python, например. C++.

+0

Большое вам спасибо, что смысл :) – Jedani

+0

Если это ответит на ваш вопрос, отметьте его как таковой. Благодаря :) – deets

2

Проблема заключается в том:

while echo.read() == 0: 
     nosig = time.time() 

while echo.read() == 1: 
     sig = time.time() 

если первое условие выполнено и не вернулся к 1 к тому времени, следующая строка читается тогда сиг никогда не получит значение.

+0

Я согласен с тем, что Стив .. это данные ультразвукового датчика http://www.micropik.com/PDF/HCSR04.pdf Это говорит, что минимальное расстояние составляет 2 см !! – Jedani

+0

@Jedan см. Мой ответ - ваша частота выборки слишком низкая. – deets