PIEZO BUZZERで音を鳴らそう#05

CircuitPython

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の中を変えて好きな曲を演奏してみましょう。

タイトルとURLをコピーしました