3Dプリンターを備えた最小限のMIDIドラムキット
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
| × | 1 |
必要なツールとマシン
> ![]() |
| |||
![]() |
| |||
![]() |
| |||
|
アプリとオンラインサービス
> ![]() |
|
このプロジェクトについて
<図>




こんにちは。
これはarduinoUNOを使用した最小限のドラムキットです。
まず、このInstructablesページを確認してください。
https://blog.arduino.cc/2017/01/19/a-3d-printed-e-drum-pad/
これを作り始めてから、ピエゾと電子ドラムに魅了されました。
私は電子ドラムの非常にシンプルなメカニズムとMIDIと呼ばれる素晴らしい発明に魅了されました。
つまり、パッドを作っただけでは満足できませんでした。
このドラムキットは大きく2つのプロダクションに分かれています。
1.3Dプリンターと厚紙で作られたパッド。
2. arduinoUNOでmidiコンバーターをトリガーします。
「1」のパッドから送信された信号は、「2」のarduinoで処理され、MIDI信号に変換されます。そして、MIDI信号がarduinoからiPhoneやラップトップなどに送信され、音が出ます。
スマートフォンやパソコン以外の電源を用意する必要はありません。
必要なもの
ツール
・3Dプリンター
・レーザーカッター(エクストラ)
・六角レンチ
・カッターナイフ
・サークルカッター
・はんだごて
・ パイプカッター
・ドライバードリル
・ドリルビット9mm / 10mm
素材
・厚紙1mm
・PLAフィラメント
・スポンジフォームシート5mm / 10mm
・MDF2.5mm / 5.5mm(エクストラ)
・M6-70mmボルト・ナット
・M6--50mmボルト・ナット
・M3-10mmボルト・ナット
・M3--15mmボルト・ナット
・M3-25mmボルト・ナット
・M2ネジ
・直径13mmのステンレス鋼管
ドラムハードウェア
・メッシュヘッド10インチ/ 8インチ
・スネアスタンド(何でもOK。ヤマハSS662を使用しています。)
・ハイハットスタンド(何でもOK。YAMAHAHS650Aを使用しています)
・キックペダル(何でもOK。ヤマハFP7210Aを使用しています)
・ドラムスティック
ステップ1:3Dプリント
すべてのデータはThingiverseとGitHubにあります。
リムはVer.2をご利用ください。
20%のインフィルでパーツを印刷しました。層の厚さは0.3mmです。
また、パッドの作成にはレーザーカッターを使用できます。
https://github.com/RyoKosaka/drums/tree/master/vector
ステップ2:組み立てる
M3-10mmのボルトとナットを使用して部品を接続します。
中央部はM3-15mmまたはM3-25mmボルトで下部を固定します。
<図>




ステップ3:シェルを作成する
まず、シェルの高さは55mmです。
幅55mmのバンドを3本作ってください。
長さはパッドを覆う長さよりわずかに長いです。
底に隙間があるので、その隙間にバンドを1本入れてみてください。
完全な円の長さになるようにバンドをカットします。
これを3回繰り返し、接着剤を使用してオーバーレイします。
メッシュヘッドを固定した状態でシェルが乾いたら、ソケット用に直径9mmの穴を開けます。
バタフライナットも使用できますが、通常のナットでも締まるチューニングキーも製作しておりますので、ぜひご利用ください。
メッシュヘッドの固定には、M6-70mmボルトを使用してください。
穴を開けたら、メッシュヘッドをもう一度取り外してピエゾを配置します
<図>



