Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of LaserHarpProj by
main.cpp
00001 // Hello World example for the USBMIDI library 00002 00003 #include "mbed.h" 00004 #include "USBMIDI.h" 00005 #include <string> 00006 #include <list> 00007 00008 #include <mpr121.h> 00009 AnalogIn laser1 (p20); 00010 AnalogIn laser2(p19); 00011 AnalogIn laser3(p18); 00012 AnalogIn laser4(p17); 00013 AnalogIn laser5(p16); 00014 DigitalOut led1(LED1); 00015 DigitalOut led2(LED2); 00016 DigitalOut led3(LED3); 00017 DigitalOut led4(LED4); 00018 00019 char str1[100]; 00020 char str2[100]; 00021 char str3[100]; 00022 char str4[100]; 00023 char str5[100]; 00024 Serial pc(USBTX,USBRX); 00025 float val1 = 1; 00026 float val2 = 1; 00027 float val3 = 1; 00028 float val4 = 1; 00029 float val5 = 1; 00030 int flag1 = 0; 00031 int flag2 = 0; 00032 int flag3 = 0; 00033 int flag4 = 0; 00034 int flag5 = 0; 00035 00036 int interupt = 0; 00037 void show_message(MIDIMessage msg) 00038 { 00039 switch (msg.type()) { 00040 case MIDIMessage::NoteOnType: 00041 printf("NoteOn key:%d, velocity: %d, channel: %d\n", msg.key(), msg.velocity(), msg.channel()); 00042 break; 00043 case MIDIMessage::NoteOffType: 00044 printf("NoteOff key:%d, velocity: %d, channel: %d\n", msg.key(), msg.velocity(), msg.channel()); 00045 break; 00046 case MIDIMessage::ControlChangeType: 00047 printf("ControlChange controller: %d, data: %d\n", msg.controller(), msg.value()); 00048 break; 00049 case MIDIMessage::PitchWheelType: 00050 printf("PitchWheel channel: %d, pitch: %d\n", msg.channel(), msg.pitch()); 00051 break; 00052 default: 00053 printf("Another message\n"); 00054 } 00055 } 00056 00057 InterruptIn interrupt(p26); 00058 // Setup the i2c bus on pins 28 and 27 00059 I2C i2c(p9, p10); 00060 00061 // Setup the Mpr121: 00062 // constructor(i2c object, i2c address of the mpr121) 00063 Mpr121 mpr121(&i2c, Mpr121::ADD_VSS); 00064 00065 int fs; 00066 int octave; 00067 void fallInterrupt() { 00068 int fs_code=0; 00069 int oct_code = 0; 00070 int i=0; 00071 int value=mpr121.read(0x00); 00072 value +=mpr121.read(0x01)<<8; 00073 // LED demo mod by J. Hamblen 00074 //pc.printf("MPR value: %x \r\n", value); 00075 i=0; 00076 // puts key number out to LEDs for demo 00077 for (i=0; i<4; i++) { 00078 if (((value>>i)&0x01)==1) fs_code=i+1; 00079 } 00080 switch (fs_code) 00081 { 00082 case 1: 00083 fs = 1; 00084 led1 = 1; 00085 led2 = 0; 00086 break; 00087 case 2: 00088 fs = 0; 00089 led1 = 0; 00090 led2 = 0; 00091 break; 00092 case 3: 00093 fs = -1; 00094 led1 = 0; 00095 led2 = 1; 00096 break; 00097 case 4: 00098 fs = 0; 00099 octave = 0; 00100 led1 = 0; 00101 led2 = 0; 00102 led3 = 0; 00103 led4 = 0; 00104 break; 00105 } 00106 00107 for (i=4; i<7; i++) { 00108 if (((value>>i)&0x01)==1) oct_code=i; 00109 } 00110 switch (oct_code) 00111 { 00112 case 4: 00113 octave = 12; 00114 led3= 1; 00115 led4 = 0; 00116 break; 00117 case 5: 00118 octave = 0; 00119 led3 = 0; 00120 led4 = 0; 00121 break; 00122 case 6: 00123 octave = -12; 00124 led3 = 0; 00125 led4 = 1; 00126 break; 00127 } 00128 00129 } 00130 00131 USBMIDI midi; 00132 00133 float lightScale(float val, float light) 00134 { 00135 val = light; 00136 return val; 00137 } 00138 00139 00140 int main() 00141 { 00142 pc.baud(19200); 00143 midi.attach(show_message); // call back for messages receive 00144 00145 while (1) { 00146 fallInterrupt(); 00147 float light1 = laser1; 00148 float light2 = laser2; 00149 float light3 = laser3; 00150 float light4 = laser4; 00151 float light5 = laser5; 00152 float pval1 = val1; 00153 float pval2 = val2; 00154 float pval3 = val3; 00155 float pval4 = val4; 00156 float pval5 = val5; 00157 val1 = lightScale(val1, light1); 00158 val2 = lightScale(val2, light2); 00159 val3 = lightScale(val3, light3); 00160 val4 = lightScale(val4, light4); 00161 val5 = lightScale(val5, light5); 00162 sprintf (str1, "light value 1 = %04f\n", light1); 00163 sprintf (str2, "light value 2= %04f\n", light2); 00164 sprintf (str3, "light value 3= %04f\n", light3); 00165 sprintf (str4, "light value 4= %04f\n", light4); 00166 sprintf (str5, "light value 5= %04f\n", light5); 00167 //wait(1); 00168 pc.printf(str1); 00169 pc.printf(str2); 00170 pc.printf(str3); 00171 pc.printf(str4); 00172 pc.printf(str5); 00173 00174 if (val1 <0.7 && pval1 > 0.7) { 00175 flag1 = 1; 00176 } else if (val1 < 0.7 && flag1 ==1) { 00177 midi.write(MIDIMessage::NoteOn(60+fs+octave)); 00178 flag1 = 0; 00179 } else if (val1 >0.7) { 00180 midi.write(MIDIMessage::NoteOff(60+fs+octave)); 00181 flag1 = 0; 00182 } 00183 if (val2 <0.7 && pval2 > 0.7) { 00184 flag2 = 1; 00185 } else if (val2 < 0.7 && flag2 ==1) { 00186 midi.write(MIDIMessage::NoteOn(62+fs+octave)); 00187 flag2 = 0; 00188 } else if (val2 >0.7) { 00189 midi.write(MIDIMessage::NoteOff(62+fs+octave)); 00190 flag2 = 0; 00191 } 00192 if (val3 <0.7 && pval3 > 0.7) { 00193 flag3 = 1; 00194 } else if (val3 < 0.7 && flag3 ==1) { 00195 midi.write(MIDIMessage::NoteOn(64+fs+octave)); 00196 flag3 = 0; 00197 } else if (val3 >0.7) { 00198 midi.write(MIDIMessage::NoteOff(64+fs+octave)); 00199 flag3 = 0; 00200 } 00201 if (val4 <0.7 && pval4 > 0.7) { 00202 flag4 = 1; 00203 } else if (val4 < 0.7 && flag4 ==1) { 00204 midi.write(MIDIMessage::NoteOn(65+fs+octave)); 00205 flag4 = 0; 00206 } else if (val4 >0.7) { 00207 midi.write(MIDIMessage::NoteOff(65+fs+octave)); 00208 flag4 = 0; 00209 } 00210 if (val5 <0.7 && pval5 > 0.7) { 00211 flag5 = 1; 00212 } else if (val5 < 0.7 && flag5 ==1) { 00213 midi.write(MIDIMessage::NoteOn(67+fs+octave)); 00214 flag5 = 0; 00215 } else if (val5 >0.7) { 00216 midi.write(MIDIMessage::NoteOff(67+fs+octave)); 00217 flag5 = 0; 00218 } 00219 } 00220 }
Generated on Tue Jul 19 2022 20:53:46 by
1.7.2
