Edward Baker / Mbed 2 deprecated Melody

Dependencies:   Joystick mbed

Fork of Melody by Craig Evans

Revision:
1:7c149b76c057
Parent:
0:f1e3ef53cc3c
diff -r f1e3ef53cc3c -r 7c149b76c057 main.cpp
--- a/main.cpp	Tue Mar 01 15:58:55 2016 +0000
+++ b/main.cpp	Thu Mar 02 09:57:28 2017 +0000
@@ -11,20 +11,29 @@
 
 #include "mbed.h"
 #include "tone.h" // note definitions
+#include <Joystick.h>
 
 #define PI 3.14159265359
 
 Timer noteTimer;  // timer for note duration
 AnalogOut aout(p18);  // DAC on pin 18
 BusOut leds(LED4,LED3,LED2,LED1);  // LEDs for display
+Joystick stick = Joystick(p20,p19,p17);
+PwmOut red_led (p24);
+PwmOut green_led (p23);
+PwmOut blue_led (p22);
+
 
 void initArray();  // function to initialise sample array
 void tone(float frequency,float duration);  // play a tone of set frequency for given duration
-void graphicEqualizer(float frequency);  // displays pattern on LEDs depending on the frequency
+void graphicEqualizer(int frequency);  // displays pattern on LEDs depending on the frequency
 
 int n = 32;  // number of samples
 float y[32]; // array to store samples
 float BPM = 73.0;  // beats per minute
+Vector2D coord = stick.get_coord();
+float xoffset = 1 - (coord.x/2);
+float yoffset = 1 - (coord.y/5);
 
 // comment one of the blocks out below - need noteArray[] and noteDuration[]
 
