Samantha Wang / Mbed 2 deprecated FramedLaserHarp

Dependencies:   USBMIDI mbed

Fork of LaserHarpProj by Samantha Wang

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }