ECE3872 HW/SW Project Code
Dependencies: mbed Servo mbed-rtos 4DGL-uLCD-SE PinDetect X_NUCLEO_53L0A1
SongPlayer.h
- Committer:
- trmontgomery
- Date:
- 2020-04-14
- Revision:
- 26:2063ee8419cc
- Parent:
- 25:7764baddb7bc
File content as of revision 26:2063ee8419cc:
#include "mbed.h"
#include <vector>
class SongPlayer
{
public:
SongPlayer(PinName pin, vector<float> freq) : _pin(pin), frequency(freq) {
}
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, DUR);
}
void nextnote();
private:
Timeout noteduration;
PwmOut _pin;
int notecount;
float vol;
vector<float> frequency;
};
void SongPlayer::nextnote()
{
_pin = 0.0;
notecount++; //setup next note in song
if (frequency[notecount]==0.0) notecount = 0;
_pin.period(1.0/frequency[notecount]);
noteduration.attach(this,&SongPlayer::nextnote, DUR);
_pin = vol/2.0;
}
