GM drum pad demo program

Dependencies:   MPR121 mbed

使用機材

購入はこちら。
https://www.switch-science.com/catalog/1489/
https://www.switch-science.com/catalog/1966/
https://www.switch-science.com/catalog/1624/

接続(Capacitive Touch Keypadの場合)

LPCXpresso824-MAXCapacitive Touch Keypad
GNDGND
A4SDA
A5SCL
D2IRQ
+3V3VCC

接続(Touch Shieldの場合)

Touch Shieldに足の長いピンソケットを半田付けして、動画の様にそのままeVY1ボードに接続します。

制御について

MPR121から取得したタッチ情報を使用して、MIDIのノートオン、ノートオフをeVY1にシリアルで送信しています。ソースコード中の key_tbl[] の値を変更すれば、キーに割り当てた音色を変えることが出来ます。ドラム用音色はこちらを参考にして下さい。

Files at this revision

API Documentation at this revision

Comitter:
MACRUM
Date:
Fri Mar 18 04:58:12 2016 +0000
Parent:
0:771fd7f08681
Commit message:
* Extended number of keypads; * Added more drum percussion sound; * Fixed key hold error

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 771fd7f08681 -r db4dbd6734e6 main.cpp
--- a/main.cpp	Thu Mar 10 05:12:57 2016 +0000
+++ b/main.cpp	Fri Mar 18 04:58:12 2016 +0000
@@ -30,25 +30,32 @@
 I2C i2c(A4, A5);
 InterruptIn irq(D2);
 
-#define LED_ON  0
-#define LED_OFF 1
+#define LED_ON    0
+#define LED_OFF   1
+#define NUM_PADS 12
 
 MPR121 touch_pad(i2c, irq, MPR121::ADDR_VSS);
 RawSerial midi(D1, NC);
 
-const int key_tbl[9] = {
-    38, // 9
-    39, // 6
-    41, // 3
-    42, // 8
-    45, // 5
-    49, // 2
-    67, // 7
-    79, // 4
-    36, // 1
+const int key_tbl[NUM_PADS] = {
+    38, // 0  Snare Drum 1
+    39, // 1  Hand Clap
+    46, // 2  Open Hi-hat
+    42, // 3  Closed Hi-hat
+
+    49, // 4  Crash Cymbal 1
+    48, // 5  High Tom 2
+    45, // 6  Mid Tom 2
+    41, // 7  Low Tom 2
+
+    56, // 8  Cowbell
+    51, // 9  Ride Cymbal 1
+    52, // 10 Chinese Cymbal
+    36, // 11 Bass Drum 1
+    
 };
 
-int key_pressed[9];
+int key_pressed[NUM_PADS];
 
 int main()
 {
@@ -58,10 +65,6 @@
     midi.baud(31250);
     wait(3.5);    // Wait few seconds for booting eVY1-Shleld.
 
-    // Initialize (Phonetic symbols - eVocaloid)
-    const uint8_t aMsgInit[] = "\xF0\x43\x79\x09\x00\x50\x10" "4 a\0" "\xF7";
-    for (uint32_t i = 0; i < sizeof(aMsgInit)-1; midi.putc(aMsgInit[i++]));
-
     const uint8_t aMsgVol[] = "\xB9\x07\x70";
     for (uint32_t i = 0; i < sizeof(aMsgVol)-1; midi.putc(aMsgVol[i++]));
 
@@ -69,7 +72,7 @@
         if(touch_pad.isPressed()) {
             uint16_t button_val = touch_pad.buttonPressed();
             if (button_val != 0) {
-                for(int i=0; i<9; i++) {
+                for(int i=0; i<NUM_PADS; i++) {
                     if ((button_val & (1 << i))) {
                         if (key_pressed[i] == 0) {
                             midi.putc(0x99);       // note on CH10
@@ -77,10 +80,12 @@
                             midi.putc(100);        // velocity
                             key_pressed[i] = 1;
                         }
+                    } else {
+                        key_pressed[i] = 0;
                     }
                 }
             } else {
-                for(int i=0; i<9; i++) {
+                for(int i=0; i<NUM_PADS; i++) {
                     if ((button_val & (1 << i)) == 0) {
                         key_pressed[i] = 0;
                         midi.putc(0x89);       // note off CH10