![](/media/cache/profiles/9bd5ee6fe55aaeb673025dbcb8f939c1.50x50_q85.jpg)
GM drum pad demo program
使用機材
購入はこちら。
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-MAX | Capacitive Touch Keypad |
---|---|
GND | GND |
A4 | SDA |
A5 | SCL |
D2 | IRQ |
+3V3 | VCC |
接続(Touch Shieldの場合)
Touch Shieldに足の長いピンソケットを半田付けして、動画の様にそのままeVY1ボードに接続します。
制御について
MPR121から取得したタッチ情報を使用して、MIDIのノートオン、ノートオフをeVY1にシリアルで送信しています。ソースコード中の key_tbl[] の値を変更すれば、キーに割り当てた音色を変えることが出来ます。ドラム用音色はこちらを参考にして下さい。
main.cpp@1:db4dbd6734e6, 2016-03-18 (annotated)
- Committer:
- MACRUM
- Date:
- Fri Mar 18 04:58:12 2016 +0000
- Revision:
- 1:db4dbd6734e6
- Parent:
- 0:771fd7f08681
* Extended number of keypads; * Added more drum percussion sound; * Fixed key hold error
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MACRUM | 0:771fd7f08681 | 1 | /* Drum pad demo program |
MACRUM | 0:771fd7f08681 | 2 | * Copyright (c) 2016 ARM Limited |
MACRUM | 0:771fd7f08681 | 3 | * |
MACRUM | 0:771fd7f08681 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
MACRUM | 0:771fd7f08681 | 5 | * you may not use this file except in compliance with the License. |
MACRUM | 0:771fd7f08681 | 6 | * You may obtain a copy of the License at |
MACRUM | 0:771fd7f08681 | 7 | * |
MACRUM | 0:771fd7f08681 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
MACRUM | 0:771fd7f08681 | 9 | * |
MACRUM | 0:771fd7f08681 | 10 | * Unless required by applicable law or agreed to in writing, software |
MACRUM | 0:771fd7f08681 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
MACRUM | 0:771fd7f08681 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
MACRUM | 0:771fd7f08681 | 13 | * See the License for the specific language governing permissions and |
MACRUM | 0:771fd7f08681 | 14 | * limitations under the License. |
MACRUM | 0:771fd7f08681 | 15 | * * |
MACRUM | 0:771fd7f08681 | 16 | * @author Toyomasa Watarai |
MACRUM | 0:771fd7f08681 | 17 | * @version 1.0 |
MACRUM | 0:771fd7f08681 | 18 | * @date 10-March-2016 |
MACRUM | 0:771fd7f08681 | 19 | * |
MACRUM | 0:771fd7f08681 | 20 | * Sparkfun Touch Sheild |
MACRUM | 0:771fd7f08681 | 21 | * eVY1 board |
MACRUM | 0:771fd7f08681 | 22 | * LPCXpresso842-MAX |
MACRUM | 0:771fd7f08681 | 23 | * |
MACRUM | 0:771fd7f08681 | 24 | */ |
MACRUM | 0:771fd7f08681 | 25 | |
MACRUM | 0:771fd7f08681 | 26 | #include "mbed.h" |
MACRUM | 0:771fd7f08681 | 27 | #include "MPR121.h" |
MACRUM | 0:771fd7f08681 | 28 | |
MACRUM | 0:771fd7f08681 | 29 | DigitalOut myled(LED1); |
MACRUM | 0:771fd7f08681 | 30 | I2C i2c(A4, A5); |
MACRUM | 0:771fd7f08681 | 31 | InterruptIn irq(D2); |
MACRUM | 0:771fd7f08681 | 32 | |
MACRUM | 1:db4dbd6734e6 | 33 | #define LED_ON 0 |
MACRUM | 1:db4dbd6734e6 | 34 | #define LED_OFF 1 |
MACRUM | 1:db4dbd6734e6 | 35 | #define NUM_PADS 12 |
MACRUM | 0:771fd7f08681 | 36 | |
MACRUM | 0:771fd7f08681 | 37 | MPR121 touch_pad(i2c, irq, MPR121::ADDR_VSS); |
MACRUM | 0:771fd7f08681 | 38 | RawSerial midi(D1, NC); |
MACRUM | 0:771fd7f08681 | 39 | |
MACRUM | 1:db4dbd6734e6 | 40 | const int key_tbl[NUM_PADS] = { |
MACRUM | 1:db4dbd6734e6 | 41 | 38, // 0 Snare Drum 1 |
MACRUM | 1:db4dbd6734e6 | 42 | 39, // 1 Hand Clap |
MACRUM | 1:db4dbd6734e6 | 43 | 46, // 2 Open Hi-hat |
MACRUM | 1:db4dbd6734e6 | 44 | 42, // 3 Closed Hi-hat |
MACRUM | 1:db4dbd6734e6 | 45 | |
MACRUM | 1:db4dbd6734e6 | 46 | 49, // 4 Crash Cymbal 1 |
MACRUM | 1:db4dbd6734e6 | 47 | 48, // 5 High Tom 2 |
MACRUM | 1:db4dbd6734e6 | 48 | 45, // 6 Mid Tom 2 |
MACRUM | 1:db4dbd6734e6 | 49 | 41, // 7 Low Tom 2 |
MACRUM | 1:db4dbd6734e6 | 50 | |
MACRUM | 1:db4dbd6734e6 | 51 | 56, // 8 Cowbell |
MACRUM | 1:db4dbd6734e6 | 52 | 51, // 9 Ride Cymbal 1 |
MACRUM | 1:db4dbd6734e6 | 53 | 52, // 10 Chinese Cymbal |
MACRUM | 1:db4dbd6734e6 | 54 | 36, // 11 Bass Drum 1 |
MACRUM | 1:db4dbd6734e6 | 55 | |
MACRUM | 0:771fd7f08681 | 56 | }; |
MACRUM | 0:771fd7f08681 | 57 | |
MACRUM | 1:db4dbd6734e6 | 58 | int key_pressed[NUM_PADS]; |
MACRUM | 0:771fd7f08681 | 59 | |
MACRUM | 0:771fd7f08681 | 60 | int main() |
MACRUM | 0:771fd7f08681 | 61 | { |
MACRUM | 0:771fd7f08681 | 62 | touch_pad.init(); |
MACRUM | 0:771fd7f08681 | 63 | touch_pad.enable(); |
MACRUM | 0:771fd7f08681 | 64 | |
MACRUM | 0:771fd7f08681 | 65 | midi.baud(31250); |
MACRUM | 0:771fd7f08681 | 66 | wait(3.5); // Wait few seconds for booting eVY1-Shleld. |
MACRUM | 0:771fd7f08681 | 67 | |
MACRUM | 0:771fd7f08681 | 68 | const uint8_t aMsgVol[] = "\xB9\x07\x70"; |
MACRUM | 0:771fd7f08681 | 69 | for (uint32_t i = 0; i < sizeof(aMsgVol)-1; midi.putc(aMsgVol[i++])); |
MACRUM | 0:771fd7f08681 | 70 | |
MACRUM | 0:771fd7f08681 | 71 | while(1) { |
MACRUM | 0:771fd7f08681 | 72 | if(touch_pad.isPressed()) { |
MACRUM | 0:771fd7f08681 | 73 | uint16_t button_val = touch_pad.buttonPressed(); |
MACRUM | 0:771fd7f08681 | 74 | if (button_val != 0) { |
MACRUM | 1:db4dbd6734e6 | 75 | for(int i=0; i<NUM_PADS; i++) { |
MACRUM | 0:771fd7f08681 | 76 | if ((button_val & (1 << i))) { |
MACRUM | 0:771fd7f08681 | 77 | if (key_pressed[i] == 0) { |
MACRUM | 0:771fd7f08681 | 78 | midi.putc(0x99); // note on CH10 |
MACRUM | 0:771fd7f08681 | 79 | midi.putc(key_tbl[i]); // note number |
MACRUM | 0:771fd7f08681 | 80 | midi.putc(100); // velocity |
MACRUM | 0:771fd7f08681 | 81 | key_pressed[i] = 1; |
MACRUM | 0:771fd7f08681 | 82 | } |
MACRUM | 1:db4dbd6734e6 | 83 | } else { |
MACRUM | 1:db4dbd6734e6 | 84 | key_pressed[i] = 0; |
MACRUM | 0:771fd7f08681 | 85 | } |
MACRUM | 0:771fd7f08681 | 86 | } |
MACRUM | 0:771fd7f08681 | 87 | } else { |
MACRUM | 1:db4dbd6734e6 | 88 | for(int i=0; i<NUM_PADS; i++) { |
MACRUM | 0:771fd7f08681 | 89 | if ((button_val & (1 << i)) == 0) { |
MACRUM | 0:771fd7f08681 | 90 | key_pressed[i] = 0; |
MACRUM | 0:771fd7f08681 | 91 | midi.putc(0x89); // note off CH10 |
MACRUM | 0:771fd7f08681 | 92 | midi.putc(key_tbl[i]); // note number |
MACRUM | 0:771fd7f08681 | 93 | midi.putc(0); // velocity |
MACRUM | 0:771fd7f08681 | 94 | } |
MACRUM | 0:771fd7f08681 | 95 | } |
MACRUM | 0:771fd7f08681 | 96 | } |
MACRUM | 0:771fd7f08681 | 97 | myled = (button_val>0) ? LED_ON : LED_OFF; |
MACRUM | 0:771fd7f08681 | 98 | } |
MACRUM | 0:771fd7f08681 | 99 | } |
MACRUM | 0:771fd7f08681 | 100 | } |