nakkyi が 2026年04月21日21時00分56秒 に編集
コメント無し
本文の変更
### <はじめに> M5AtomS3を使って、M5Stack用MIDIシンセサイザユニット(SAM2695)でDRUM PADを作ってみました。 以前はピアノキーボードを作ったのですが、今回はドラムパッドに挑戦です。 配置の都合で8キーにしましたが、M5AtomS3はGPIO端子が6個しか無いので、H.H.CとCYMBAL をダブルにしました。 また、M5 SYNTHユニットのスピーカーが小さいので、外部スピーカーを追加しました。  ### <もくじ> ①はじめに ②もくじ ③部品表 ④回路図 ⑤コード ⑥終わりに ### <部品表> |部品名|型式|メーカー|数量| |---|---|---|---| |マイコン|M5AtomS3|M5STACK|1| |シンセユニット|M5Stack用MIDIシンセサイザーユニット|M5STACK |1| |キー・ベース|8キー用|自作加工|1|
|ボタンスイッチ|1.1cm×1.1cm|不明|8|
|キースイッチ|キーボード用スイッチ|不明|8|
|スピーカー|5cm|不明|1| ### <回路図>

### <コード> M5Synth_Durm.ino ``` #include <M5AtomS3.h> #include "M5UnitSynth.h" M5UnitSynth synth; // --- 設定:ボタンのピン番号(6個) --- const int buttonPins[] = {39, 38, 8, 5, 6, 7}; const int numButtons = 6; // --- 設定:割り当てるドラム音(MIDIノート番号) --- // 36:バスドラ, 38:スネア, 42:ハイハット閉, 46:ハイハット開, 48:タム, 49:シンバル const int drumNotes[] = {36, 38, 42, 46, 48, 49}; const char* drumNames[] = {"KICK", "SNARE", "H.H.C", "H.H.O", "TOM", "CYMBAL"}; // ボタンの状態管理用 bool lastState[numButtons]; void setup() { auto cfg = M5.config(); M5.begin(cfg); // Synthユニットの初期化 (Port.A: G1, G2) // チャンネル9はMIDI規格でドラム専用チャンネルです synth.begin(&Serial2, UNIT_SYNTH_BAUD, 1, 2); synth.setInstrument(0, 9, SynthDrum); // ピンモード設定(内蔵プルアップを使用) for (int i = 0; i < numButtons; i++) { pinMode(buttonPins[i], INPUT_PULLUP); lastState[i] = HIGH; // 初期状態はHIGH(押されていない) } // 画面表示 M5.Display.setRotation(1); M5.Display.setTextColor(YELLOW); M5.Display.setTextDatum(middle_center); M5.Display.setFont(&fonts::Font4); M5.Display.drawString("DRUM PAD", M5.Display.width() / 2, M5.Display.height() / 2); } void loop() { M5.update(); for (int i = 0; i < numButtons; i++) { bool currentState = digitalRead(buttonPins[i]); // ボタンが「押された瞬間(HIGHからLOWになった時)」だけ実行 if (currentState == LOW && lastState[i] == HIGH) { // ドラム音を鳴らす (チャンネル9, ノート番号, 音量127) synth.setNoteOn(9, drumNotes[i], 127); // 画面に楽器名を表示 M5.Display.clear(); M5.Display.setTextColor(CYAN); M5.Display.drawString(drumNames[i], M5.Display.width() / 2, M5.Display.height() / 2); Serial.printf("Play: %s (Note %d)\n", drumNames[i], drumNotes[i]); delay(10); // チャタリング防止用の短い待機 } // 状態を保存 lastState[i] = currentState; } // 数秒後に画面表示を戻す処理を入れるとより使いやすくなります } ``` ### <終わりに> [ドラムパッドの動画](https://youtu.be/LJMByqpdpDU) はこちらです。
小型のM5ATOM を使ってピアノキーボードはいろいろ造られていますが、今回はM5AtomS3を使って、M5Stack用MIDIシンセサイザユニット(SAM2695)でDRUM PADを作ってみました。
小型のM5ATOM を使って<ピアノキーボード>はいろいろ作られていますが、 今回はM5AtomS3を使って、M5Stack用MIDIシンセサイザユニット(SAM2695)で、 <DRUM PAD キーボード>を作ってみました。
サンプルコードを組み合わせて、何とかドラムらしい音が出るようになりました。