Датчик HCSR04 постоянно выдает ошибку тайм-аута. Хотите, чтобы цикл выполнялся без тайм-аута

У меня есть код, который в настоящее время работает на pyboard и используется с моторным щитом adafruit Motorshield v2.3. Я знаю, что время ожидания большинства ультразвуковых датчиков истекает после того, как они не обнаруживают окружение в течение длительного времени. Я хочу, чтобы мой код постоянно искал окружение, а не тайм-аут. Робот предназначен для движения по большой территории, пока не достигнет окружения и не перенаправит. Ниже мой код прикреплен. (Игнорируйте комментарии в коде. Например, переключатели. Они использовались, когда я еще тестировал)

Спасибо!!

i2c = machine.I2C(scl=machine.Pin('Y9'), sda=machine.Pin('Y10'))
motors = motor.DCMotors(i2c)
MOTOR1 = 2
MOTOR2 = 3
#Initiate Trigger and Echo Pin from Ultrasonic sensor
TRIGGER_PIN =pyb.Pin.board.X9
ECHO_PIN = pyb.Pin.board.X10
#Initiate Communication from Sonar sensor
sensor = Ultrasonic (TRIGGER_PIN, ECHO_PIN)
#Create minimum distance For Ultrasonic sensor
min_distance = sensor.distance_in_cm()
print("min_distance= ",min_distance)
#button = pyb.switch()
#def autonomy()
#no_problem = True
try:
    while (True):
    #if (button()):
        min_distance = sensor.distance_in_cm()
        #sensor_front = sensor.distance_in_cm(15)
        if min_distance >= 70:
            print(min_distance)
            motors.speed(MOTOR1, -3500)
            motors.speed(MOTOR2, -3500)
            # motors.speed(MOTOR1, 3500)
            # motors.speed(MOTOR2,-3500)

            #if something is in the way
        else:
            print(min_distance)
            motors.speed(MOTOR1, 0)
            motors.speed(MOTOR2, 0)
            time.sleep_us(10)
            #Turn around
            print("Do the pivot shuffle.")

            motors.speed(MOTOR1, 3500)
            motors.speed(MOTOR2, -3500)
            time.sleep_us(10)
        print(min_distance)
        time.sleep_us(10)

except KeyboardInterrupt:
    pass

person Kyle Everett Shapen    schedule 03.04.2019    source источник
comment
Каков твой вопрос?   -  person nekomatic    schedule 03.04.2019
comment
Как сделать так, чтобы не было тайм-аута, потому что мне нужно, чтобы он проехал около 10-15 метров, но он истекает, прежде чем он сможет обнаружить стену   -  person Kyle Everett Shapen    schedule 03.04.2019


Ответы (1)


Если вы получаете время, расстояние, вероятно, выше, чем может измерить датчик. Вы можете прочитать в библиотеке ультразвука, которую вы используете: Тайм-аут по умолчанию немного больше, чем максимальное расстояние HC-SR04 (400 см).

Источник: https://github.com/skgsergio/MicropythonLibs/blob/master/Ultrasonic/ultrasonic.py

person Shark    schedule 03.04.2019
comment
Это то, что я предполагал. Как, по-вашему, я могу заставить свой код работать непрерывно без тайм-аута? Просто поместить цикл while после моего кода, чтобы повторить себя? - person Kyle Everett Shapen; 03.04.2019
comment
Просто относитесь к тайм-ауту так, как будто расстояние больше 70. Посмотрите, что функция возвращает как тайм-аут, и используйте это в if. - person Shark; 04.04.2019