openmv连接超声波模块,提示pix format错误
-
新建一个文本,单独使用了超声波模块,运行成功,能够测出距离,但是把代码加到关于用到摄像头的代码里时就出问题,总是提示pix format错误。
# code block #openmv利用超声波测距 import time,utime,pyb from pyb import Pin wave_echo_pin = Pin('P7', Pin.IN, Pin.PULL_NONE) wave_trig_pin = Pin('P8', Pin.OUT_PP, Pin.PULL_DOWN) wave_distance = 0 tim_counter = 0 flag_wave = 0 #超声波启动 def wave_start(): wave_trig_pin.value(1) utime.sleep_us(15) wave_trig_pin.value(0) #超声波距离计算 def wave_distance_calculation(): #全局变量声明 global tim_counter #频率f为0.2MHZ 高电平时间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 #配置定时器 tim =pyb.Timer(1, prescaler=720, period=65535) #相当于freq=0.2M #外部中断配置 def callback(line): global flag_wave,tim_counter #上升沿触发处理 if(wave_echo_pin.value()): tim.init(prescaler=720, period=65535) flag_wave = 1 #下降沿 else: tim.deinit() tim_counter = tim.counter() tim.counter(0) extint.disable() flag_wave = 2 #中断配置 extint = pyb.ExtInt(wave_echo_pin, pyb.ExtInt.IRQ_RISING_FALLING, pyb.Pin.PULL_DOWN, callback) while(True): wave_distance_process() time.sleep(100) print('wave_distance',wave_distance)
我在openmv论坛找了一下,发现早也已经有前辈遇到这个问题了,但是帖子的问题都一年快过去了官方的办法还没提供出来,说是因为中断冲突,但是我在官方教程里也没有找到类似中断等级设置的东西
另外我还发现,当我的超声波代码运行成功后,我没有把代码下载进去openmv,然后我运行其他关于用到摄像头的代码比如helloworld时,竟然也提示pix format错误,为什么?这里没有使用到其他外部中断了啊,,
这时候我需要把openmv的线拔了重新插,helloworld就能运行了,然后我再去运行超声波的,也行,再回头运行helloworld,就不行了~~~
真的想不明白,请求大神指教,谢谢
-
因为超声波的中断很麻烦,所以我做了ToF测距。
-
这个代码测距成功了
-
@fmcq 在 openmv连接超声波模块,提示pix format错误 中说:
mport time,utime,pyb
from pyb import Pinwave_echo_pin = Pin('P7', Pin.IN, Pin.PULL_NONE)
wave_trig_pin = Pin('P8', Pin.OUT_PP, Pin.PULL_DOWN)wave_distance = 0
tim_counter = 0
flag_wave = 0#超声波启动
def wave_start():
wave_trig_pin.value(1)
utime.sleep_us(15)
wave_trig_pin.value(0)#超声波距离计算
def wave_distance_calculation():
#全局变量声明
global tim_counter
#频率f为0.2MHZ 高电平时间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#配置定时器
tim =pyb.Timer(1, prescaler=720, period=65535) #相当于freq=0.2M#外部中断配置
def callback(line):
global flag_wave,tim_counter
#上升沿触发处理
if(wave_echo_pin.value()):
tim.init(prescaler=720, period=65535)
flag_wave = 1
#下降沿
else:
tim.deinit()
tim_counter = tim.counter()
tim.counter(0)
extint.disable()
flag_wave = 2
#中断配置
extint = pyb.ExtInt(wave_echo_pin, pyb.ExtInt.IRQ_RISING_FALLING, pyb.Pin.PULL_DOWN, callback)while(True):
wave_distance_process()
time.sleep(100)
print('wave_distance',wave_distance)想问一下,这个代码最后是怎么实现超声波测距的吗