• 免费好用的星瞳AI云服务上线!简单标注,云端训练,支持OpenMV H7和OpenMV H7 Plus。可以替代edge impulse。 https://forum.singtown.com/topic/9519
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 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论坛找了一下,发现早也已经有前辈遇到这个问题了,但是帖子的问题都一年快过去了官方的办法还没提供出来,说是因为中断冲突,但是我在官方教程里也没有找到类似中断等级设置的东西

      这是那个帖子的链接

      0_1566360733023_4e6acf3a-409a-4f78-9f06-9e8045e151e7-image.png

      另外我还发现,当我的超声波代码运行成功后,我没有把代码下载进去openmv,然后我运行其他关于用到摄像头的代码比如helloworld时,竟然也提示pix format错误,为什么?这里没有使用到其他外部中断了啊,,

      这时候我需要把openmv的线拔了重新插,helloworld就能运行了,然后我再去运行超声波的,也行,再回头运行helloworld,就不行了~~~

      真的想不明白,请求大神指教,谢谢



    • 因为超声波的中断很麻烦,所以我做了ToF测距。

      https://singtown.com/product/50448/openmv-distance-shield/



    • 这个代码测距成功了



    • @fmcqopenmv连接超声波模块,提示pix format错误 中说:

      mport 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)

      想问一下,这个代码最后是怎么实现超声波测距的吗