スピーカーを接続してメロディーを鳴らす

スピーカーを接続してPWM信号を送ってメロディーを鳴らしてみました。
よりシンプルな方法で鳴らします。
スピーカー
配線図
実際の配線
MicroPythonプログラム
import utime
from machine import Pin, PWM
#17ピンからPWMでスピーカー出力
sound = PWM(Pin(17, Pin.OUT))
#クラスPWMを定義(Sound)
# 音を設定 AラBシCドDレEミFファGソ 数字 高さ S シャープ
B0 = 31
C1 = 33
CS1 = 35
D1 = 37
DS1 = 39
E1 = 41
F1 = 44
FS1 = 46
G1 = 49
GS1 = 52
A1 = 55
AS1 = 58
B1 = 62
C2 = 65
CS2 = 69
D2 = 73
DS2 = 78
E2 = 82
F2 = 87
FS2 = 93
G2 = 98
GS2 = 104
A2 = 110
AS2 = 117
B2 = 123
C3 = 131
CS3 = 139
D3 = 147
DS3 = 156
E3 = 165
F3 = 175
FS3 = 185
G3 = 196
GS3 = 208
A3 = 220
AS3 = 233
B3 = 247
C4 = 262
CS4 = 277
D4 = 294
DS4 = 311
E4 = 330
F4 = 349
FS4 = 370
G4 = 392
GS4 = 415
A4 = 440
AS4 = 466
B4 = 494
C5 = 523
CS5 = 554
D5 = 587
DS5 = 622
E5 = 659
F5 = 698
FS5 = 740
G5 = 784
GS5 = 831
A5 = 880
AS5 = 932
B5 = 988
C6 = 1047
CS6 = 1109
D6 = 1175
DS6 = 1245
E6 = 1319
F6 = 1397
FS6 = 1480
G6 = 1568
GS6 = 1661
A6 = 1760
AS6 = 1865
B6 = 1976
C7 = 2093
CS7 = 2217
D7 = 2349
DS7 = 2489
E7 = 2637
F7 = 2794
FS7 = 2960
G7 = 3136
GS7 = 3322
A7 = 3520
AS7 = 3729
B7 = 3951
C8 = 4186
CS8 = 4435
D8 = 4699
DS8 = 4978
# 演奏する関数ensouを定義
def ensou():
global sound
# ピタゴラスイッチ
#melody = [D5,E5,0,D5,E5,0,G5,FS5,0,D5,E5,0,D5,E5,0,D5,E5,0,C6,B5,0,G5,A5,0,D5,E5,0,D5,E5,0,G5,FS5,0,D5,E5,0,B4,A4,0,B4,C5,0,CS5,D5,0,0,D5,0,D5,E5,0,D5,E5,0,G5,FS5,0,D5,E5,0,D5,E5,0,D5,E5,0,C6,B5,0,G5,A5,0,D5,E5,0,D5,E5,0,G5,FS5,0,D5,E5,0,B4,A4,A4,A4,A4,A4,A4,A4,A4,A4,0,0,F5,E5,0,E5,FS5,E5,FS5,G5,G5,G5,D5,0,B4,C5,0,C5,D5,CS5,D5,B4,B4,B4,0,0,D5,E5,0,D5,E5,0,G5,FS5,0,D5,E5,0,D5,E5,0,D5,E5,0,G5,FS5,0,D5,E5,0,D5,E5,0,D5,E5,0,C6,B5,0,0,G5,0,0,0,0,0,0,0,0,0,0,0,0,0,D5,E5,0,D5,E5,0,C6,B5,0,0,G5,0]
# マリオのテーマ
melody = [E7, E7, 0, E7, 0, C7, E7, 0, G7, 0, 0, 0, G6, 0, 0, 0, C7, 0, 0, G6, 0, 0, E6, 0, 0, A6, 0, B6, 0, AS6, A6, 0, G6, E7, 0, G7, A7, 0, F7, G7, 0, E7, 0,C7, D7, B6, 0, 0, C7, 0, 0, G6, 0, 0, E6, 0, 0, A6, 0, B6, 0, AS6, A6, 0, G6, E7, 0, G7, A7, 0, F7, G7, 0, E7, 0,C7, D7, B6, 0, 0, 0, 0]
# while True:
# これがあるとずっと繰り返す。
for i in range(len(melody)):
if melody[i] == 0:
sound.duty_u16(0)
else:
sound.freq(melody[i])
sound.duty_u16(0x8000)
utime.sleep_ms(150)
'''
PWMオブジェクトは周波数とデューティを設定してやることでPWM信号を送出します。
周波数は sound.freq(周波数(Hz))
周波数を上げ下げすることでスピーカーの振動の速さが変わり音の高さが変わります。
デューティは sound.duty_u16(デューティ値(4ケタの16進数、もしくはintで直接0~65535))
で設定します。0x8000は十進数で32768で50%
デューティ値が大きいと実行電圧(音量)が大きくなります。
'''
# 定義終わり(関数ブロック)
# 演奏します。
ensou()
実行
お気に入りの曲を入力してみましょう。

お気に入りの曲を入力してみましょう。
入力できたらプログラムで繰り返し演奏させてみましょう。
入力したメロディーを繰り返して演奏させるプログラム

テンテン
パイソンで繰り返し処理をします。
range() 関数 × for 文の基本構文

ensou関数を繰り返します。




ensou()
このブロックを入れて演奏する音符を回数分増やします。
1を入れると0のつぎは1と2回繰り返します。
プログラムのどこに入れるか考えて入れてみてください。