simple game using 2 mbed devices

Dependencies:   4DGL-uLCD-SE mbed-rtos mbed LSM9DS0

Revision:
0:8016d44e8294
diff -r 000000000000 -r 8016d44e8294 player2/SongPlayer.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/player2/SongPlayer.h	Tue Oct 20 20:04:10 2015 +0000
@@ -0,0 +1,52 @@
+//#include "mbed.h"
+// new class to play a note on Speaker based on PwmOut class
+class SongPlayer
+{
+public:
+    SongPlayer(PinName pin) : _pin(pin) {
+// _pin(pin) means pass pin to the constructor
+    }
+// class method to play a note based on PwmOut class
+    void PlaySong(float frequency[], float duration[], float volume=1.0) {
+        vol = volume;
+        notecount = 0;
+        _pin.period(1.0/frequency[notecount]);
+        _pin = volume/2.0;
+        noteduration.attach(this,&SongPlayer::nextnote, duration[notecount]);
+        // setup timer to interrupt for next note to play
+        frequencyptr = frequency;
+        durationptr = duration;
+        //returns after first note starts to play
+    }
+    void nextnote();
+    int getDuration();
+    int getNoteCount();
+    
+private:
+    Timeout noteduration;
+    PwmOut _pin;
+    int notecount;
+    float vol;
+    float * frequencyptr;
+    float * durationptr;
+};
+//Interrupt Routine to play next note
+void SongPlayer::nextnote()
+{
+    _pin = 0.0;
+    notecount++; //setup next note in song
+    if (durationptr[notecount]!=0.0) {
+        _pin.period(1.0/frequencyptr[notecount]);
+        noteduration.attach(this,&SongPlayer::nextnote, durationptr[notecount]);
+        _pin = vol/2.0;
+    } else
+        _pin = 0.0; //turn off on last note
+}
+
+int SongPlayer::getDuration(){
+    return sizeof(durationptr)/sizeof(durationptr[0]);   
+}
+
+int SongPlayer::getNoteCount(){
+    return notecount;
+}
\ No newline at end of file