miniblip USB piano example

Dependencies:   USBDevice mbed

Fork of Fruit_Piano by Seeed

Committer:
pighixxx
Date:
Thu Nov 26 09:27:00 2015 +0000
Revision:
2:1cb69f19f49c
Parent:
1:93bbcf91f356
miniblip USB piano

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pighixxx 2:1cb69f19f49c 1 // miniblip play sound - capacitative + keyboard out
pighixxx 2:1cb69f19f49c 2
yihui 0:4755a81efb1d 3 #include "mbed.h"
pighixxx 2:1cb69f19f49c 4 #include "USBKeyboard.h"
yihui 0:4755a81efb1d 5
yihui 0:4755a81efb1d 6 #define THRESHOLD 2
pighixxx 2:1cb69f19f49c 7 #define TOUCH_N 5
yihui 0:4755a81efb1d 8
yihui 0:4755a81efb1d 9 Ticker tick;
yihui 0:4755a81efb1d 10 USBKeyboard keyboard;
yihui 0:4755a81efb1d 11
yihui 1:93bbcf91f356 12 uint8_t key_map[] = {'a', 'f', 'd', 'g', 'd', 'h', 'j', 'k', 'l', ';', '\'', '\n'};
pighixxx 2:1cb69f19f49c 13 PinName touch_pin[] = {P0_15, P0_14, P0_13, P0_12, P0_11};
yihui 0:4755a81efb1d 14 DigitalInOut *p_touch_io[TOUCH_N];
yihui 0:4755a81efb1d 15
yihui 1:93bbcf91f356 16 uint16_t touch_data[TOUCH_N] = {0, };
yihui 0:4755a81efb1d 17
yihui 0:4755a81efb1d 18 void detect(void)
yihui 0:4755a81efb1d 19 {
yihui 0:4755a81efb1d 20 for (int i = 0; i < TOUCH_N; i++) {
yihui 0:4755a81efb1d 21 uint8_t count = 0;
yihui 0:4755a81efb1d 22 DigitalInOut *touch_io = p_touch_io[i];
yihui 0:4755a81efb1d 23
yihui 0:4755a81efb1d 24 touch_io->input();
yihui 0:4755a81efb1d 25 touch_data[i] <<= 1;
yihui 0:4755a81efb1d 26 while (touch_io->read()) {
yihui 0:4755a81efb1d 27 count++;
yihui 0:4755a81efb1d 28 if (count > THRESHOLD) {
yihui 0:4755a81efb1d 29 touch_data[i] |= 0x01;
yihui 0:4755a81efb1d 30 break;
yihui 0:4755a81efb1d 31 }
yihui 0:4755a81efb1d 32 }
yihui 0:4755a81efb1d 33 touch_io->output();
yihui 0:4755a81efb1d 34 touch_io->write(1);
yihui 0:4755a81efb1d 35
pighixxx 2:1cb69f19f49c 36 if (0x01 == touch_data[i]) { // Threshold, get a touch
yihui 0:4755a81efb1d 37 keyboard.putc(key_map[i]);
pighixxx 2:1cb69f19f49c 38 } else if (0x80 == touch_data[i]) { // Last 7 measurement is under the threshold, touch is released
yihui 0:4755a81efb1d 39 }
yihui 0:4755a81efb1d 40 }
yihui 0:4755a81efb1d 41 }
yihui 0:4755a81efb1d 42
yihui 0:4755a81efb1d 43 int main()
yihui 0:4755a81efb1d 44 {
yihui 0:4755a81efb1d 45 // setup
pighixxx 2:1cb69f19f49c 46
pighixxx 2:1cb69f19f49c 47 // Turn off miniblip buzzer
pighixxx 2:1cb69f19f49c 48 PwmOut speaker(P0_8);
pighixxx 2:1cb69f19f49c 49 speaker=0.0;
pighixxx 2:1cb69f19f49c 50
yihui 0:4755a81efb1d 51 for (int i = 0; i < TOUCH_N; i++) {
yihui 0:4755a81efb1d 52 p_touch_io[i] = new DigitalInOut(touch_pin[i]);
yihui 0:4755a81efb1d 53 p_touch_io[i]->mode(PullDown);
yihui 0:4755a81efb1d 54 p_touch_io[i]->output();
yihui 0:4755a81efb1d 55 p_touch_io[i]->write(1);
yihui 0:4755a81efb1d 56 }
yihui 0:4755a81efb1d 57
yihui 1:93bbcf91f356 58 tick.attach(detect, 1.0 / 40.0);
yihui 0:4755a81efb1d 59
yihui 0:4755a81efb1d 60 while(1) {
yihui 0:4755a81efb1d 61 // do something
yihui 0:4755a81efb1d 62 wait(1);
yihui 0:4755a81efb1d 63 }
yihui 0:4755a81efb1d 64 }