1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

概要

子ども向けのプログラミング教育プロジェクトです。
呪術廻戦第2期OPの青のすみかをコーディングしてみました。

ソースコード

main.py
from melody_maker import *

def aonosumika():
    """
    青のすみか
    """
    BPM = 152
    BEAT = 60 / BPM
    melody = [
        [F5, BEAT/2],[Eb5, BEAT/2],[Db5, BEAT/4],[Db5, BEAT*5/8],[REST, BEAT/8],
        [Eb5, BEAT/2],[Eb5, BEAT/2],[Db5, BEAT],[Ab5, BEAT],[Db5, BEAT/2],[Db5, BEAT/2],[Eb5, BEAT*15/8],[REST, BEAT/8],
        [F5, BEAT/2],[Eb5, BEAT/2],[Db5, BEAT/4],[Db5, BEAT*5/8],[REST, BEAT/8],
        [Eb5, BEAT/2],[Eb5, BEAT/2],[Db5, BEAT],[Ab5, BEAT],[Db5, BEAT/2],[Db5, BEAT/2],[Eb5, BEAT/2],[Db5, BEAT*15/8],[REST, BEAT/8],
        [Ab4, BEAT/2],[Bb4, BEAT/2],[Db5, BEAT/2],[Eb5, BEAT/2],[F5, BEAT*3/4],[Eb5, BEAT/4],[F5, BEAT*3/4],[Eb5, BEAT/4],[F5, BEAT],[Ab5, BEAT/2],[Eb5, BEAT*15/8],[REST, BEAT/8],
        [Ab4, BEAT/2],[Ab4, BEAT/2],[Bb4, BEAT/2],[Db5, BEAT/2],[Eb5, BEAT/2],[F5, BEAT*3/4],[Eb5, BEAT/4],[F5, BEAT*3/4],[Eb5, BEAT/4],[F5, BEAT],[Db6, BEAT/2],[C6, BEAT],[F5, BEAT],[REST, BEAT/8],
    ]
    for m in melody:
        tone(m[0], m[1])


while True:
    turn_on_led(color)
    if button_red.value() == 1:
        pass
    elif button_green.value() == 1:
        pass
    elif button_blue.value() == 1:
        aonosumika()
        pass
    elif button_yellow.value() == 1:
        pass
    elif button_orange.value() == 1:
        pass
    sleep(0.1)
    turn_off_led(color)
    if color < 4:
        color += 1
    else:
        color = 0

  • Thonnyでmelody_maker.pyを右クリックして、/へアップロードを実行して下さい。
  • main.pyを実行した際にmelody_makerがライブラリとして使えるようになります。
melody_maker.py
from machine import Pin, PWM
from utime import sleep

# LED
led_red = Pin(0, Pin.OUT, value=1)
led_green = Pin(2, Pin.OUT, value=1)
led_blue = Pin(3, Pin.OUT, value=1)
led_yellow = Pin(9, Pin.OUT, value=1)
led_white = Pin(10, Pin.OUT, value=1)

# NPNトランジスタのベース
buzzer = PWM(Pin(15))

# ボタン
button_red = Pin(1, Pin.IN, Pin.PULL_DOWN)
button_green = Pin(11, Pin.IN, Pin.PULL_DOWN)
button_blue = Pin(12, Pin.IN, Pin.PULL_DOWN)
button_yellow= Pin(13, Pin.IN, Pin.PULL_DOWN)
button_orange = Pin(14, Pin.IN, Pin.PULL_DOWN)


# 音の周波数
REST=    0
C4  =  262
Db4 =  277
D4  =  294
Eb4 =  311
E4  =  330
F4  =  349
Gb4 =  370
G4  =  392
Ab4 =  415
A4  =  440
Bb4 =  466
B4  =  494
C5  =  523
Db5 =  554
D5  =  587
Eb5 =  622
E5  =  659
F5  =  698
Gb5 =  740
G5  =  784
Ab5 =  831
A5  =  880
Bb5 =  932
B5  =  988
C6  = 1047
Db6 = 1109
D6  = 1175
Eb6 = 1245
E6  = 1319
F6  = 1397
Gb6 = 1480
G6  = 1568
Ab6 = 1661
A6  = 1760

# 光っているLEDを管理する変数
color = 0

def turn_on_led(color):
    """
    指定したLEDを点灯する。

    Parameters:
        color(int):
            0: 赤
            1: 緑
            2: 青
            3: 黄色
            4: 白
    """
    if color == 0:
        led_red.value(0)
    elif color == 1:
        led_green.value(0)
    elif color == 2:
        led_blue.value(0)
    elif color == 3:
        led_yellow.value(0)
    elif color == 4:
        led_white.value(0)
        
def turn_off_led(color):
    """
    指定したLEDを消灯する。
    
    Parameters:
        color(int):
            0: 赤
            1: 緑
            2: 青
            3: 黄色
            4: 白
    """
    if color == 0:
        led_red.value(1)
    elif color == 1:
        led_green.value(1)
    elif color == 2:
        led_blue.value(1)
    elif color == 3:
        led_yellow.value(1)
    elif color == 4:
        led_white.value(1)

def tone(frequency, duration):
    """
    パッシブブザーで音を鳴らす。

    Parameters:
        frequency(int): 周波数
        duration(float): 音の長さ
    """
    global color
    if frequency == REST:
        turn_on_led(0)
        turn_on_led(1)
        turn_on_led(2)
        turn_on_led(3)
        turn_on_led(4)
        sleep(duration)
        turn_off_led(0)
        turn_off_led(1)
        turn_off_led(2)
        turn_off_led(3)
        turn_off_led(4)
        return
    turn_on_led(color)
    buzzer.freq(frequency)
    buzzer.duty_u16(30000)
    sleep(duration)
    buzzer.duty_u16(0)
    sleep(0.002)
    turn_off_led(color)
    if color < 4:
        color += 1
    else:
        color = 0

メロディーメイカーの作り方

解説動画を参考にして下さい。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?