内部でなく外部のLEDの操作
ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作: 本書の電子工作パーツをRaspberry Pi Picoで利用する (raspibb1a.blogspot.com)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
【Raspberry Pi Pico】DCモーターをモータードライバで制御する | メタエレ実験室 (hellobreak.net) これにもPWMが載っていた
Raspberry Pi PicoでMicroPythonでPWM信号でスピーカーでメロディー演奏 - Qiita
from machine import Pin, PWM, Timer
speaker = PWM(Pin(17, Pin.OUT)) # スピーカーを接続しているGPIO(この例では17番)を作成し、それをPWM()へ渡す
led_onboard = Pin(25, Pin.OUT) # 基板上のLEDを光らせたいのでGPIO25作成
# 使用する音の周波数を宣言しておく。ピタゴラスイッチは低いラ~高いドまでの音を使う
A4 = 440
B4 = 493.883
C5 = 523.251
C5s= 554.365
D5 = 587.330
E5 = 659.255
F5 = 698.456
F5s= 739.989
G5 = 783.991
A5 = 880
B5 = 987.767
C6 = 1046.502
# bps = 6.4 # 原曲128bpm / 60秒 = 2.1333...bps * 3連符 = 6.4bps
mspb = 156 # 6.4bpsの逆数 = 0.156ms これが8分3連符ひとつ分の音の長さ、音の間隔となる
# ピタゴラスイッチのメロディーを配列で作成。1要素が8分3連符ひとつ分の音の長さになる。0は無音(休符)
melody = [D5,E5,0,D5,E5,0,G5,F5s,0,D5,E5,0,D5,E5,0,D5,E5,0,C6,B5,0,G5,A5,0,D5,E5,0,D5,E5,0,G5,F5s,0,D5,E5,0,B4,A4,0,B4,C5,0,C5s,D5,0,0,D5,0,D5,E5,0,D5,E5,0,G5,F5s,0,D5,E5,0,D5,E5,0,D5,E5,0,C6,B5,0,G5,A5,0,D5,E5,0,D5,E5,0,G5,F5s,0,D5,E5,0,B4,A4,A4,A4,A4,A4,A4,A4,A4,A4,0,0,F5,E5,0,E5,F5s,E5,F5s,G5,G5,G5,D5,0,B4,C5,0,C5,D5,C5s,D5,B4,B4,B4,0,0,D5,E5,0,D5,E5,0,G5,F5s,0,D5,E5,0,D5,E5,0,D5,E5,0,G5,F5s,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]
i = 0
# 音を鳴らすためのコールバック関数
def beat(timer):
global melody
global led_onboard
global i
global speaker
if i >= len(melody): # メロディーを最後まで演奏し終えたら
speaker.deinit() # スピーカーのPWMを破棄して
led_onboard.value(0) # LEDを消して
timer.deinit() # タイマーを破棄して終了
elif int(melody[i]) == 0: # メロディー音が0、つまり無音(休符)の場合
speaker.duty_u16(0)
# PWMのDutyを0とすることで波形は出力されずLOWとなり、音は出ない
led_onboard.value(0) # LEDを消す
else:
speaker.freq(int(melody[i] + 0.5))
# PWMの周波数を次のメロディー音の周波数に変更する。
# 整数で渡す必要があるので、+0.5してから小数点以下切り捨て(thanks @naohiro2g)
speaker.duty_u16(0x8000)
# PWMのDutyを50%に戻し音を出す。Dutyは0~0xFFFF=65535までの間の値で設定
led_onboard.value(1) # LEDを光らせる
i += 1 # メロディーを次に進めて終わり
# 8分3連符の間隔でコールバックを呼ぶタイマーを作成し、メロディースタート
tim = Timer()
tim.init(period=mspb, mode=Timer.PERIODIC, callback=beat)
-------------------------------------------------
Micro Python の書き方(ボタン割り込み) - 自由に工作中 (hatenablog.com)
machine import Pin
import time
# ピンの入出力設定
BUTTON_PIN = 8
button = Pin(BUTTON_PIN, Pin.IN, Pin.PULL_UP)
LED_PIN = 21
led = Pin(LED_PIN, Pin.OUT)
# 関数定義
def callback(p):
led.value(1)
time.sleep(1)
def ledoff():
led.value(0)
time.sleep(1)
# Pin.IRQ.Falling call callback
button.irq(trigger=Pin.IRQ_FALLING, handler=callback)
while True:
ledoff()
----------------------------------------------------------------------------
Raspberry Pi PicoにLCD(AQM0802-PCA9515)と温度センサー(LM61CIZ)をつないで温度を表示 - Qiita
0 件のコメント:
コメントを投稿