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 Melody by
Diff: main.cpp
- Revision:
- 1:7c149b76c057
- Parent:
- 0:f1e3ef53cc3c
--- 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
