ボタンを押すとマリオの音が変わってサーボが動きます。
ボタンを押すとマリオの曲がかわりサーボが動きます。
PWMを使って音とサーボを制御しています。
使う部品
スピーカー タクトスイッチ サーボモーター
配線図
実際の配線
MicroPythonプログラム
import utime from machine import Pin, PWM sound = PWM(Pin(13, Pin.OUT)) # スピーカーのPWMクラスを作成 servo = PWM(Pin(28)) # サーボモーターのPWMクラスを作成 button = Pin(16, Pin.IN, Pin.PULL_DOWN) # スイッチのクラスを作成 # 音階の周波数を設定 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 # ワンアップしたときの音楽 def oneup(): global sound effect = [E5, G5, F6, C6, D6, G6, 0] for i in range(len(effect)): if int(effect[i]) == 0: sound.duty_u16(0) else: sound.freq(int(effect[i])) sound.duty_u16(0x8000) utime.sleep_ms(150) # ジャンプしたときの処理(サーボモーターを動かしてワンアップ音演奏) def jump(): servo.freq(50) servo.duty_u16(1500) utime.sleep(0.2) servo.duty_u16(3000) utime.sleep(0.1) oneup() # マリオのテーマ曲を演奏(繰り返し) def mario(): global sound 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) # ボタンが押された時の処理 def button_handler(pin): jump() # ボタンが押されるごとに呼び出されます。button_handler 「jump()」を実行 button.irq(trigger=Pin.IRQ_RISING, handler=button_handler) # マリオのテーマ(ずーっと流れています。) mario()
実行
テンテン
PICOは同時にいろいろなことを実行できます