ECE3872 HW/SW Project Code
Dependencies: mbed Servo mbed-rtos 4DGL-uLCD-SE PinDetect X_NUCLEO_53L0A1
Diff: SongPlayer.h
- 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