@@ -56,59 +65,219 @@
 
 // secret computer game melody...
 float noteArray[] = {
-    NOTE_E7, NOTE_E7, 0, NOTE_E7,
-    0, NOTE_C7, NOTE_E7, 0,
-    NOTE_G7, 0, 0,  0,
-    NOTE_G6, 0, 0, 0,
+    //NOTE_E7, NOTE_E7, 0, NOTE_E7,
+//    0, NOTE_C7, NOTE_E7, 0,
+//    NOTE_G7, 0, 0,  0,
+//    NOTE_G6, 0, 0, 0,
+//
+//    NOTE_C7, 0, 0, NOTE_G6,
+//    0, 0, NOTE_E6, 0,
+//    0, NOTE_A6, 0, NOTE_B6,
+//    0, NOTE_AS6, NOTE_A6, 0,
+//
+//    NOTE_G6, NOTE_E7, NOTE_G7,
+//    NOTE_A7, 0, NOTE_F7, NOTE_G7,
+//    0, NOTE_E7, 0,NOTE_C7,
+//    NOTE_D7, NOTE_B6, 0, 0,
+//
+//    NOTE_C7, 0, 0, NOTE_G6,
+//    0, 0, NOTE_E6, 0,
+//    0, NOTE_A6, 0, NOTE_B6,
+//    0, NOTE_AS6, NOTE_A6, 0,
+//
+//    NOTE_G6, NOTE_E7, NOTE_G7,
+//    NOTE_A7, 0, NOTE_F7, NOTE_G7,
+//    0, NOTE_E7, 0,NOTE_C7,
+//    NOTE_D7, NOTE_B6, 0, 0
+    NOTE_G6, 0, NOTE_A7, 0,
+    NOTE_E6, NOTE_E6, 0, NOTE_C6,
+
+    NOTE_DS6, NOTE_D6, NOTE_C6, 0,
+    NOTE_C6, 0, NOTE_D6, 0,
 
-    NOTE_C7, 0, 0, NOTE_G6,
-    0, 0, NOTE_E6, 0,
-    0, NOTE_A6, 0, NOTE_B6,
-    0, NOTE_AS6, NOTE_A6, 0,
+    NOTE_DS6, 0, NOTE_DS6, NOTE_D6,
+    NOTE_C6, NOTE_D6, NOTE_E6, NOTE_G6,
+
+    NOTE_A7, NOTE_E6, NOTE_G7, NOTE_D6,
+    NOTE_E6, NOTE_C6, NOTE_D6, NOTE_C6,
+
+    NOTE_E6, 0, NOTE_G6, 0,
+    NOTE_A7, NOTE_E6, NOTE_G6, NOTE_D6,
+
+    NOTE_E6, NOTE_C6, NOTE_DS6, NOTE_E6,
+    NOTE_DS6, NOTE_D6, NOTE_C6, NOTE_D6,
+
+    NOTE_DS6, 0, NOTE_C6, NOTE_D6,
+    NOTE_E6, NOTE_G6, NOTE_D6, NOTE_E6,
+
+    NOTE_D6, NOTE_C6, NOTE_D6, 0,
+    NOTE_C6, 0, NOTE_D6, 0,
+
+    NOTE_G6, 0, NOTE_A7, 0,
+    NOTE_E6, NOTE_E6, 0, NOTE_C6,
+
+    NOTE_DS6, NOTE_D6, NOTE_C6, 0,
+    NOTE_C6, 0, NOTE_D6, 0,
+
+    NOTE_DS6, 0, NOTE_DS6, NOTE_D6,
+    NOTE_C6, NOTE_D6, NOTE_E6, NOTE_G6,
+
+    NOTE_A7, NOTE_E6, NOTE_G7, NOTE_D6,
+    NOTE_E6, NOTE_C6, NOTE_D6, NOTE_C6,
 
-    NOTE_G6, NOTE_E7, NOTE_G7,
-    NOTE_A7, 0, NOTE_F7, NOTE_G7,
-    0, NOTE_E7, 0,NOTE_C7,
-    NOTE_D7, NOTE_B6, 0, 0,
+    NOTE_E6, 0, NOTE_G6, 0,
+    NOTE_A7, NOTE_E6, NOTE_G6, NOTE_D6,
+
+    NOTE_E6, NOTE_C6, NOTE_DS6, NOTE_E6,
+    NOTE_DS6, NOTE_D6, NOTE_C6, NOTE_D6,
+
+    NOTE_DS6, 0, NOTE_C6, NOTE_D6,
+    NOTE_E6, NOTE_G6, NOTE_D6, NOTE_E6,
+
+    NOTE_D6, NOTE_C6, NOTE_D6, 0,
+    NOTE_C6, 0, NOTE_C6, 0,
+
+    NOTE_C6, 0, NOTE_G5, NOTE_A6,
+    NOTE_C6, 0, NOTE_G5, NOTE_A6,
+
+    NOTE_C6, NOTE_D6, NOTE_E6, NOTE_C6,
+    NOTE_F6, NOTE_E6, NOTE_F6, NOTE_G6,
+
+    NOTE_C6, 0, NOTE_C6, 0,
+    NOTE_G5, NOTE_A6, NOTE_C6, NOTE_G6,
+
+    NOTE_F6, NOTE_E6, NOTE_D6, NOTE_C6,
+    NOTE_F5, NOTE_E5, NOTE_F5, NOTE_G5,
+
+    NOTE_C6, 0, NOTE_G5, NOTE_A6,
+    NOTE_C6, 0, NOTE_G5, NOTE_A6,
+
+    NOTE_C6, NOTE_C6, NOTE_D6, NOTE_E6,
+    NOTE_C6, NOTE_G5, NOTE_A6, NOTE_G5,
 
-    NOTE_C7, 0, 0, NOTE_G6,
-    0, 0, NOTE_E6, 0,
-    0, NOTE_A6, 0, NOTE_B6,
-    0, NOTE_AS6, NOTE_A6, 0,
+    NOTE_C6, 0, NOTE_C6, NOTE_B6,
+    NOTE_C5, NOTE_G5, NOTE_A6, NOTE_C6,
+
+    NOTE_F6, NOTE_E6, NOTE_F6, NOTE_G6,
+    NOTE_C6, 0, NOTE_B6, 0,
+
+    NOTE_C6, 0, NOTE_G5, NOTE_A6,
+    NOTE_C6, 0, NOTE_G5, NOTE_A6,
+
+    NOTE_C6, NOTE_D6, NOTE_E6, NOTE_C6,
+    NOTE_F6, NOTE_E6, NOTE_F6, NOTE_G6,
+
+    NOTE_C6, 0, NOTE_C6, 0,
+    NOTE_G5, NOTE_A6, NOTE_C6, NOTE_G6,
 
-    NOTE_G6, NOTE_E7, NOTE_G7,
-    NOTE_A7, 0, NOTE_F7, NOTE_G7,
-    0, NOTE_E7, 0,NOTE_C7,
-    NOTE_D7, NOTE_B6, 0, 0
+    NOTE_F6, NOTE_E6, NOTE_D6, NOTE_C6,
+    NOTE_F5, NOTE_E5, NOTE_F5, NOTE_G5,
+
+    NOTE_C6, 0, NOTE_G5, NOTE_A6,
+    NOTE_C6, 0, NOTE_G5, NOTE_A6,
+
+    NOTE_C6, NOTE_C6, NOTE_D6, NOTE_E6,
+    NOTE_C6, NOTE_G5, NOTE_A6, NOTE_G5,
+
+    NOTE_C6, 0, NOTE_C6, NOTE_B6,
+    NOTE_C5, NOTE_G5, NOTE_A6, NOTE_C6,
+
+    NOTE_F6, NOTE_E6, NOTE_F6, NOTE_G6,
+    NOTE_C6, 0, NOTE_D6, 0,
 };
 
 // durations of the notes
 // 1/8th, 1/16th, 1/4th etc.
 float noteDuration[] = {
-    12, 12, 12, 12,
-    12, 12, 12, 12,
-    12, 12, 12, 12,
-    12, 12, 12, 12,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
 
-    12, 12, 12, 12,
-    12, 12, 12, 12,
-    12, 12, 12, 12,
-    12, 12, 12, 12,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
 
-    9, 9, 9,
-    12, 12, 12, 12,
-    12, 12, 12, 12,
-    12, 12, 12, 12,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
 
-    12, 12, 12, 12,
-    12, 12, 12, 12,
-    12, 12, 12, 12,
-    12, 12, 12, 12,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
 
-    9, 9, 9,
-    12, 12, 12, 12,
-    12, 12, 12, 12,
-    12, 12, 12, 12,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
+    18, 18, 18, 18,
 
 };
 
