Maker Pi RP2040のPiezo Buzzer
Maker Pi RP2040のピエゾブザーはGP22に接続されています。
import time
import board
import simpleio
# 音階と周波数の対応表
tonemap = {
'C4': 262,
'D4': 294,
'E4': 330,
'F4': 349,
'G4': 392,
'A4': 440,
'B4': 494,
'C5': 523,
'0': 0, #休符
}
# ブザーのピンを定義
buzzer_pin = board.GP22
# 音を鳴らす関数
def play_tone(pitch, duration):
# 周波数を取得
frequency = tonemap[pitch]
# Piezo Buzzerを制御するためのPWMOutオブジェクトを作成
simpleio.tone(buzzer_pin, frequency, duration)
# メロディを演奏する関数
def play_melody(melody):
for note in melody:
pitch, duration = note
play_tone(pitch, duration)
time.sleep(0.01)
# メロディのデータを定義
melody_data = [
('E4', 0.15),
('E4', 0.15),
('0', 0.15),
('E4', 0.15),
('0', 0.15),
('C4', 0.15),
('E4', 0.15),
('0', 0.15),
('G4', 0.2),
]
# メロディを演奏する
play_melody(melody_data)
Pythonの辞書を使ってみる
REPLモードにしてみましょう。
>>>fruit = {'apple': 1, 'banana':2, 'lemon': 3,}
>>>like = fruit['apple']
>>>print(like)
1
Pythonにおいて辞書型を使うにはブレース{}の中にkey:値,の順にセットします。りんごは何番だっけ?というときでも辞書に’apple’を登録しておけば1番、バナナに2をセットしておけば、間違わないでしょう。
上のブザーを鳴らすプログラムでは、tonemapでドレミファソラシドの各音階(C4~C5)に各周波数を割り当てています。ドならC4となり262Hzの音を出すわけです。毎回262Hz、292hz、330Hzと指定するのはどうでしょうか?数を間違えるし、面倒です。辞書型の出番ですね。
melody_dataでは従来どおりのリストを使って、音階と継続時間を設定しています。melody_dataの中を変えて好きな曲を演奏してみましょう。