之前看到的一份帖子,里面的程式運行時有bug,沒有得到解決,有大神能解決嗎??
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_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
#配置定時器
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
#中斷配置
Extin=pyb.ExtInt(wave_echo_pin, pyb.ExtInt.IRQ_RISING_FALLING, pyb.Pin.PULL_DOWN, callback)
while(True):
wave_distance_process()
time.sleep(100)
uj5u.com熱心網友回復:
更改后親測可用,因為源文本并沒有再次啟動中斷所以只能輸出一次但還是有一個問題,openmv不能輸出5v電壓,所以超聲波模塊的供電還是需要飛控板。
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(True)
utime.sleep_us(20)
wave_trig_pin.value(0)
#超聲波距離計算
def wave_distance_calculation():
#全域變數宣告
global tim_counter
#頻率f為0.2MHZ 高電平時間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()
#print("2")
flag_wave = 0
extint.enable()
#配置定時器
tim =pyb.Timer(4, 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()
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)
uj5u.com熱心網友回復:
記住記住!供電要5v,否則上述的程式,還是沒有任何的顯示!!!!!!!接地也需要共地的!轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/236212.html
