Project for playing a song on 2 meeds sending notes over I2C

Dependencies:   C12832 mbed

Revision:
6:84c34161559e
Parent:
5:432203c226ed
Child:
7:b8f4ab589d16
--- a/main.cpp	Thu Feb 13 22:54:56 2014 +0000
+++ b/main.cpp	Thu Feb 13 23:18:39 2014 +0000
@@ -1,6 +1,7 @@
 #include "mbed.h"
 #include "C12832.h"
 #include "mario.h"
+#include "lovesme.h"
 
 #define MASTER
 //#define SLAVE
@@ -23,6 +24,7 @@
 char length;
 const int slaveAddress = 0x42;
 char received = 0;
+float waitBase=1;
 
 int main()
 {
@@ -35,15 +37,16 @@
     while(1) {
         if (fire) {
             leds=0xf;
+            waitBase = 60.0/marioTempo;
             for(int i=0;i<(sizeof(marioNotes)/sizeof(NoteName));i++){
                 if(marioNotes[i] == R) {
                     spkr=0.0;
-                    wait(.7*marioBeats[i]/12);
+                    wait(waitBase*marioBeats[i]/12);
                 }
                 else{
                     spkr.period(1/(notes[marioNotes[i]]));
                     spkr=.5;
-                    wait(.7*marioBeats[i]/12);
+                    wait(waitBase*marioBeats[i]/12);
                     spkr=0.0;
                 }
             }
@@ -52,6 +55,7 @@
         } else {
             leds=joy;
 #ifdef MASTER
+            waitBase = 60.0/marioTempo;
             if(up) {
                 //master sends its song to slave
                 i2cPort.start();
@@ -59,17 +63,17 @@
                 i2cPort.write(slaveAddress);
                 //send tempo (BPM)
                 //loop through song
-                for(int i=0;i<50/*(sizeof(marioNotes)/sizeof(NoteName))*/;i++){
+                for(int i=0;i<(sizeof(marioNotes)/sizeof(NoteName));i++){
                     if(marioNotes[i] == R) {
                         i2cPort.write(R);
                         spkr=0.0;
-                        wait(.7*marioBeats[i]/12);
+                        wait(waitBase*marioBeats[i]/12);
                     }
                     else{
                         i2cPort.write(marioNotes[i]);
                         spkr.period(1/(notes[marioNotes[i]]));
                         spkr=.5;
-                        wait(.7*marioBeats[i]/12);
+                        wait(waitBase*marioBeats[i]/12);
                         spkr=0.0;
                     }
                 }
@@ -107,19 +111,20 @@
             }
 #endif
 #ifdef SLAVE
+            waitBase = 60.0/lovesMeTempo;
             received = slave.receive();
             if(I2CSlave::ReadAddressed==received) { //master is requesting slave song
-                for(int i=0;i<50/*(sizeof(marioNotes)/sizeof(NoteName))*/;i++){
-                    if(marioNotes[i] == R) {
+                for(int i=0;i<(sizeof(loveFrequency)/sizeof(NoteName));i++){
+                    if(loveFrequency[i] == R) {
                         slave.write(R);
                         spkr=0.0;
-                        wait(.7*marioBeats[i]/12);
+                        wait(waitBase*loveBeat[i]/12);
                     }
                     else{
-                        slave.write(marioNotes[i]);
-                        spkr.period(1/(notes[marioNotes[i]]));
+                        slave.write(loveFrequency[i]);
+                        spkr.period(1/(notes[loveFrequency[i]]));
                         spkr=.5;
-                        wait(.7*marioBeats[i]/12);
+                        wait(waitBase*loveBeat[i]/12);
                         spkr=0.0;
                     }
                 }