ECE3872 HW/SW Project Code

Dependencies:   mbed Servo mbed-rtos 4DGL-uLCD-SE PinDetect X_NUCLEO_53L0A1

Revision:
26:2063ee8419cc
Parent:
25:7764baddb7bc
--- a/SongPlayer.h	Mon Apr 13 21:32:00 2020 +0000
+++ b/SongPlayer.h	Tue Apr 14 01:40:26 2020 +0000
@@ -1,41 +1,34 @@
 #include "mbed.h"
-// new class to play a note on Speaker based on PwmOut class
+#include <vector>
+
 class SongPlayer
 {
 public:
-    SongPlayer(PinName pin) : _pin(pin) {
-// _pin(pin) means pass pin to the constructor
+    SongPlayer(PinName pin, vector<float> freq) : _pin(pin), frequency(freq) {
     }
-// class method to play a note based on PwmOut class
-    void PlaySong(float frequency[], float duration[], float volume=1.0) {
+    void PlaySong(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
+        noteduration.attach(this,&SongPlayer::nextnote, DUR);
     }
     void nextnote();
+    
 private:
     Timeout noteduration;
     PwmOut _pin;
     int notecount;
     float vol;
-    float * frequencyptr;
-    float * durationptr;
+    vector<float> frequency;
 };
-//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
+    if (frequency[notecount]==0.0) notecount = 0; 
+    _pin.period(1.0/frequency[notecount]);
+    noteduration.attach(this,&SongPlayer::nextnote, DUR);
+    _pin = vol/2.0;
 }
\ No newline at end of file