@@ -126,11 +295,14 @@
 
         // loop through notes
         for(int i=0; i < notes; i++) {
-
+            Vector2D coord = stick.get_coord();
+            int modi = (yoffset + coord.y/5)*noteArray[i];
+            float modt = (xoffset + coord.x/2)*noteDuration[i];
+            printf("%d %d \n",modi,i);
             // play note
-            tone(noteArray[i],60.0/(BPM*noteDuration[i]));
+            tone(modi,60.0/(BPM*modt));
             // leave a short pause between notes
-            wait(60.0/(BPM*noteDuration[i]));
+            wait(60.0/(BPM*modt));
         }
 
         wait(1.0);  // wait a second before repeating
@@ -150,7 +322,8 @@
 
 void tone(float frequency,float duration)
 {
-    graphicEqualizer(frequency);  // equalizer on LEDs
+    int newfreq = int(frequency);
+    graphicEqualizer(newfreq);  // equalizer on LEDs
 
     if (frequency > 0) {  // a frequency of 0 indicates no note played so only play a note if frequency is not 0
 
@@ -177,25 +350,14 @@
 }
 
 // primitive graphic equalizer on the LEDs
-void graphicEqualizer(float frequency)
+void graphicEqualizer(int frequency)
 {
     // these numbers are fairly random and picked to give a
     // decent effect when the melodies plays.
-    // Will have to change for different melodies 
-    if (frequency < 123) {
-        leds = 0;  // all off
-    } 
-    else if (frequency < 440) {
-        leds = 8;  // LED1
-    } 
-    else if (frequency < 523) {
-        leds = 12; // LED1,LED2
-    } 
-    else if (frequency < 1047) {
-        leds = 14; // LED1,LED2,LED3
-    } 
-    else {
-        leds = 15; // LED1,LED2,LED3,LED4 
-    }
+    // Will have to change for different melodies
+    //printf("%f",float((frequency%63)/63.0));
+    red_led = ((frequency%31)/31.0);
+    green_led = (((frequency)%37)/37.0);
+    blue_led = (((frequency)%41)/41.0);
 
 }
\ No newline at end of file