Framed Laser Harp Implementation with MBed, that allows interface with MIDI synthesizers software.
Fork of LaserHarpProj by
main.cpp@1:2b551cb862fe, 2014-12-08 (annotated)
- 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?
User | Revision | Line number | New 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 | } |