Framed Laser Harp Implementation with MBed, that allows interface with MIDI synthesizers software.

Dependencies:   USBMIDI mbed

Fork of LaserHarpProj by Samantha Wang

Revision:
1:2b551cb862fe
Parent:
0:4b55d56b6b61
Child:
2:21f0ae3bef8a
--- a/main.cpp	Sun Feb 20 13:15:46 2011 +0000
+++ b/main.cpp	Mon Dec 08 22:01:13 2014 +0000
@@ -2,8 +2,40 @@
 
 #include "mbed.h"
 #include "USBMIDI.h"
+#include <string>
+#include <list>
 
-void show_message(MIDIMessage msg) {
+#include <mpr121.h>
+AnalogIn laser1 (p20);
+AnalogIn laser2(p19);
+AnalogIn laser3(p18);
+AnalogIn laser4(p17);
+AnalogIn laser5(p16);
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+
+char str1[100];
+char str2[100];
+char str3[100];
+char str4[100];
+char str5[100];
+Serial pc(USBTX,USBRX);
+float val1 = 1;
+float val2 = 1;
+float val3 = 1;
+float val4 = 1;
+float val5 = 1;
+int flag1 = 0;
+int flag2 = 0;
+int flag3 = 0;
+int flag4 = 0;
+int flag5 = 0;
+
+int interupt = 0;
+void show_message(MIDIMessage msg)
+{
     switch (msg.type()) {
         case MIDIMessage::NoteOnType:
             printf("NoteOn key:%d, velocity: %d, channel: %d\n", msg.key(), msg.velocity(), msg.channel());
@@ -11,7 +43,7 @@
         case MIDIMessage::NoteOffType:
             printf("NoteOff key:%d, velocity: %d, channel: %d\n", msg.key(), msg.velocity(), msg.channel());
             break;
-        case MIDIMessage::ControlChangeType:    
+        case MIDIMessage::ControlChangeType:
             printf("ControlChange controller: %d, data: %d\n", msg.controller(), msg.value());
             break;
         case MIDIMessage::PitchWheelType:
@@ -19,19 +51,121 @@
             break;
         default:
             printf("Another message\n");
-    }    
+    }
+}
+
+InterruptIn interrupt(p26);
+// Setup the i2c bus on pins 28 and 27
+I2C i2c(p9, p10);
+
+// Setup the Mpr121:
+// constructor(i2c object, i2c address of the mpr121)
+Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
+
+void fallInterrupt()
+{
+    int key_code=0;
+    int i=0;
+    int value=mpr121.read(0x00);
+    value +=mpr121.read(0x01)<<8;
+    i=0;
+    for (i=0; i<12; i++) {
+        if (((value>>i)&0x01)==1) key_code=i+1;
+    }
+    led4=key_code & 0x01;
+    led3=(key_code>>1) & 0x01;
+    led2=(key_code>>2) & 0x01;
+    led1=(key_code>>3) & 0x01;
+    interupt = key_code;
 }
 
 USBMIDI midi;
 
-int main() {          
-    midi.attach(show_message);         // call back for messages received    
-    while (1) {    
-        for(int i=48; i<83; i++) {     // send some messages!
-            midi.write(MIDIMessage::NoteOn(i));
-            wait(0.25);
-            midi.write(MIDIMessage::NoteOff(i));
-            wait(0.5);
+float lightScale(float val, float light)
+{
+    val = light;
+    return val;
+}
+
+
+int main()
+{
+    pc.baud(19200);
+    midi.attach(show_message);         // call back for messages receive
+    
+    while (1) {
+        fallInterrupt();
+        float light1 = laser1;
+        float light2 = laser2;
+        float light3 = laser3;
+        float light4 = laser4;
+        float light5 = laser5;
+        float pval1 = val1;
+        float pval2 = val2;
+        float pval3 = val3;
+        float pval4 = val4;
+        float pval5 = val5;
+        val1 = lightScale(val1, light1);
+        val2 = lightScale(val2, light2);
+        val3 = lightScale(val3, light3);
+        val4 = lightScale(val4, light4);
+        val5 = lightScale(val5, light5);
+        sprintf (str1, "light value 1 = %04f\n", light1);
+        sprintf (str2, "light value 2= %04f\n", light2);
+        sprintf (str3, "light value 3= %04f\n", light3);
+        sprintf (str4, "light value 4= %04f\n", light4);
+        sprintf (str5, "light value 5= %04f\n", light5);
+        //wait(1);
+        pc.printf(str1);
+        pc.printf(str2);
+        pc.printf(str3);
+        pc.printf(str4);
+        pc.printf(str5);
+
+        if (val1 <0.7 && pval1 > 0.7) {
+            flag1 = 1;
+        } else if (val1 < 0.7 && flag1 ==1) {
+            midi.write(MIDIMessage::NoteOn(60+interupt));
+            flag1 = 0;
+        } else if (val1 >0.7) {
+            midi.write(MIDIMessage::NoteOff(60+interupt));
+            flag1 = 0;
+        }
+        if (val2 <0.7 && pval2 > 0.7) {
+            flag2 = 1;
+        } else if (val2 < 0.7 && flag2 ==1) {
+            midi.write(MIDIMessage::NoteOn(62+interupt));
+            flag2 = 0;
+        } else if (val2 >0.7) {
+            midi.write(MIDIMessage::NoteOff(62+interupt));
+            flag2 = 0;
+        }
+        if (val3 <0.7 && pval3 > 0.7) {
+            flag3 = 1;
+        } else if (val3 < 0.7 && flag3 ==1) {
+            midi.write(MIDIMessage::NoteOn(64+interupt));
+            flag3 = 0;
+        } else if (val3 >0.7) {
+            midi.write(MIDIMessage::NoteOff(64+interupt));
+            flag3 = 0;
+        }
+        if (val4 <0.7 && pval4 > 0.7) {
+            flag4 = 1;
+        } else if (val4 < 0.7 && flag4 ==1) {
+            midi.write(MIDIMessage::NoteOn(65+interupt));
+            flag4 = 0;
+        } else if (val4 >0.7) {
+            midi.write(MIDIMessage::NoteOff(65+interupt));
+            flag4 = 0;
+        }
+        if (val5 <0.7 && pval5 > 0.7) {
+            flag5 = 1;
+        } else if (val5 < 0.7 && flag5 ==1) {
+            midi.write(MIDIMessage::NoteOn(67+interupt));
+            flag5 = 0;
+        } else if (val5 >0.7) {
+            midi.write(MIDIMessage::NoteOff(67+interupt));
+            flag5 = 0;
         }
     }
-}
+}
\ No newline at end of file