星瞳实验室APP,快速收到回复
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 为什么我这段代码没有输出距离?



    • #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_counter
      5*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)

      终端没有输出是怎么回事



    • 不知道,程序不是我写的。没有超声波的教程。