0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ラズパイPico Wで音楽

Last updated at Posted at 2024-08-24

ラズパイPico のPWMを使って、音階を奏でましょう。

準備:スピーカーをGNDとGPIO15に接続

play-sound2.png

プログラム

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に接続

画像11.png

プログラム

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)			# 音を止める
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?