#openmv利用超声波测距
import time,utime,pyb
from pyb import Pin
wave_echo_pin = Pin('P4', Pin.IN, Pin.PULL_NONE) #P4输入,等待IO口的高电平
wave_trig_pin = Pin('P5', Pin.OUT_PP, Pin.PULL_DOWN) #P5输出,触发trig
wave_distance = 0
tim_counter = 0
flag_wave = 0
#超声波启动,trig触发15us
def wave_start():
wave_trig_pin.value(1)
utime.sleep_us(15)
wave_trig_pin.value(0)
#配置定时器。定时器(1)用于摄像头。定时器(5)控制servo驱动,定时器(6)用于ADC/DAC读取/写入。
#period [0-0xffff] 用于定时器1、3、4、6-15。[0-0x3fffffff]用于定时器2和5
#定时器2-7和12-14的时钟源为84Hz(pyb.freq()[2] * 2),
#定时器1和8-11的时钟源为168Hz(pyb.freq()[3] * 2)。
#配置定时器,freq不是很懂。定时器2时钟源假设为84Mhz
tim =pyb.Timer(2, prescaler=420, period=0x3fffffff) #分频数,周期(arr=65535)。相当于freq=02Mhz
#超声波距离计算
def wave_distance_calculation():
#全局变量声明
global tim_counter
#频率f为 高电平时间t=计数值1/f
wave_distance = tim_counter5*0.017
#输出最终的测量距离(单位cm)
print('wave_distance',wave_distance)
#超声波数据处理
def wave_distance_process():
global flag_wave
if(flag_wave == 0):
wave_start()
if(flag_wave == 2):
wave_distance_calculation()
flag_wave = 0
#外部中断配置
def callback(line):
global flag_wave,tim_counter
#上升沿触发处理
if(wave_echo_pin.value()):
tim.init(prescaler=420, period=0x3fffffff) #启用定时器
flag_wave = 1 #触发标志
#下降沿
else:
tim.deinit() #停用定时器,并禁用定时器外围设备
tim_counter = tim.counter() #计数器清0
tim.counter(0)
extint.disable() #中断禁止
flag_wave = 2 #求距离
#中断配置,配置IO引脚
extint = pyb.ExtInt(wave_echo_pin, pyb.ExtInt.IRQ_RISING_FALLING, pyb.Pin.PULL_DOWN, callback)
while(True):
wave_distance_process()
time.sleep(100)
终端没有输出是怎么回事