ステップ4:ピエゾを取り付ける
スネア
スネアの場合は、写真のように2つのピエゾを使用します。
ピエゾの赤いケーブルをチップとリングのそれぞれに接続します。
両方の黒いケーブルがスリーブに接続されています。
はんだ付けするときは、センサープレートの穴にケーブルを通すことを忘れないでください。
写真のように、頭のピエゾ(先端にピエゾを接続)は、厚さ10mmのスポンジフォームで挟む必要があります。
下に1つ、上に3つ。そして、写真のように上位3つのコーンを作成します。
次に、センサープレートに置きます。
キック
キックパッドはピエゾを1つしか使用しないため、チップのみを使用できます。
センサープレートは必要ありません。ピエゾの下に2つのスポンジフォームがあります
センサーを中心からオフセットして配置します。
ビーターがセンサーに直接当たると、arduinoが当たる強さを判断できないためです。
ハイハット
回路はキックパッドと同じです。
ピエゾの下に厚さ10mmのスポンジフォームを置きます。
ピエゾはデリケートです。曲がったり傷つけたりしないように注意してください。
<図>




ステップ5:10インチのスネアパッド
まず、リムのセンサーを取り付けます。
センサープレートを固定します。しっかりと直してください。円錐の端を側面から見て2〜3mm見えるようにします。
もちろん、8インチのパッドをスネアとして使用する場合も同じ手順が使用されます。
<図>







ステップ6:8インチキックパッド
まず、直径13mmのステンレス鋼管を切断します。
200mmを2つ、365mmを2つ作成します。
長さ調節ができるので、長さに多少の誤差があっても大丈夫です。
写真を参考に組み立ててください。
パイプを固定するために、M3ナットをパーツの内側にロードできるように設計されています。
パイプをしっかりと固定してください。 M3-15mmのボルトとナットを使用してください。
<図>





ステップ7:12インチのハイハット
厚紙でシェルを作った後、厚紙を使えばシンバルが作れると思いました。
初め。厚紙を直径300mmの円に切ります。これを3つ作ってください。
次に、中央から切り込みを入れます。
最後に、最初のノッチから平行に10mm離れたポイントから2番目のノッチを作成します。
このようにして、小さな口を開けた3人のパックマンが作られます。
次に、パックマンの口をテープで慎重に閉じて、シンバルの形にします。
接着剤を塗布し、これらを重ねます。接着剤をきれいに薄く伸ばすことを忘れないでください
手でしっかりと持ち、おもりを置いて乾かします。
消音には、厚さ5mmのスポンジを入れて穴を開けます。きちんと穴を開けることはできませんが、穴を隠すことはできますので大丈夫です。
センサーマウントとケーブルガイドを両面テープで貼り付けて完成させます。グルーガンを使用した方が簡単かもしれません。
<図>
















ステップ8:ハイハットコントローラー
ハイハットコントローラーは、ハイハットの開閉をarduinoに送信します。
回路はとてもシンプルです。
3つのパーツを組み合わせて作られています。
FSRを下部に取り付け、ソケットを固定します。穴が開いていてもFSRは使用できます。
写真のように10mmのスポンジをFSRに取り付けます。
M3-10mmボルトでカバーを固定します。
HIGHとLOWだけですが、なぜFSRを使用したのか不思議に思うかもしれません。
RolandやYamahaなどのサウンドモジュールに対応するためにFSRを使用しています。
また、EZ DRUMMER 2などのドラム専用音源では、ハイハットの開き具合にいくつかの段階があります。
FSRの場合は、コードを変更するだけで対応できる場合があります。しかし、私はそれを試していません。
<図>








ステップ9:USB-MIDI
このステップで何ができるでしょうか?
USBケーブルだけで、arduinoからMIDI信号を送信できます。
つまり、追加のハードウェアを使用せずに、arduinoをiPhoneなどでMIDIデバイスとして認識させることができます。
まず、このページを確認してください。
http://morecatlab.akiba.coocan.jp/lab/index.php/aruino/midi-firmware-for-arduino-uno-moco/
https://github.com/kuwatay/mocolufa
通常のarduinoUNOをiPhoneに直接接続すると、「ArduinoUNOは互換性がありません」などのエラーメッセージが表示されます。
そのため、arduino UNOで使用されているUSBチップ(ATmega16U2)を書き直す必要があります。
https://www.arduino.cc/en/Hacking/DFUProgramming8U2
この手順は、16進ファイルを書き換える方法です。
以下の説明まで、このサイトに従って進んでください。
sudo dfu-programmer atmega16u2 flash Arduino-usbserial-uno.hex
「Arduino-usbserial-uno.hex」を「dualMoco.hex」に置き換えるだけです。
したがって、
sudo dfu-programmer atmega16u2 flash dualMoco.hex
書き換え後、ArduinoはMIDIデバイスとして認識されます。
写真のようにピンを短絡すると、通常のArduinoとして認識されます。
そうでない場合(短絡していない場合)、arduinoUNOはMIDIデバイスとして認識されます。
つまり、arduino IDEを使用してコードを作成する場合は、図に示すようにピンを短絡する必要があります。
<図>

