Laser

Dependencies:   USBMIDI mbed

Fork of USBMIDI_HelloWorld by Simon Ford

Committer:
ywang627
Date:
Mon Dec 08 22:01:13 2014 +0000
Revision:
1:2b551cb862fe
Parent:
0:4b55d56b6b61
Child:
2:21f0ae3bef8a
Laser

Who changed what in which revision?

UserRevisionLine numberNew contents of line
simon 0:4b55d56b6b61 1 // Hello World example for the USBMIDI library
simon 0:4b55d56b6b61 2
simon 0:4b55d56b6b61 3 #include "mbed.h"
simon 0:4b55d56b6b61 4 #include "USBMIDI.h"
ywang627 1:2b551cb862fe 5 #include <string>
ywang627 1:2b551cb862fe 6 #include <list>
simon 0:4b55d56b6b61 7
ywang627 1:2b551cb862fe 8 #include <mpr121.h>
ywang627 1:2b551cb862fe 9 AnalogIn laser1 (p20);
ywang627 1:2b551cb862fe 10 AnalogIn laser2(p19);
ywang627 1:2b551cb862fe 11 AnalogIn laser3(p18);
ywang627 1:2b551cb862fe 12 AnalogIn laser4(p17);
ywang627 1:2b551cb862fe 13 AnalogIn laser5(p16);
ywang627 1:2b551cb862fe 14 DigitalOut led1(LED1);
ywang627 1:2b551cb862fe 15 DigitalOut led2(LED2);
ywang627 1:2b551cb862fe 16 DigitalOut led3(LED3);
ywang627 1:2b551cb862fe 17 DigitalOut led4(LED4);
ywang627 1:2b551cb862fe 18
ywang627 1:2b551cb862fe 19 char str1[100];
ywang627 1:2b551cb862fe 20 char str2[100];
ywang627 1:2b551cb862fe 21 char str3[100];
ywang627 1:2b551cb862fe 22 char str4[100];
ywang627 1:2b551cb862fe 23 char str5[100];
ywang627 1:2b551cb862fe 24 Serial pc(USBTX,USBRX);
ywang627 1:2b551cb862fe 25 float val1 = 1;
ywang627 1:2b551cb862fe 26 float val2 = 1;
ywang627 1:2b551cb862fe 27 float val3 = 1;
ywang627 1:2b551cb862fe 28 float val4 = 1;
ywang627 1:2b551cb862fe 29 float val5 = 1;
ywang627 1:2b551cb862fe 30 int flag1 = 0;
ywang627 1:2b551cb862fe 31 int flag2 = 0;
ywang627 1:2b551cb862fe 32 int flag3 = 0;
ywang627 1:2b551cb862fe 33 int flag4 = 0;
ywang627 1:2b551cb862fe 34 int flag5 = 0;
ywang627 1:2b551cb862fe 35
ywang627 1:2b551cb862fe 36 int interupt = 0;
ywang627 1:2b551cb862fe 37 void show_message(MIDIMessage msg)
ywang627 1:2b551cb862fe 38 {
simon 0:4b55d56b6b61 39 switch (msg.type()) {
simon 0:4b55d56b6b61 40 case MIDIMessage::NoteOnType:
simon 0:4b55d56b6b61 41 printf("NoteOn key:%d, velocity: %d, channel: %d\n", msg.key(), msg.velocity(), msg.channel());
simon 0:4b55d56b6b61 42 break;
simon 0:4b55d56b6b61 43 case MIDIMessage::NoteOffType:
simon 0:4b55d56b6b61 44 printf("NoteOff key:%d, velocity: %d, channel: %d\n", msg.key(), msg.velocity(), msg.channel());
simon 0:4b55d56b6b61 45 break;
ywang627 1:2b551cb862fe 46 case MIDIMessage::ControlChangeType:
simon 0:4b55d56b6b61 47 printf("ControlChange controller: %d, data: %d\n", msg.controller(), msg.value());
simon 0:4b55d56b6b61 48 break;
simon 0:4b55d56b6b61 49 case MIDIMessage::PitchWheelType:
simon 0:4b55d56b6b61 50 printf("PitchWheel channel: %d, pitch: %d\n", msg.channel(), msg.pitch());
simon 0:4b55d56b6b61 51 break;
simon 0:4b55d56b6b61 52 default:
simon 0:4b55d56b6b61 53 printf("Another message\n");
ywang627 1:2b551cb862fe 54 }
ywang627 1:2b551cb862fe 55 }
ywang627 1:2b551cb862fe 56
ywang627 1:2b551cb862fe 57 InterruptIn interrupt(p26);
ywang627 1:2b551cb862fe 58 // Setup the i2c bus on pins 28 and 27
ywang627 1:2b551cb862fe 59 I2C i2c(p9, p10);
ywang627 1:2b551cb862fe 60
ywang627 1:2b551cb862fe 61 // Setup the Mpr121:
ywang627 1:2b551cb862fe 62 // constructor(i2c object, i2c address of the mpr121)
ywang627 1:2b551cb862fe 63 Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
ywang627 1:2b551cb862fe 64
ywang627 1:2b551cb862fe 65 void fallInterrupt()
ywang627 1:2b551cb862fe 66 {
ywang627 1:2b551cb862fe 67 int key_code=0;
ywang627 1:2b551cb862fe 68 int i=0;
ywang627 1:2b551cb862fe 69 int value=mpr121.read(0x00);
ywang627 1:2b551cb862fe 70 value +=mpr121.read(0x01)<<8;
ywang627 1:2b551cb862fe 71 i=0;
ywang627 1:2b551cb862fe 72 for (i=0; i<12; i++) {
ywang627 1:2b551cb862fe 73 if (((value>>i)&0x01)==1) key_code=i+1;
ywang627 1:2b551cb862fe 74 }
ywang627 1:2b551cb862fe 75 led4=key_code & 0x01;
ywang627 1:2b551cb862fe 76 led3=(key_code>>1) & 0x01;
ywang627 1:2b551cb862fe 77 led2=(key_code>>2) & 0x01;
ywang627 1:2b551cb862fe 78 led1=(key_code>>3) & 0x01;
ywang627 1:2b551cb862fe 79 interupt = key_code;
simon 0:4b55d56b6b61 80 }
simon 0:4b55d56b6b61 81
simon 0:4b55d56b6b61 82 USBMIDI midi;
simon 0:4b55d56b6b61 83
ywang627 1:2b551cb862fe 84 float lightScale(float val, float light)
ywang627 1:2b551cb862fe 85 {
ywang627 1:2b551cb862fe 86 val = light;
ywang627 1:2b551cb862fe 87 return val;
ywang627 1:2b551cb862fe 88 }
ywang627 1:2b551cb862fe 89
ywang627 1:2b551cb862fe 90
ywang627 1:2b551cb862fe 91 int main()
ywang627 1:2b551cb862fe 92 {
ywang627 1:2b551cb862fe 93 pc.baud(19200);
ywang627 1:2b551cb862fe 94 midi.attach(show_message); // call back for messages receive
ywang627 1:2b551cb862fe 95
ywang627 1:2b551cb862fe 96 while (1) {
ywang627 1:2b551cb862fe 97 fallInterrupt();
ywang627 1:2b551cb862fe 98 float light1 = laser1;
ywang627 1:2b551cb862fe 99 float light2 = laser2;
ywang627 1:2b551cb862fe 100 float light3 = laser3;
ywang627 1:2b551cb862fe 101 float light4 = laser4;
ywang627 1:2b551cb862fe 102 float light5 = laser5;
ywang627 1:2b551cb862fe 103 float pval1 = val1;
ywang627 1:2b551cb862fe 104 float pval2 = val2;
ywang627 1:2b551cb862fe 105 float pval3 = val3;
ywang627 1:2b551cb862fe 106 float pval4 = val4;
ywang627 1:2b551cb862fe 107 float pval5 = val5;
ywang627 1:2b551cb862fe 108 val1 = lightScale(val1, light1);
ywang627 1:2b551cb862fe 109 val2 = lightScale(val2, light2);
ywang627 1:2b551cb862fe 110 val3 = lightScale(val3, light3);
ywang627 1:2b551cb862fe 111 val4 = lightScale(val4, light4);
ywang627 1:2b551cb862fe 112 val5 = lightScale(val5, light5);
ywang627 1:2b551cb862fe 113 sprintf (str1, "light value 1 = %04f\n", light1);
ywang627 1:2b551cb862fe 114 sprintf (str2, "light value 2= %04f\n", light2);
ywang627 1:2b551cb862fe 115 sprintf (str3, "light value 3= %04f\n", light3);
ywang627 1:2b551cb862fe 116 sprintf (str4, "light value 4= %04f\n", light4);
ywang627 1:2b551cb862fe 117 sprintf (str5, "light value 5= %04f\n", light5);
ywang627 1:2b551cb862fe 118 //wait(1);
ywang627 1:2b551cb862fe 119 pc.printf(str1);
ywang627 1:2b551cb862fe 120 pc.printf(str2);
ywang627 1:2b551cb862fe 121 pc.printf(str3);
ywang627 1:2b551cb862fe 122 pc.printf(str4);
ywang627 1:2b551cb862fe 123 pc.printf(str5);
ywang627 1:2b551cb862fe 124
ywang627 1:2b551cb862fe 125 if (val1 <0.7 && pval1 > 0.7) {
ywang627 1:2b551cb862fe 126 flag1 = 1;
ywang627 1:2b551cb862fe 127 } else if (val1 < 0.7 && flag1 ==1) {
ywang627 1:2b551cb862fe 128 midi.write(MIDIMessage::NoteOn(60+interupt));
ywang627 1:2b551cb862fe 129 flag1 = 0;
ywang627 1:2b551cb862fe 130 } else if (val1 >0.7) {
ywang627 1:2b551cb862fe 131 midi.write(MIDIMessage::NoteOff(60+interupt));
ywang627 1:2b551cb862fe 132 flag1 = 0;
ywang627 1:2b551cb862fe 133 }
ywang627 1:2b551cb862fe 134 if (val2 <0.7 && pval2 > 0.7) {
ywang627 1:2b551cb862fe 135 flag2 = 1;
ywang627 1:2b551cb862fe 136 } else if (val2 < 0.7 && flag2 ==1) {
ywang627 1:2b551cb862fe 137 midi.write(MIDIMessage::NoteOn(62+interupt));
ywang627 1:2b551cb862fe 138 flag2 = 0;
ywang627 1:2b551cb862fe 139 } else if (val2 >0.7) {
ywang627 1:2b551cb862fe 140 midi.write(MIDIMessage::NoteOff(62+interupt));
ywang627 1:2b551cb862fe 141 flag2 = 0;
ywang627 1:2b551cb862fe 142 }
ywang627 1:2b551cb862fe 143 if (val3 <0.7 && pval3 > 0.7) {
ywang627 1:2b551cb862fe 144 flag3 = 1;
ywang627 1:2b551cb862fe 145 } else if (val3 < 0.7 && flag3 ==1) {
ywang627 1:2b551cb862fe 146 midi.write(MIDIMessage::NoteOn(64+interupt));
ywang627 1:2b551cb862fe 147 flag3 = 0;
ywang627 1:2b551cb862fe 148 } else if (val3 >0.7) {
ywang627 1:2b551cb862fe 149 midi.write(MIDIMessage::NoteOff(64+interupt));
ywang627 1:2b551cb862fe 150 flag3 = 0;
ywang627 1:2b551cb862fe 151 }
ywang627 1:2b551cb862fe 152 if (val4 <0.7 && pval4 > 0.7) {
ywang627 1:2b551cb862fe 153 flag4 = 1;
ywang627 1:2b551cb862fe 154 } else if (val4 < 0.7 && flag4 ==1) {
ywang627 1:2b551cb862fe 155 midi.write(MIDIMessage::NoteOn(65+interupt));
ywang627 1:2b551cb862fe 156 flag4 = 0;
ywang627 1:2b551cb862fe 157 } else if (val4 >0.7) {
ywang627 1:2b551cb862fe 158 midi.write(MIDIMessage::NoteOff(65+interupt));
ywang627 1:2b551cb862fe 159 flag4 = 0;
ywang627 1:2b551cb862fe 160 }
ywang627 1:2b551cb862fe 161 if (val5 <0.7 && pval5 > 0.7) {
ywang627 1:2b551cb862fe 162 flag5 = 1;
ywang627 1:2b551cb862fe 163 } else if (val5 < 0.7 && flag5 ==1) {
ywang627 1:2b551cb862fe 164 midi.write(MIDIMessage::NoteOn(67+interupt));
ywang627 1:2b551cb862fe 165 flag5 = 0;
ywang627 1:2b551cb862fe 166 } else if (val5 >0.7) {
ywang627 1:2b551cb862fe 167 midi.write(MIDIMessage::NoteOff(67+interupt));
ywang627 1:2b551cb862fe 168 flag5 = 0;
simon 0:4b55d56b6b61 169 }
simon 0:4b55d56b6b61 170 }
ywang627 1:2b551cb862fe 171 }