クリスマスイルミネーションをプログラミング

スポンサーリンク

CircuitPythonを使ってMaker Pi RP2040でWS2812bを制御する

必要なもの

Maker Pi RP20401
WS2812b1
ジャンパーワイヤー3
クリスマスリース1
必要なもの

接続の仕方

Maker Pi RP2040のコネクタを使ってグローブポートの2番を使います。GNDからWS2812bのグランド。3V3からWS2812bの+へ。GP2からWS2812bのDINへつなぎます。

コード

import board
import time
import digitalio
import simpleio
import neopixel
from adafruit_led_animation.sequence import AnimationSequence
import adafruit_led_animation.animation.comet as comet_animation
import adafruit_led_animation.animation.sparkle as sparkle_animation
import adafruit_led_animation.animation.pulse as pulse_animation
import adafruit_led_animation.animation.rainbowchase as rainbow_animation

import adafruit_led_animation.color as color
# 音階と周波数の対応表
tonemap = {
    'C4': 262,
    'D4': 294,
    'E4': 330,
    'F4': 349,
    'G4': 392,
    'A4': 440,
    'B4': 494,
    'C5': 523,
    'D5': 587,
    'E5': 659,
    'F5': 783,
    'G5': 784,
    'A5': 880,
    'B5': 988,
    '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 = [
    ('G4', 0.30),
    ('C5', 0.45),
    ('C5', 0.15),
    ('D5', 0.15),
    ('C5', 0.15),
    ('B4', 0.15),
    ('A4', 0.30),
    ('A4', 0.30),
    ('A4', 0.30),
    ('D5', 0.45),
    ('D5', 0.15),
    ('E5', 0.15),
    ('D5', 0.15),
    ('C5', 0.15),
    ('B4', 0.30),
    ('G4', 0.30),
    ('G4', 0.30),
    ('E5', 0.45),
    ('E5', 0.15),
    ('F5', 0.15),
    ('E5', 0.15),
    ('D5', 0.15),
    ('C5', 0.30),
    ('A4', 0.30),
    ('G4', 0.15),
    ('G4', 0.15),
    ('A4', 0.30),
    ('D5', 0.30),
    ('B4', 0.30),
    ('C5', 0.60)
]
# NeoPixel テープに接続されたピンの設定
pixel_pin = board.GP2
# NeoPixel テープに接続されたLEDの数
pixel_num = 30

pixels = neopixel.NeoPixel(pixel_pin, pixel_num, brightness=0.1, auto_write=False)
#アニメーションの設定(スピードや色を指定しています)
#使える色はAMBER,AQUA,BLUE,CYAN,GOLD,GREEN,JADE,MAGENTA,OLD_LACE,ORANGE,PINK,PURPLE,RED
pulse = pulse_animation.Pulse(pixels, 0.2, color.JADE)
sparkle = sparkle_animation.Sparkle(pixels, 0.05, color.GREEN)
rainbow = rainbow_animation.RainbowChase(pixels, 0.1)

animations = AnimationSequence(pulse, sparkle,rainbow)

# ボタンをイニシャライズする
btn1 = digitalio.DigitalInOut(board.GP20)
btn1.direction = digitalio.Direction.INPUT
btn1.pull = digitalio.Pull.UP

while True:
    animations.animate()
    if not btn1.value:  # button 1 が押されたら
        play_melody(melody_data)
        animations.next()#次のアニメーションに移動
この記事が気に入ったら
いいね!しよう
最新情報をお届けします。
電子工作
webclimbers
タイトルとURLをコピーしました