ラズパイPico のPWMを使って、音階を奏でましょう。
準備:スピーカーをGNDとGPIO15に接続
プログラム
from machine import Pin, PWM
import time
sp1 = PWM(Pin(15, Pin.OUT)) # スピーカーをGPIO15に接続
# ラの音を出す(440Hz)
sp1.duty_u16(0x8000)# PWMのDutyを50%にして音を出す。Dutyは0~0xFFFFつまり65535までの間の値で設定
sp1.freq(440) # 440Hz
time.sleep(1) # 0.5秒待つ
sp1.duty_u16(0) # 音を消す
time.sleep(1) # 0.5秒待つ
# 2オクターブ(220Hz~880Hz)の音を出す
for i in range(25):
f = 220*2**(i/12) # 440Hzの1オクターブ下は220Hz
print(f)
sp1.duty_u16(0x8000)# PWMのDutyを50%にして音を出す。Dutyは0~0xFFFFつまり65535までの間の値で設定
sp1.freq(int(f)) # 整数が必要
time.sleep(0.1) # 0.1秒待つ
sp1.duty_u16(0) # 音を消す
準備:スイッチをGNDとGPIO12に接続
プログラム
from machine import Pin, PWM
import time
sp1 = PWM(Pin(15, Pin.OUT)) # GPIO15をスピーカー出力
sw1 = Pin(12, Pin.IN, Pin.PULL_UP) # GPIO12をスイッチ入力(プルアップ)
# スイッチが押されたら音を出す。スイッチをはなしたら音を止める。
def irq01( pin ):
if pin.value()==0: # スイッチが押されたら
print("SW:ON")
sp1.freq(440) # 440Hz
sp1.duty_u16(0x8000) # 音を出す
else:
print("SW:OFF")
sp1.duty_u16(0) # 音を止める
sw1.irq(irq01) # スイッチに割り込みがあったら、irq01 を呼び出す
sp1.freq(440) # 440Hz
sp1.duty_u16(0x8000) # 音を出す
time.sleep(0.5) # 0.5秒待つ
sp1.duty_u16(0) # 音を止める