Esempio n. 1
0
def init():
    print("初始化開始")
    init_hz = []  # 欲存放初始頻率的空 list
    motor = PWM(Pin(25), duty=0)  # 建立運轉馬達的 PWM 物件
    for i in range(10):  # 執行代表數字'0'~'9'的速度
        motor.duty(400 + 50 * i)
        time.sleep(1)  # 穩定轉速

        fft = FFT(64, 4000, 34)  # 採樣數 64、採樣頻率4000、指定腳位34
        peak = fft.major_peak()  # 判斷該數字對應速度的聲音頻率為何

        print(peak)  # 將初始頻率顯示出來, 判斷是否初始化成功
        init_hz.append(peak)  # 將初始頻率加入 list 內

        motor.duty(0)  # 暫停運轉
        time.sleep(1)  # 穩定停止
    motor.deinit()  # 停止運轉馬達的 PWM 功能

    threshold = []  # 欲存放閾值的空 list
    for j in range(9):
        conti_ave = (init_hz[j] + init_hz[j + 1]) / 2  # 相鄰兩項相加的平均
        threshold.append(conti_ave)  # 加入閾值串列內

    threshold.append(init_hz[9] + 100)  # 數字'9'的頻率 + 100
    print("初始化結束")
    return threshold  # 回傳閾值陣列
Esempio n. 2
0
def run_judge(ascii_unm, threshold):  # 主程式中重複執行的部分
    laser = PWM(Pin(25), freq=0)
    laser.freq(10 * ascii_unm)  # ascii碼 個別數字運轉
    time.sleep(0.1)
    fft = FFT(64, 4000, 34)  # 採樣數 128、採樣頻率4000、指定腳位36
    peak = fft.major_peak()  # 判斷該數字對應速度的聲音頻率為何
    laser.deinit()
    for i in range(127):
        if peak < threshold[i]:  # 判斷落在哪一閾值內, 對應之索引便是該數字
            print(i, end='')  # 將判斷的數字印出
            break  # 停止迴圈
Esempio n. 3
0
def run_judge(ascii_unm, threshold):  # 主程式中重複執行的部分
    motor = PWM(Pin(25), duty=0)
    motor.duty(400 + 50 * ascii_unm)  # ascii碼 個別數字運轉
    time.sleep(1)  # 穩定轉速
    fft = FFT(64, 4000, 34)  # 採樣數 128、採樣頻率4000、指定腳位34
    peak = fft.major_peak()  # 判斷該數字對應速度的聲音頻率為何
    motor.duty(0)  # 停止運轉
    motor.deinit()
    time.sleep(1)  # 穩定停止

    for i in range(10):
        if peak < threshold[i]:  # 判斷落在哪一閾值內, 對應之索引便是該數字
            print(i, end='')  # 將判斷的數字印出
            break  # 停止迴圈
Esempio n. 4
0
def init():
    print("初始化開始")
    init_hz = []  # 欲存放初始頻率的空 list
    laser = PWM(Pin(25), freq=0)  # 建立 pwm 物件
    for i in range(127):  # 執行代表 ASCII 碼 0 ~ 126 的頻率
        laser.freq(10 * i)
        time.sleep(0.1)  # 設定一點延遲時間, 防止錯誤

        fft = FFT(64, 4000, 34)  # 採樣數 64、採樣頻率4000、指定腳位34
        peak = fft.major_peak()  # 判斷該數字對應速度的聲音頻率為何

        print(peak)  # 將初始頻率顯示出來, 判斷是否初始化成功
        init_hz.append(peak)  # 將初始頻率加入 list 內
    laser.deinit()

    threshold = []  # 欲存放閾值的空 list
    for j in range(126):
        loss = (init_hz[j] + init_hz[j + 1]) / 2  # 相鄰兩項相加的平均
        threshold.append(loss)

    threshold.append(init_hz[126] + 100)  # ASCII碼 126 初始頻率 +100
    print("初始化結束")
    return threshold
Esempio n. 5
0
from flag_fft import FFT
import time

while True:
    fft = FFT(64, 4000, 34)  # 建立 FFT 物件
    peak = fft.major_peak()  # 判斷主頻率
    print(peak)
    time.sleep(0.1)  # 等候 0.1 秒
Esempio n. 6
0
from machine import Pin
from flag_pwm import PWM
from flag_fft import FFT
import time

while True:
    motor = PWM(Pin(25),duty=0)  # 建立運轉馬達的 PWM 物件
    
    speed = int(input("指定 duty 為:"))
    
    print("開始運轉")
    motor.duty(speed) # 運轉指定 duty 值的速度
    time.sleep(1) # 持續 1 秒
    
    fft = FFT(64,4000,34) 
    peak = fft.major_peak() #輸出整體主頻率
    print(peak)
    
    motor.deinit() # 停止運轉馬達的 PWM 功能
    print("結束運轉, 待馬達完全停止再繼續輸入")