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[] の値を変更すれば、キーに割り当てた音色を変えることが出来ます。ドラム用音色はこちらを参考にして下さい。

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?

UserRevisionLine numberNew 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 }