ステップ10:MIDIコンバーターへのトリガー
ボックスにはarduinoUNOとシールドが入っています。
シールドの回路については、フリッツの画像を参照してください。
ダイオードは保護用ですが、arduino UNOには保護回路があるという情報を見ましたが、ダイオードは必要ないかもしれません。誰かがこれについて知っていますか?
最初にケースとカバーのモデルを印刷した後、それに応じてシールドを作成することをお勧めします。
カバーの3Dモデルもありますが、レーザーカッターでカバーを作りました。お好きな方をお選びください。
<図>









ステップ11:GarageBandで遊ぶ
ガレージバンドを起動して接続するだけです。特に難しい設定はありません。
GarageBandなど、このドラムセットで使用できるPC用のDAWは多数あります。
その中で、水素は無料で、音を追加することができます。
ステップ12:設定
コードを作成する際、値を変更するたびにコードを書き直すのは面倒だったので、arduinoだけで値を変更できるようにしたかったのです。
つまり、これはコードをデバッグするために作成されているため、変更する必要のない項目があります。
それでも、ピエゾのサイズ、パッドのサイズ、スポンジフォームの硬度に応じて設定が必要です。
INC / DECボタンで機器を選択し、NEXT / BACKボタンで設定項目を選択します。設定したい楽器や項目が表示されているときにEDITボタンを押すと、INC / DECボタンで値を変更できます。次に、もう一度[編集]ボタンを押すと、変更が確認されます。
ビデオの後半を見ると、操作方法がわかります。
しきい値
音が出る最低値
感度
センサー感度。下げると、軽く叩いても高速になります。
注
ノートの番号。変更することで、楽器を変更することができます。画像を参照してください。
フラグ
殴打が終わったと判断するための値。あまり変更する必要はありません。値を1から10に設定すると便利です。値を大きくしすぎると、1回のヒットで2回音が鳴ります。下げすぎると、繰り返し叩くと音が出なくなる場合があります。
スキャン時間
ピークの検索では、しきい値を超えた後、値が数ミリ秒連続して取得されます。それらの中で最も高い値がピークになります。この数ミリ秒はSCANTIMEです。変更する必要はありません。
ヘッド/リム
リムの使いやすさを設定します。上げると鳴りにくくなります。下げすぎると、頭を叩いたときにリムが鳴ります。ヘッドとリムの判断に関しては、コードの改善が必要な場合があります
ペダルベロ
他のパッドとは異なり、ペダルのベロシティは一定です。初期値は100です。お好きな値に変更してください。
マスクタイム
これはFLAGに関連する値です。変更する必要はありません。上げると、叩き続けても音が出ない場合があります。
<図>

