Tentang proyek ini
Hai.
Ini adalah drum kit minimal menggunakan arduino UNO.
Pertama-tama, silakan periksa halaman instruksi ini.
https://blog.arduino.cc/2017/01/19/a-3d-printed-e-drum-pad/
Sejak saya mulai membuat ini, saya terpikat oleh piezo dan drum elektronik.
Saya terpesona oleh mekanisme drum elektronik yang sangat sederhana dan penemuan hebat yang disebut MIDI.
Dengan kata lain, saya tidak bisa puas hanya dengan membuat pembalut.
Drum kit ini secara kasar dibagi menjadi dua produksi.
1.Pad dibuat dengan printer 3d dan kertas tebal.
2.Trigger midi converter dengan arduino UNO .
Sinyal yang dikirim dari pad " 1 " diproses oleh arduino " 2 " dan diubah menjadi sinyal MIDI. Dan sinyal MIDI ditransmisikan dari arduino ke iPhone, laptop, dll, dan suara keluar.
Anda tidak perlu menyiapkan power supply selain smartphone atau PC.
Yang Anda Butuhkan
Alat
Pencetak 3D
Pemotong Laser (Ekstra)
kunci pas hex
pisau pemotong
pemotong lingkaran
Solder Besi
・ Pemotong Pipa
latihan pengemudi
mata bor 9mm / 10mm
Bahan
Kertas setebal 1mm
Filamen PLA
Lembar Busa Spons 5mm / 10mm
MDF 2.5mm / 5.5mm (Ekstra)
M6 - baut dan mur 70mm
M6 - baut dan mur 50mm
M3 - baut dan mur 10mm
M3 - baut dan mur 15mm
M3 - baut dan mur 25mm
Sekrup M2
Pipa baja tahan karat berdiameter 13 mm
Perangkat Keras Drum
Kepala jaring 10 inci / 8 inci
Snare stand (Semuanya OK. Saya menggunakan YAMAHA SS662.)
Hi-hat stand (Semuanya OK. Saya menggunakan YAMAHA HS650A)
Kick pedal (Semuanya OK. Saya menggunakan YAMAHA FP7210A)
Stik drum
Langkah 1:Pencetakan 3D
Semua data ada di Thingiverse dan GitHub.
Silakan gunakan Ver.2 untuk pelek.
Saya mencetak bagian dengan pengisi pada 20%. Ketebalan lapisan adalah 0,3 mm.
Anda juga dapat menggunakan pemotong laser untuk membuat bantalan.
https://github.com/RyoKosaka/drums/tree/master/vector
Langkah 2:Merakit
Gunakan baut dan mur M3-10mm untuk menyambungkan bagian-bagian tersebut bersama-sama.
Gunakan baut M3-15 mm atau M3-25 mm untuk bagian tengah untuk mengencangkan bagian bawah satu sama lain.
Langkah 3:Membuat Shell
Pertama, tinggi cangkang adalah 55 mm.
Silakan buat tiga pita dengan lebar 55 mm.
Panjangnya sedikit lebih panjang dari panjang yang menutupi pad.
Karena ada celah di bagian bawah, coba masukkan satu pita ke dalam celah itu.
Potong pita sehingga menjadi panjang lingkaran yang sempurna.
Ulangi ini 3 kali dan overlay menggunakan perekat.
Saat cangkang mengering, dengan kepala jala tetap, buat lubang berdiameter 9 mm untuk soket.
Anda dapat menggunakan mur kupu-kupu, tetapi saya juga membuat kunci penyetelan yang dapat dikencangkan bahkan dengan mur biasa, jadi silakan gunakan dengan segala cara.
Untuk memasang kepala jala, gunakan baut M6-70 mm.
Setelah Anda membuat lubang, lepaskan kepala jala lagi untuk meletakkan piezo
Langkah 4:Memasang Piezo
SNARE
Dalam kasus jerat, gunakan dua piezo seperti yang ditunjukkan pada gambar.
Hubungkan kabel merah piezo ke masing-masing ujung dan cincin.
Kedua kabel hitam terhubung ke selongsong.
Jangan lupa untuk memasang kabel melalui lubang di pelat sensor saat menyolder.
Piezo untuk bagian kepala (piezo terhubung ke ujung) perlu diapit dengan busa spon setebal 10 mm seperti pada gambar.
Satu di bawah, tiga di atas. Dan buat 3 kerucut teratas seperti gambar.
Kemudian letakkan di pelat sensor.
Tendang
Karena kick pad hanya menggunakan satu piezo, hanya ujung yang dapat digunakan.
Tidak diperlukan pelat sensor. Dua busa spons di bawah piezo
Tempatkan sensor offset dari tengah.
Karena arduino tidak bisa menilai kekuatan pukulan jika beater mengenai sensor secara langsung.
HI-HAT
Sirkuitnya sama dengan kick pad.
Letakkan sepotong busa spons setebal 10 mm di bawah piezo.
Piezo lembut. Berhati-hatilah agar tidak tertekuk atau terluka.
Langkah 5:Snare Pad 10 inci
Pertama pasang sensor untuk pelek.
Perbaiki pelat sensor. Perbaiki dengan tegas. Buat ujung kerucut terlihat 2-3 mm jika dilihat dari samping.
Tentu saja, prosedur yang sama juga digunakan saat menggunakan pad 8 inci sebagai snare.
Langkah 6:PAD Tendangan 8 inci
Pertama, potong pipa baja tahan karat berdiameter 13 mm.
Buat dua 200 mm dan dua 365 mm.
Karena panjangnya dapat disesuaikan, meskipun ada beberapa kesalahan dalam panjangnya, tidak apa-apa.
Kumpulkan dengan mengacu pada gambar.
Untuk memperbaiki pipa, itu dirancang agar mur M3 dapat dimuat di dalam bagian.
Perbaiki pipa dengan aman. Gunakan baut dan mur M3-15 mm.
Langkah 7:Hi-Hat 12 inci
Setelah membuat cangkang dengan kertas tebal, saya pikir jika Anda menggunakan kertas tebal saya bisa membuat simbal.
Pertama. Potong kertas tebal menjadi lingkaran dengan diameter 300 mm. Buat tiga dari ini.
Selanjutnya, buat takik dari tengah.
Terakhir, takik kedua dibuat dari titik yang berjarak 10 mm sejajar dengan takik pertama.
Dengan cara ini, dibuat tiga pac-man dengan mulut kecil terbuka.
Kemudian tutup mulut Pac Man dengan hati-hati dengan selotip untuk membuatnya menjadi bentuk simbal.
Oleskan perekat dan lapisi ini. Jangan lupa untuk memperpanjang perekat dengan bersih dan tipis
Pegang dengan kuat dengan tangan Anda, lalu letakkan beban di sekitar dan keringkan.
Untuk membungkam, letakkan spons setebal 5 mm dan bor lubang. Anda tidak dapat membuka lubang dengan rapi, tetapi Anda dapat menyembunyikan lubangnya sehingga tidak apa-apa.
Lengkapi dengan memasang sensor mount dan cable guide dengan double tape. Mungkin akan lebih mudah jika Anda menggunakan lem tembak.
Langkah 8 :Pengontrol Hi-Hat
Hi-Hat Controller mengirimkan pembukaan dan penutupan hi-hat ke arduino.
Sirkuitnya sangat sederhana.
Itu dibuat dengan menggabungkan tiga bagian.
Pasang FSR ke bagian bawah dan perbaiki soket. FSR dapat digunakan bahkan jika lubang dibuka.
Pasang spons 10 mm ke FSR seperti foto.
Pasang penutup dengan baut M3 - 10 mm.
Meskipun hanya TINGGI dan RENDAH, Anda mungkin bertanya-tanya mengapa saya menggunakan FSR.
Saya menggunakan FSR untuk menyesuaikan dengan modul suara seperti Roland dan Yamaha.
Dan dalam sumber suara eksklusif untuk drum seperti EZ DRUMMER 2, ada beberapa tahap dalam tingkat pembukaan hi-hat.
Jika FSR, dimungkinkan untuk merespons hanya dengan memodifikasi kode. Namun, saya belum mencobanya.
Langkah 9 :USB - MIDI
Apa yang bisa kita lakukan dalam langkah ini?
Dengan kabel usb saja, Anda dapat mengirim sinyal midi dari arduino.
Dengan kata lain, buat arduino dikenali oleh iPhone dll. sebagai perangkat midi tanpa perangkat keras tambahan.
Pertama-tama, periksa halaman ini.
http://morecatlab.akiba.coocan.jp/lab/index.php/aruino/midi-firmware-for-arduino-uno-moco/
https://github.com/kuwatay/mocolufa
Jika Anda menghubungkan arduino UNO normal langsung ke iPhone, Anda akan mendapatkan pesan kesalahan seperti "Arduino UNO tidak kompatibel".
Jadi, Anda harus menulis ulang chip USB (ATmega16U2) yang digunakan di arduino UNO.
https://www.arduino.cc/en/Hacking/DFUProgramming8U2
Instruksi ini adalah cara menulis ulang file hex.
Silakan lanjutkan menurut situs ini sampai deskripsi di bawah ini.
sudo dfu-programmer atmega16u2 flash Arduino-usbserial-uno.hex
Ganti saja "Arduino-usbserial-uno.hex" dengan "dualMoco.hex".
Oleh karena itu,
sudo dfu-programmer atmega16u2 flash dualMoco.hex
Setelah menulis ulang, Arduino Anda akan dikenali sebagai perangkat MIDI.
Jika Anda melakukan hubungan pendek pada pin seperti yang ditunjukkan pada gambar, itu akan dikenali sebagai Arduino normal.
Jika tidak (bila tidak dihubung singkat), arduino UNO akan dikenali sebagai perangkat MIDI.
Dengan kata lain, ketika menulis kode menggunakan IDE arduino, Anda harus melakukan hubungan pendek pada pin seperti yang ditunjukkan pada gambar.
Langkah 10 :Pemicu ke Konverter MIDI
Ada arduino UNO dan perisai di dalam kotak.
Lihat gambar fritzing untuk sirkuit pelindung.
Dioda adalah untuk perlindungan tetapi saya melihat informasi bahwa arduino UNO memiliki sirkuit perlindungan, dioda mungkin tidak diperlukan. Apakah ada yang tahu tentang ini?
Setelah mencetak model casing dan covernya terlebih dahulu, ada baiknya membuat shield yang sesuai dengannya.
Cover model 3D juga ada, tapi saya buat covernya dengan laser cutter. Silakan pilih mana yang Anda suka.
Langkah 11:Mainkan dengan GarageBand
Mulai garageband dan hubungkan. Tidak ada pengaturan yang terlalu sulit.
Ada sejumlah DAW untuk PC yang dapat digunakan pada drum set ini, termasuk GarageBand.
Diantaranya, Hidrogen gratis dan Anda dapat menambahkan suara.
Langkah 12 :Menyetel
Dalam membuat kodenya, setiap kali mengubah nilainya, saya kesulitan untuk menulis ulang kode, jadi saya ingin mengubah nilainya dengan arduino saja.
Dengan kata lain, ini dibuat untuk men-debug kode, jadi ada item yang tidak perlu diubah.
Namun demikian, pengaturan diperlukan tergantung pada ukuran piezo, ukuran bantalan, kekerasan busa spons.
Pilih instrumen dengan tombol INC / DEC dan pilih item pengaturan dengan tombol NEXT / BACK. Saat tombol EDIT ditekan saat instrumen dan item yang ingin Anda atur ditampilkan, Anda dapat mengubah nilainya dengan tombol INC / DEC. Kemudian, menekan tombol EDIT lagi untuk mengonfirmasi perubahan.
Jika Anda menonton di bagian akhir video, Anda akan memahami cara mengoperasikannya.
BATAS
Nilai terendah yang mengeluarkan suara
SENSITIVITAS
Sensitivitas sensor. Jika Anda menurunkannya, Anda akan mendapatkan kecepatan tinggi bahkan jika Anda memukul dengan lembut.
CATATAN
Nomor catatan. Dengan mengubah, Anda dapat mengubah instrumen. Silakan lihat gambar.
BENDERA
Nilai untuk menilai bahwa pemukulan sudah berakhir. Anda tidak perlu mengubahnya terlalu banyak. Akan lebih baik untuk mengatur nilainya dari 1 hingga 10. Jika Anda menaikkan nilainya terlalu banyak, Anda akan mendapatkan suara dua kali dengan satu pukulan. Jika Anda menurunkannya terlalu banyak, Anda mungkin akan kehilangan suara saat Anda menekannya berulang kali.
WAKTU PINDAI
Dalam mencari puncak, nilai diambil secara berurutan selama beberapa milidetik setelah melebihi ambang batas. Nilai tertinggi di antara mereka akan mencapai puncaknya. Beberapa milidetik ini adalah SCANTIME. Tidak perlu mengubahnya.
HEAD / RIM
Atur kemudahan pelek. Menaikkannya membuatnya sulit untuk terdengar. Jika Anda menurunkannya terlalu keras, pelek akan berbunyi saat Anda memukul kepala. Mengenai penilaian kepala dan pelek, mungkin perlu untuk memperbaiki kode
PEDAL VELO
Tidak seperti bantalan lainnya, kecepatan pedal konstan. Nilai awal adalah 100. Silakan ubah ke nilai favorit Anda.
WAKTU MASKER
Ini adalah nilai yang terkait dengan FLAG. Tidak perlu mengubahnya. Jika Anda menaikkannya, Anda mungkin tidak mendengar suara saat Anda menekan terus menerus.
Langkah 13 :Fusion 360
Beberapa bagian mungkin tidak dapat digunakan kecuali ukurannya diubah. Sulit untuk mengedit data STL. Jadi saya mengunggah data fusion 360. Namun, karena saya mengedit data saat coba-coba, lebih baik tidak terlalu bergantung pada fungsi riwayat.
https://github.com/RyoKosaka/drums/tree/master/Fusion360
TAMBAHAN
Langkah ekstra ada di instruksi.
https://www.instructables.com/id/Arduino-Minimal-Drum-Kit/
Dan, proses produksi terperinci dipublikasikan di blog ini.
Periksa jika Anda tertarik.
Silakan bertanya apa saja.
Selamat bersenang-senang!
Kode
Halo Drum v2Arduino
Dimodifikasi:05/12/2019 oleh George Brotherston/* Drum MIDI Controller Dibuat:28/06/2017 oleh Ryo Kosaka sebagai " HELLO DRUM " Ver.1.0 Dimodifikasi:05/12/2019 oleh George Brotherston*/// Library Termasuk// #include // Arduino Library (termasuk secara otomatis) // LOW (Baris 41) // HIGH (Baris 40) // INPUT_PULLUP (Baris 47) // digitalRead() (Baris 177) / / analogRead() (Baris 178) #include // Perpustakaan MIDI - Versi:4.3.1 // termasuk // class MIDI (Baris 30) // metode kelas 'mulai' (Baris 55) #include // LiquidCrystal - Versi:1.0.7 // objek lcd dipakai (di bagian Variabel di bawah) dari kelas LiquidCrystal (Baris 45)// Variabel - Deklarasikan dan Inisialisasi // Variabel - Program boolean bSnareFlag =salah; boolean bHihatFlag =salah; boolean bKickFlag =salah; boolean bPedalFlag =salah; boolean bButtonState =benar; boolean bButtonState_set =benar; int iUPDOWN =0; int iNEXTBACK =0; // Array - Program // InstrumentSensor[6] ={threshold, sensitivity, note, flag, velocity, iPeakValue} // 'iPeakValue' dan 'velocity' harus nol untuk semua array InstrumentSensor // Semua 'aHIHAT[]' dan Elemen array 'aHIHAT_CLOSE[]' harus memiliki nilai yang sama kecuali untuk elemen '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] ={ambang batas, sensitivitas, nada, tanda} int aSETTING[4] ={4, 500 ,100 ,1}; // Libraries // LiquidCrystal.h // Konstanta (sudah didefinisikan di Library, masih dalam cakupan? Jika tidak maka tentukan di bawah) // const int rs =12, en =11, d4 =5, d5 =4, d6 =3 , d7 =2; // objek lcd diinstansiasi dari kelas LiquidCrystal (LiquidCrystal.h Baris 45) LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // Kaitkan pin antarmuka LCD ke nomor pin Arduino terkait // MIDI.h // Inisialisasi perpustakaan MIDI_CREATE_DEFAULT_INSTANCE();// Kode Program // Eksekusi Program - Awal (pengaturan program) void setup() { MIDI.begin(10); // mulai (MIDI.h Baris 55) lcd.begin(16, 2); // mulai (LiquidCrystal.h Baris 62) lcd.print("INISIALISASI..."); // print (LiquidCrystal.h Baris 45) lcd.setCursor(0, 1); // setCursor (LiquidCrystal.h Line 82) lcd.print("DRUM MIDI CONTROLLER"); pinMode(6, INPUT_PULLUP); // pinMode (Arduino.h Baris 175); INPUT_PULLUP (Arduino.h Baris 47) pinMode(7, INPUT_PULLUP); pinMode(8, INPUT_PULLUP); pinMode(9, INPUT_PULLUP); pinMode(10, INPUT_PULLUP); } // Eksekusi Program - Steadystate (loop terus menerus sampai daya hilang) void loop() { // Rangkaian Kontroler MIDI Drum // Deklarasi dan Inisialisasi Variabel int iButton_set =digitalRead(6); // Atur Tombol // digitalRead() (Arduino.h Baris 177) int iButton_up =digitalRead(7); // Tombol Atas int iButton_down =digitalRead(8); // Tombol Bawah int iButton_next =digitalRead(9); // Tombol Berikutnya int iButton_back =digitalRead(10); // Tombol Kembali int iPiezoValue_A0 =analogRead(A0); // Piezo - Snare Head // analogRead() (Arduino.h Baris 178) int iPiezoValue_A1 =analogRead(A1); // Piezo - Snare Rim int iPiezoValue_A2 =analogRead(A2); // Hi-hat int iPiezoValue_A3 =analogRead(A3); // Kick Drum int iFSRValue_A4 =analogRead(A4); // Hi-hat Pedal // Edit Mode int aUP[4] ={5, 50, 1,1}; // {ambang batas, sensitivitas, nada, tanda} int aUP_ADVANCE[4] ={1, 50, 1,1}; // {scantime, rim/head, pedal velocity, masktime} // Catatan:array aINSTRUMENT[] tidak dideklarasikan dalam 'Arrays' di atas char* aINSTRUMENT[] ={ "SNARE HEAD", "SNARE RIM", "HIHAT OPEN ", "HIHAT TUTUP", "HIHAT PEDAL", "KICK", "SETTING LANJUTAN" }; // Catatan:aSETTING[] array DIdeklarasikan dalam 'Array' di atas char* aSETTING[] ={ "THRESHOLD", "SENSITIVITY", "CATATAN", "FLAG" }; // Catatan:aSETTING_ADVANCE[] tidak dideklarasikan dalam 'Array' di atas char* aSETTING_ADVANCE[] ={ "SCAN TIME", "HEAD / RIM ","PEDAL VELO", "MASK TIME" }; if (iUPDOWN <0) { iUPDOWN =6; } jika (iUPDOWN> 6) { iUPDOWN =0; } jika (iNEXTBACK <0) { iNEXTBACK =3; } jika (iNEXTBACK> 3) { iNEXTBACK =0; } // Tombol Tekan EDIT // LOW (Arduino.h Baris 41) if (iButton_set ==LOW &&bButtonState ==true &&bButtonState_set ==true) { lcd.clear(); lcd.print("EDIT"); bButtonState =salah; bButtonState_set =salah; penundaan (500); } if (iButton_set ==LOW &&bButtonState ==true &&bButtonState_set ==false) { lcd.clear(); lcd.print("EDIT SELESAI"); bButtonState =salah; bButtonState_set =benar; penundaan (500); } if (iButton_up ==LOW &&bButtonState ==true &&bButtonState_set ==false) { switch (iUPDOWN) { case 0:aSNARE[iNEXTBACK] =aSNARE[iNEXTBACK] + aUP[iNEXTBACK]; merusak; kasus 1:aSNARE_RIM[iNEXTBACK] =aSNARE_RIM[iNEXTBACK] + aUP[iNEXTBACK]; merusak; kasus 2:sakelar (iNEXTBACK) { kasus 2:aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] + aUP[iNEXTBACK]; merusak; default:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] + aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] + aUP[iNEXTBACK]; } merusak; kasus 3:sakelar (iNEXTBACK) { kasus 2:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] + aUP[iNEXTBACK]; merusak; default:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] + aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] + aUP[iNEXTBACK]; } merusak; kasus 4:sakelar (iNEXTBACK) { kasus 0:aHIHAT_PEDAL[iNEXTBACK] =aHIHAT_PEDAL[iNEXTBACK] + aUP[iNEXTBACK]; merusak; kasus 2:aHIHAT_PEDAL[iNEXTBACK] =aHIHAT_PEDAL[iNEXTBACK] + aUP[iNEXTBACK]; merusak; } merusak; kasus 5:aKICK[iNEXTBACK] =aKICK[iNEXTBACK] + aUP[iNEXTBACK]; merusak; case 6:aSETTING[iNEXTBACK] =aSETTING[iNEXTBACK] + aUP_ADVANCE[iNEXTBACK]; merusak; } bButtonState =false; delay(30); } if (iButton_down ==LOW &&bButtonState ==true &&bButtonState_set ==false) { switch (iUPDOWN) { case 0:aSNARE[iNEXTBACK] =aSNARE[iNEXTBACK] - aUP[iNEXTBACK]; merusak; case 1:aSNARE_RIM[iNEXTBACK] =aSNARE_RIM[iNEXTBACK] - aUP[iNEXTBACK]; merusak; case 2:switch (iNEXTBACK) { case 2:aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] - aUP[iNEXTBACK]; merusak; default:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] - aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] - aUP[iNEXTBACK]; } merusak; case 3:switch (iNEXTBACK) { case 2:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] - aUP[iNEXTBACK]; merusak; default:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] - aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] - aUP[iNEXTBACK]; } merusak; case 4:switch (iNEXTBACK) { case 0:aHIHAT_PEDAL[iNEXTBACK] =aHIHAT_PEDAL[iNEXTBACK] - aUP[iNEXTBACK]; merusak; case 2:aHIHAT_PEDAL[iNEXTBACK] =aHIHAT_PEDAL[iNEXTBACK] - aUP[iNEXTBACK]; merusak; } merusak; case 5:aKICK[iNEXTBACK] =aKICK[iNEXTBACK] - aUP[iNEXTBACK]; merusak; case 6:aSETTING[iNEXTBACK] =aSETTING[iNEXTBACK] - aUP_ADVANCE[iNEXTBACK]; merusak; } bButtonState =false; delay(30); } // Pushbuttons UP; DOWN; NEXT; BACK 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 is defined in Arduino.h Line 40 switch (iUPDOWN) { case 0:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aSNARE[iNEXTBACK]); merusak; case 1:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aSNARE_RIM[iNEXTBACK]); merusak; case 2:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aHIHAT[iNEXTBACK]); merusak; case 3:lcd.clear();lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aHIHAT_CLOSE[iNEXTBACK]); merusak; case 4:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aHIHAT_PEDAL[iNEXTBACK]); merusak; case 5:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aKICK[iNEXTBACK]); merusak; case 6:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING_ADVANCE[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aSETTING[iNEXTBACK]); merusak; } bButtonState =true; } // Instrument Sensors // Snare Drum 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; // Curve setting //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); //(note, velocity, channel) 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); //(note, velocity, channel) 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; } } // Hi-hat Pedal if (iPiezoValue_A0> aHIHAT_PEDAL[0] &&bPedalFlag ==false) { MIDI.sendNoteOn(aHIHAT_PEDAL[2], aSETTING[2], 1); // (note, velocity, channel) MIDI.sendNoteOn(aHIHAT_PEDAL[2], 0, 1); lcd.clear(); lcd.print("HIHAT PEDAL"); lcd.setCursor(0, 1); lcd.print(aSETTING[2]); bPedalFlag =true; } // Kick Drum 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 'Code in Progress' --- //// --- I could be wrong, but this is what it appears to be --- and out of curiousity what is purpose of this sequence? -- // // I=(A0); // Previous Code // -- DOES iSensorValue_A0 need to be declared as an integer? How does this relate to 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 is reading analogRead(A2), but this is aHIHAT_PEDAL (which is 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]); // -- Should declared iSensorValue_A3 be iPiezoValue_A3? iSensorValue_A3 is declared but not used anywhere?? int iSensorValue_A3 =analogRead(A3); if (iPiezoValue_A3 <(aKICK[5] * (0.01 * aKICK[3]))) { bKickFlag =false; } } if (iPiezoValue_A0 <=aHIHAT_PEDAL[0] &&bPedalFlag ==true) { bPedalFlag =false; }// --- END 'Code in Progress' --- // }
Hello Drum
Skema
circuit_nZotR7rJMM.fzz