Midi USB

Dependencies:   MMA8451Q TSI USBDevice mbed

Committer:
Erick7652
Date:
Wed Jun 24 21:36:29 2015 +0000
Revision:
0:331077fb2797
frdm-kl25z Midi-USB

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Erick7652 0:331077fb2797 1 #include "mbed.h"
Erick7652 0:331077fb2797 2 #include "USBMIDI.h"
Erick7652 0:331077fb2797 3 #include "MMA8451Q.h"
Erick7652 0:331077fb2797 4 #include "TSISensor.h"
Erick7652 0:331077fb2797 5
Erick7652 0:331077fb2797 6 #define MMA8451_I2C_ADDRESS (0x1d<<1)
Erick7652 0:331077fb2797 7
Erick7652 0:331077fb2797 8 USBMIDI midi; // notes 48 al 82
Erick7652 0:331077fb2797 9 DigitalOut myled(LED1);
Erick7652 0:331077fb2797 10
Erick7652 0:331077fb2797 11
Erick7652 0:331077fb2797 12 void LLW_IRQHandler(void){
Erick7652 0:331077fb2797 13 if (LLWU->F2 & LLWU_F2_WUF11_MASK) {
Erick7652 0:331077fb2797 14 LLWU->F2 |= LLWU_F2_WUF11_MASK; // write one to clear the flag
Erick7652 0:331077fb2797 15 }
Erick7652 0:331077fb2797 16 }
Erick7652 0:331077fb2797 17
Erick7652 0:331077fb2797 18 void LLW_Init(void){
Erick7652 0:331077fb2797 19 LLWU->F2 |= LLWU_F2_WUF11_MASK;
Erick7652 0:331077fb2797 20 LLWU->PE3 = 0x80;
Erick7652 0:331077fb2797 21 LLWU->ME = 0x01;
Erick7652 0:331077fb2797 22 }
Erick7652 0:331077fb2797 23
Erick7652 0:331077fb2797 24 void Enter_VLLS0(void){
Erick7652 0:331077fb2797 25 myled = 0;
Erick7652 0:331077fb2797 26 volatile unsigned int dummyread;
Erick7652 0:331077fb2797 27 int i;
Erick7652 0:331077fb2797 28 SMC->PMPROT = SMC_PMPROT_AVLLS_MASK;
Erick7652 0:331077fb2797 29 if ((SMC->PMSTAT & SMC_PMSTAT_PMSTAT_MASK)== 4){
Erick7652 0:331077fb2797 30 SMC->PMCTRL &= ~SMC_PMCTRL_RUNM_MASK; // go back to RUN mode temporarily
Erick7652 0:331077fb2797 31 for (i=0;i<0xff;i++)
Erick7652 0:331077fb2797 32 {
Erick7652 0:331077fb2797 33 if ((SMC->PMSTAT & SMC_PMSTAT_PMSTAT_MASK)== 1)
Erick7652 0:331077fb2797 34 break;
Erick7652 0:331077fb2797 35 }
Erick7652 0:331077fb2797 36 }
Erick7652 0:331077fb2797 37
Erick7652 0:331077fb2797 38 /* Set the STOPM field to 0b100 for VLLS0 mode */
Erick7652 0:331077fb2797 39 SMC->PMCTRL &= ~SMC_PMCTRL_STOPM_MASK;
Erick7652 0:331077fb2797 40 SMC->PMCTRL |= SMC_PMCTRL_STOPM(0x4);
Erick7652 0:331077fb2797 41 /* set VLLSM = 00 * and PORPO = 1 */
Erick7652 0:331077fb2797 42 SMC->STOPCTRL &= ~SMC_STOPCTRL_VLLSM_MASK;
Erick7652 0:331077fb2797 43 SMC->STOPCTRL = SMC_STOPCTRL_VLLSM(0) | SMC_STOPCTRL_PORPO_MASK;
Erick7652 0:331077fb2797 44 /*wait for write to complete to SMC before stopping core */
Erick7652 0:331077fb2797 45 dummyread = SMC->STOPCTRL;
Erick7652 0:331077fb2797 46 dummyread++;
Erick7652 0:331077fb2797 47
Erick7652 0:331077fb2797 48 /* Now execute the stop instruction to go into VLLS0 */
Erick7652 0:331077fb2797 49 /* Set the SLEEPDEEP bit to enable deep sleep mode (STOP) */
Erick7652 0:331077fb2797 50 //SCB->SCR |= SCB_SCR_SLEEPDEEP_MASK;
Erick7652 0:331077fb2797 51 SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
Erick7652 0:331077fb2797 52 __wfi();
Erick7652 0:331077fb2797 53 }
Erick7652 0:331077fb2797 54
Erick7652 0:331077fb2797 55 int main() {
Erick7652 0:331077fb2797 56
Erick7652 0:331077fb2797 57 float click =0;
Erick7652 0:331077fb2797 58 int16_t x = 0;
Erick7652 0:331077fb2797 59 int16_t z = 0;
Erick7652 0:331077fb2797 60 int16_t y = 0;
Erick7652 0:331077fb2797 61 TSISensor tsi;
Erick7652 0:331077fb2797 62 MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
Erick7652 0:331077fb2797 63 NVIC_EnableIRQ(LLW_IRQn);
Erick7652 0:331077fb2797 64
Erick7652 0:331077fb2797 65 while (1) {
Erick7652 0:331077fb2797 66
Erick7652 0:331077fb2797 67 x = -1*acc.getAccY();
Erick7652 0:331077fb2797 68 y = 1*acc.getAccX();
Erick7652 0:331077fb2797 69 z = 1*acc.getAccZ();
Erick7652 0:331077fb2797 70
Erick7652 0:331077fb2797 71 click=tsi.readPercentage();
Erick7652 0:331077fb2797 72
Erick7652 0:331077fb2797 73 if (y>0) Enter_VLLS0();
Erick7652 0:331077fb2797 74
Erick7652 0:331077fb2797 75
Erick7652 0:331077fb2797 76 if (x>0){
Erick7652 0:331077fb2797 77 if (click>0.70){
Erick7652 0:331077fb2797 78 midi.write(MIDIMessage::NoteOn(63));
Erick7652 0:331077fb2797 79 wait(0.25);
Erick7652 0:331077fb2797 80 midi.write(MIDIMessage::NoteOff(63));
Erick7652 0:331077fb2797 81 wait(0.5);
Erick7652 0:331077fb2797 82 }
Erick7652 0:331077fb2797 83
Erick7652 0:331077fb2797 84 if((click<0.70)&&(click>0.30)){
Erick7652 0:331077fb2797 85 midi.write(MIDIMessage::NoteOn(68));
Erick7652 0:331077fb2797 86 wait(0.25);
Erick7652 0:331077fb2797 87 midi.write(MIDIMessage::NoteOff(68));
Erick7652 0:331077fb2797 88 wait(0.5);
Erick7652 0:331077fb2797 89
Erick7652 0:331077fb2797 90 }
Erick7652 0:331077fb2797 91
Erick7652 0:331077fb2797 92 if((click<0.30)&&(click>0)){
Erick7652 0:331077fb2797 93 midi.write(MIDIMessage::NoteOn(73));
Erick7652 0:331077fb2797 94 wait(0.25);
Erick7652 0:331077fb2797 95 midi.write(MIDIMessage::NoteOff(73));
Erick7652 0:331077fb2797 96 wait(0.5);
Erick7652 0:331077fb2797 97 }
Erick7652 0:331077fb2797 98
Erick7652 0:331077fb2797 99 }
Erick7652 0:331077fb2797 100 wait(0.0001);
Erick7652 0:331077fb2797 101
Erick7652 0:331077fb2797 102
Erick7652 0:331077fb2797 103 }
Erick7652 0:331077fb2797 104
Erick7652 0:331077fb2797 105 }