https://notyet-maker.blogspot.com/2025/08/blog-post_15.html
で選定したピアノモジュールが届いた。
https://notyet-maker.blogspot.com/2025/09/blog-post_5.html
で選定したケーブルを接続する。
が、
micro:bit用ピアノモジュールに付属のハーネス と、3ピン メス JST ケーブル シャープ距離センサー用 のピン配が違っていた〜。
これで、結構、時間くった...
https://switch-education.com/products/microbit-zh-piano/
に、サンプルプログラムがあったので、これを参考に、各キーが検出できるかどうかを確認した。
ChatGPTで生成したREPLのコードはこちら。
import time, sys
import board, analogio, supervisor
# --- 前回のA1を解放 ---
_prev = globals().get("ain", None)
if _prev:
try:
_prev.deinit()
except Exception:
pass
finally:
globals().pop("ain", None)
# --- 設定 ---
READ_INTERVAL = 0.05
ain = analogio.AnalogIn(board.A1)
# micro:bit の 0〜1023 スケールに合わせる関数
def to_10bit(val):
return val * 1023 // 65535
# 鍵盤マップ(しきい値上限, ラベル)
KEYS = [
(40, "C4"),
(130, "C#4"),
(220, "D4"),
(300, "D#4"),
(390, "E4"),
(470, "F4"),
(560, "F#4"),
(640, "G4"),
(720, "G#4"),
(810, "A4"),
(890, "A#4"),
(950, "B4"),
]
def get_key(v10bit):
for limit, name in KEYS:
if v10bit < limit:
return name
return None
last = None
try:
while True:
raw = ain.value
v10 = to_10bit(raw)
key = get_key(v10)
if key != last:
if key:
print(f"{key} ({v10})")
else:
print("STOP")
last = key
time.sleep(READ_INTERVAL)
if supervisor.runtime.serial_bytes_available:
_ = sys.stdin.read(1)
print("break")
break
except KeyboardInterrupt:
print("KeyboardInterrupt")
finally:
try:
ain.deinit()
print("A1 released")
except:
pass
ChatGPTがエラーばっかり出すから、すごく時間がかかったけど、検出できた〜。
---
<AnalogIn>
B4 (930)
STOP
A4 (765)
STOP
G4 (596)
STOP
F4 (428)
STOP
E4 (343)
STOP
D4 (172)
STOP
C4 (1)
STOP
C#4 (87)
STOP
D#4 (260)
STOP
F#4 (514)
STOP
G#4 (681)
STOP
A#4 (852)
STOP
KeyboardInterrupt
A1 released
---
次は、その他の部品を全て購入して、スピーカー周りから動作確認していこうと思う。

0 件のコメント:
コメントを投稿