ステップ13:Fusion 360
一部の部品は、寸法を変更しないと使用できない場合があります。 STLデータの編集は困難です。そこで、Fusion360のデータをアップロードしました。ただし、試行錯誤しながらデータを編集しているので、履歴機能に頼りすぎない方がいいです。
https://github.com/RyoKosaka/drums/tree/master/Fusion360
追加
追加の手順は、Instructablesにあります。
https://www.instructables.com/id/Arduino-Minimal-Drum-Kit/
そして、詳細な製造工程はこのブログで公開されています。
興味のある方はチェックしてください。
お気軽にお問い合わせください。
楽しんでください!
コード
- Hello Drum v2
Hello Drum v2 Arduino
変更:2019年5月12日ジョージブラザーストン/ *ドラムMIDIコントローラー作成:2017年6月28日小坂亮「HELLODRUM」Ver.1.0変更:2019年5月12日ジョージブラザーストン* /// Library Includes // #include// Arduinoライブラリ(自動的に含まれる)// LOW(41行目)// HIGH(40行目)// INPUT_PULLUP(47行目)// digitalRead()(177行目)/ / analogRead()(178行目)#include // MIDIライブラリ-バージョン:4.3.1 //インクルード //クラスMIDI(30行目)//クラスメソッド 'begin'(Line 55)#include // LiquidCrystal-バージョン:1.0.7 // LiquidCrystalクラスからインスタンス化されたlcdオブジェクト(以下の変数セクション)//変数-宣言と初期化//変数-プログラムboolean bSnareFlag =false;ブールbHihatFlag =false;ブールbKickFlag =false;ブールbPedalFlag =false; boolean bButtonState =true; boolean bButtonState_set =true; int iUPDOWN =0; int iNEXTBACK =0; //配列-プログラム// InstrumentSensor [6] ={threshold、sensitive、note、flag、velocity、iPeakValue} // 'iPeakValue'および 'velocity'はすべてのInstrumentSensor配列に対してゼロでなければなりません//すべての 'aHIHAT []'および'aHIHAT_CLOSE []'配列要素は、 'note'要素を除いて同じ値である必要があります。 int aSNARE [6] ={150、950、38、3、0、0}; int aSNARE_RIM [6] ={5、500、37、3、0、0}; int aHIHAT [6] ={100、800、46、1、0、0}; int aHIHAT_CLOSE [6] ={100、800、42、1、0、0}; int aKICK [6] ={200、700、36、1、0、0}; // Instrument_ContinuousController [4] ={scantime、snare / rim、pedalVelocity、masktime} int aHIHAT_PEDAL [4] ={600、0、44、0}; // InstrumentSensor_ParameterValue [4] ={しきい値、感度、メモ、フラグ} int aSETTING [4] ={4、500、100、1}; //ライブラリ//LiquidCrystal.h //定数(ライブラリですでに定義されていますが、スコープ内にありますか?そうでない場合は、以下で定義してください)// const int rs =12、en =11、d4 =5、d5 =4、d6 =3 、d7 =2; // LiquidCrystalクラスからインスタンス化されたlcdオブジェクト(LiquidCrystal.h 45行目)LiquidCrystal lcd(rs、en、d4、d5、d6、d7); // LCDインターフェイスピンを関連付けられたArduinoピン番号に関連付けます//MIDI.h //ライブラリを初期化しますMIDI_CREATE_DEFAULT_INSTANCE(); //プログラムコード//プログラムの実行-初期(プログラムセットアップ)void setup(){MIDI.begin(10); //開始(MIDI.h 55行目)lcd.begin(16、2); //開始(LiquidCrystal.h 62行目)lcd.print( "INITIALIZING ..."); //印刷(LiquidCrystal.h 45行目)lcd.setCursor(0、1); // setCursor(LiquidCrystal.h Line 82)lcd.print( "DRUM MIDI CONTROLLER"); pinMode(6、INPUT_PULLUP); // pinMode(Arduino.h 175行目); INPUT_PULLUP(Arduino.h行47)pinMode(7、INPUT_PULLUP); pinMode(8、INPUT_PULLUP); pinMode(9、INPUT_PULLUP); pinMode(10、INPUT_PULLUP); } //プログラムの実行-定常状態(電源が失われるまで継続的なループ)void loop(){//ドラムMIDIコントローラー回路//変数の宣言と初期化int iButton_set =digitalRead(6); //ボタンを設定します//digitalRead()(Arduino.h 177行目)int iButton_up =digitalRead(7); //上ボタンintiButton_down =digitalRead(8); //下ボタンintiButton_next =digitalRead(9); //次のボタンintiButton_back =digitalRead(10); //戻るボタンintiPiezoValue_A0 =analogRead(A0); //ピエゾ-スネアヘッド//analogRead()(Arduino.h Line 178)int iPiezoValue_A1 =analogRead(A1); //ピエゾ-スネアリムintiPiezoValue_A2 =analogRead(A2); //ハイハットintiPiezoValue_A3 =analogRead(A3); //キックドラムintiFSRValue_A4 =analogRead(A4); //ハイハットペダル//編集モードintaUP [4] ={5、50、1,1}; // {しきい値、感度、メモ、フラグ} int aUP_ADVANCE [4] ={1、50、1,1}; // {スキャンタイム、リム/ヘッド、ペダル速度、マスクタイム} //注:aINSTRUMENT []配列はchar * aINSTRUMENT [] ={"SNARE HEAD"、 "SNARE RIM"、 "HIHATOPENの上の 'Arrays'で宣言されていません"、" HIHAT CLOSE "、" HIHAT PEDAL "、" KICK "、" ADVANCED SETTING "}; //注:aSETTING []配列はchar *の上の「配列」で宣言されましたaSETTING [] ={"THRESHOLD"、 "SENSITIVITY"、 "NOTE"、 "FLAG"}; //注:aSETTING_ADVANCE []は、char * aSETTING_ADVANCE [] ={"SCAN TIME"、 "HEAD / RIM"、 "PEDAL VELO"、 "MASKTIME"}の上の '配列'で宣言されていません。 if(iUPDOWN <0){iUPDOWN =6; } if(iUPDOWN> 6){iUPDOWN =0; } if(iNEXTBACK <0){iNEXTBACK =3; } if(iNEXTBACK> 3){iNEXTBACK =0; } //プッシュボタンEDIT // LOW(Arduino.h Line 41)if(iButton_set ==LOW &&bButtonState ==true &&bButtonState_set ==true){lcd.clear(); lcd.print( "EDIT"); bButtonState =false; bButtonState_set =false; delay(500); } if(iButton_set ==LOW &&bButtonState ==true &&bButtonState_set ==false){lcd.clear(); lcd.print( "編集完了"); bButtonState =false; bButtonState_set =true; delay(500); } if(iButton_up ==LOW &&bButtonState ==true &&bButtonState_set ==false){switch(iUPDOWN){case 0:aSNARE [iNEXTBACK] =aSNARE [iNEXTBACK] + aUP [iNEXTBACK];壊す;ケース1:aSNARE_RIM [iNEXTBACK] =aSNARE_RIM [iNEXTBACK] + aUP [iNEXTBACK];壊す;ケース2:スイッチ(iNEXTBACK){ケース2:aHIHAT [iNEXTBACK] =aHIHAT [iNEXTBACK] + aUP [iNEXTBACK];壊す;デフォルト:aHIHAT_CLOSE [iNEXTBACK] =aHIHAT_CLOSE [iNEXTBACK] + aUP [iNEXTBACK]; aHIHAT [iNEXTBACK] =aHIHAT [iNEXTBACK] + aUP [iNEXTBACK]; } 壊す;ケース3:スイッチ(iNEXTBACK){ケース2:aHIHAT_CLOSE [iNEXTBACK] =aHIHAT_CLOSE [iNEXTBACK] + aUP [iNEXTBACK];壊す;デフォルト:aHIHAT_CLOSE [iNEXTBACK] =aHIHAT_CLOSE [iNEXTBACK] + aUP [iNEXTBACK]; aHIHAT [iNEXTBACK] =aHIHAT [iNEXTBACK] + aUP [iNEXTBACK]; } 壊す;ケース4:スイッチ(iNEXTBACK){ケース0:aHIHAT_PEDAL [iNEXTBACK] =aHIHAT_PEDAL [iNEXTBACK] + aUP [iNEXTBACK];壊す;ケース2:aHIHAT_PEDAL [iNEXTBACK] =aHIHAT_PEDAL [iNEXTBACK] + aUP [iNEXTBACK];壊す; } 壊す;ケース5:aKICK [iNEXTBACK] =aKICK [iNEXTBACK] + aUP [iNEXTBACK];壊す;ケース6:aSETTING [iNEXTBACK] =aSETTING [iNEXTBACK] + aUP_ADVANCE [iNEXTBACK];壊す; } bButtonState =false; delay(30); } if(iButton_down ==LOW &&bButtonState ==true &&bButtonState_set ==false){switch(iUPDOWN){case 0:aSNARE [iNEXTBACK] =aSNARE [iNEXTBACK] --aUP [iNEXTBACK];壊す;ケース1:aSNARE_RIM [iNEXTBACK] =aSNARE_RIM [iNEXTBACK] --aUP [iNEXTBACK];壊す;ケース2:スイッチ(iNEXTBACK){ケース2:aHIHAT [iNEXTBACK] =aHIHAT [iNEXTBACK] --aUP [iNEXTBACK];壊す;デフォルト:aHIHAT_CLOSE [iNEXTBACK] =aHIHAT_CLOSE [iNEXTBACK] --aUP [iNEXTBACK]; aHIHAT [iNEXTBACK] =aHIHAT [iNEXTBACK] --aUP [iNEXTBACK]; } 壊す;ケース3:スイッチ(iNEXTBACK){ケース2:aHIHAT_CLOSE [iNEXTBACK] =aHIHAT_CLOSE [iNEXTBACK] --aUP [iNEXTBACK];壊す;デフォルト:aHIHAT_CLOSE [iNEXTBACK] =aHIHAT_CLOSE [iNEXTBACK] --aUP [iNEXTBACK]; aHIHAT [iNEXTBACK] =aHIHAT [iNEXTBACK] --aUP [iNEXTBACK]; } 壊す;ケース4:スイッチ(iNEXTBACK){ケース0:aHIHAT_PEDAL [iNEXTBACK] =aHIHAT_PEDAL [iNEXTBACK] --aUP [iNEXTBACK];壊す;ケース2:aHIHAT_PEDAL [iNEXTBACK] =aHIHAT_PEDAL [iNEXTBACK] --aUP [iNEXTBACK];壊す; } 壊す;ケース5:aKICK [iNEXTBACK] =aKICK [iNEXTBACK] --aUP [iNEXTBACK];壊す;ケース6:aSETTING [iNEXTBACK] =aSETTING [iNEXTBACK] --aUP_ADVANCE [iNEXTBACK];壊す; } bButtonState =false; delay(30); } //プッシュボタンUP;下;次;戻るif(iButton_up ==LOW &&bButtonState ==true &&bButtonState_set ==true){iUPDOWN =++ iUPDOWN; bButtonState =false; delay(30); } if(iButton_down ==LOW &&bButtonState ==true &&bButtonState_set ==true){iUPDOWN =--iUPDOWN; bButtonState =false; delay(30); } if(iButton_next ==LOW &&bButtonState ==true &&bButtonState_set ==true){iNEXTBACK =++ iNEXTBACK; bButtonState =false; delay(30); } if(iButton_back ==LOW &&bButtonState ==true &&bButtonState_set ==true){iNEXTBACK =--iNEXTBACK; bButtonState =false; delay(30); } if(bButtonState ==false &&iButton_up ==HIGH &&iButton_down ==HIGH &&iButton_next ==HIGH &&iButton_back ==HIGH &&iButton_set ==HIGH){// HIGHはArduino.hで定義されています40行目スイッチ(iUPDOWN){ケース0:lcd.clear(); lcd.print(aINSTRUMENT [iUPDOWN]); lcd.setCursor(0、1); lcd.print(aSETTING [iNEXTBACK]); lcd.setCursor(12、1); lcd.print(aSNARE [iNEXTBACK]);壊す;ケース1:lcd.clear(); lcd.print(aINSTRUMENT [iUPDOWN]); lcd.setCursor(0、1); lcd.print(aSETTING [iNEXTBACK]); lcd.setCursor(12、1); lcd.print(aSNARE_RIM [iNEXTBACK]);壊す;ケース2:lcd.clear(); lcd.print(aINSTRUMENT [iUPDOWN]); lcd.setCursor(0、1); lcd.print(aSETTING [iNEXTBACK]); lcd.setCursor(12、1); lcd.print(aHIHAT [iNEXTBACK]);壊す;ケース3:lcd.clear(); lcd.print(aINSTRUMENT [iUPDOWN]); lcd.setCursor(0、1); lcd.print(aSETTING [iNEXTBACK]); lcd.setCursor(12、1); lcd.print(aHIHAT_CLOSE [iNEXTBACK]);壊す;ケース4:lcd.clear(); lcd.print(aINSTRUMENT [iUPDOWN]); lcd.setCursor(0、1); lcd.print(aSETTING [iNEXTBACK]); lcd.setCursor(12、1); lcd.print(aHIHAT_PEDAL [iNEXTBACK]);壊す;ケース5:lcd.clear(); lcd.print(aINSTRUMENT [iUPDOWN]); lcd.setCursor(0、1); lcd.print(aSETTING [iNEXTBACK]); lcd.setCursor(12、1); lcd.print(aKICK [iNEXTBACK]);壊す;ケース6:lcd.clear(); lcd.print(aINSTRUMENT [iUPDOWN]); lcd.setCursor(0、1); lcd.print(aSETTING_ADVANCE [iNEXTBACK]); lcd.setCursor(12、1); lcd.print(aSETTING [iNEXTBACK]);壊す; } bButtonState =true; } //機器センサー//スネアドラムif(iPiezoValue_A0> aSNARE [0] &&bSnareFlag ==false){for(int i =0; i aSNARE [4]){aSNARE [4] =iPeak_A0; } if(iPeak_A1> aSNARE_RIM [4]){aSNARE_RIM [4] =iPeak_A1; }} aSNARE [5] =aSNARE [4]; aSNARE_RIM [5] =aSNARE_RIM [4]; aSNARE [4] =map(aSNARE [4]、aSNARE [0]、aSNARE [1]、0、127); aSNARE_RIM [4] =map(aSNARE_RIM [4]、aSNARE_RIM [0]、aSNARE_RIM [1]、0、127); aSNARE [4] =(aSNARE [4] * aSNARE [4])/ 127; //カーブ設定// aSNARE_RIM [4] =(aSNARE_RIM [4] * aSNARE_RIM [4])/ 127; if(aSNARE [4] <=1){aSNARE [4] =1; } if(aSNARE [4]> 127){aSNARE [4] =127; } if(aSNARE_RIM [4] <=0){aSNARE_RIM [4] =0; } if(aSNARE_RIM [4]> 127){aSNARE_RIM [4] =127; } if(aSNARE_RIM [5]> aSETTING [1]){MIDI.sendNoteOn(aSNARE_RIM [2]、aSNARE_RIM [4]、1); //(音符、速度、チャンネル)MIDI.sendNoteOn(aSNARE_RIM [2]、0、1); lcd.clear(); lcd.print( "SNARE RIM"); lcd.setCursor(0、1); lcd.print(aSNARE_RIM [4]); bSnareFlag =true; } // else if(aSNARE [5]> aSNARE_RIM [5])else {MIDI.sendNoteOn(aSNARE [2]、aSNARE [4]、1); //(音符、速度、チャンネル)MIDI.sendNoteOn(aSNARE [2]、0、1); lcd.clear(); lcd.print( "SNARE HEAD"); lcd.setCursor(0、1); lcd.print(aSNARE [4]); //lcd.setCursor(10、1); //lcd.print(aSNARE_RIM[5]); bSnareFlag =true; }} // Hi-Hat Cymbal if(iPiezoValue_A2> aHIHAT [0] &&bHihatFlag ==false){for(int i =0; i aHIHAT [4]){aHIHAT [4] =iPeak_A2; }} aHIHAT [5] =aHIHAT [4]; aHIHAT [4] =map(aHIHAT [4]、aHIHAT [0]、aHIHAT [1]、0、127); aHIHAT [4] =(aHIHAT [4] * aHIHAT [4])/ 127; if(aHIHAT [4] <=1){aHIHAT [4] =1; } if(aHIHAT [4]> 127){aHIHAT [4] =127; } if(iPiezoValue_A0 =aHIHAT_PEDAL [0]){MIDI.sendNoteOn(aHIHAT_CLOSE [2]、aHIHAT [4]、1); MIDI.sendNoteOn(aHIHAT_CLOSE [2]、0、1); lcd.clear(); lcd.print( "HIHAT CLOSE"); lcd.setCursor(0、1); lcd.print(aHIHAT [4]); bHihatFlag =true; }} //ハイハットペダルif(iPiezoValue_A0> aHIHAT_PEDAL [0] &&bPedalFlag ==false){MIDI.sendNoteOn(aHIHAT_PEDAL [2]、aSETTING [2]、1); //(音符、速度、チャンネル)MIDI.sendNoteOn(aHIHAT_PEDAL [2]、0、1); lcd.clear(); lcd.print( "HIHAT PEDAL"); lcd.setCursor(0、1); lcd.print(aSETTING [2]); bPedalFlag =true; } //ドラムをキックif(iPiezoValue_A3> aKICK [0] &&bKickFlag ==false){for(int i =0; i aKICK [4]){aKICK [4] =iPeak_A3; }} aKICK [5] =aKICK [4]; aKICK [4] =map(aKICK [4]、aKICK [0]、aKICK [1]、0、127); aKICK [4] =(aKICK [4] * aKICK [4])/ 127; if(aKICK [4] <=1){aKICK [4] =1; } if(aKICK [4]> 127){aKICK [4] =127; } MIDI.sendNoteOn(aKICK [2]、aKICK [4]、1); MIDI.sendNoteOn(aKICK [2]、0、1); lcd.clear(); lcd.print( "KICK"); lcd.setCursor(0、1); lcd.print(aKICK [4]); bKickFlag =true; } // --- BEGIN '進行中のコード' --- //// ---間違っている可能性がありますが、これは見た目です---不思議なことに、このシーケンスの目的は何ですか? -// // I =(A0); //前のコード//-iSensorValue_A0を整数として宣言する必要がありますか?これはiPiezoValue_A0とどのように関連していますか? -// if(iSensorValue_A0 <(aSNARE [5] *(0.01 * aSNARE [3]))){bSnareFlag =false; } if(iPiezoValue_A0 <=aHIHAT_PEDAL [0] &&iPiezoValue_A2 <(aHIHAT [5] *(0.01 * aHIHAT [3]))&&bHihatFlag ==true){delay(aSETTING [3]); // iSensorValue_A1はanalogRead(A2)を読み取っていますが、これはaHIHAT_PEDAL(analogRead(A2)int iSensorValue_A1 =analogRead(A2); if(iSensorValue_A1 <(aHIHAT [5] *(0.01 * aHIHAT [3]))){ bHihatFlag =false;}} if(iPiezoValue_A0> =aHIHAT_PEDAL [0] &&iPiezoValue_A2 <(aHIHAT [5] *(0.01 * aHIHAT [3]))&&bHihatFlag ==true){delay(aSETTING [3]); int iSensorValue_A2 =analogRead(A2); if(iSensorValue_A2 <(aHIHAT [5] *(0.01 * aHIHAT [3]))){bHihatFlag =false;}} if(iPiezoValue_A3 <(aKICK [5] *(0.01 * aKICK [3] ))&&bKickFlag ==true){delay(aSETTING [3]); //-宣言されたiSensorValue_A3はiPiezoValue_A3である必要がありますか?iSensorValue_A3は宣言されていますが、どこでも使用されていませんか? [5] *(0.01 * aKICK [3]))){bKickFlag =false;}} if(iPiezoValue_A0 <=aHIHAT_PEDAL [0] &&bPedalFlag ==true){bPedalFlag =false;} // --- END 'コード進行中 '--- //}
ハロードラム
回路図

製造プロセス