VSD

Dependencies:   4DGL-uLCD-SE HTU21D mbed-rtos mbed wave_player

Committer:
dajbaptis
Date:
Fri Dec 09 04:25:45 2022 +0000
Revision:
12:a5be4d71addc
ece 4180 project

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dajbaptis 12:a5be4d71addc 1 #include "mbed.h"
dajbaptis 12:a5be4d71addc 2 // new class to play a note on Speaker based on PwmOut class
dajbaptis 12:a5be4d71addc 3 class SongPlayer
dajbaptis 12:a5be4d71addc 4 {
dajbaptis 12:a5be4d71addc 5 public:
dajbaptis 12:a5be4d71addc 6 SongPlayer(PinName pin) : _pin(pin) {
dajbaptis 12:a5be4d71addc 7 // _pin(pin) means pass pin to the constructor
dajbaptis 12:a5be4d71addc 8 }
dajbaptis 12:a5be4d71addc 9 // class method to play a note based on PwmOut class
dajbaptis 12:a5be4d71addc 10 void PlaySong(float frequency[], float duration[], float volume=1.0) {
dajbaptis 12:a5be4d71addc 11 vol = volume;
dajbaptis 12:a5be4d71addc 12 notecount = 0;
dajbaptis 12:a5be4d71addc 13 _pin.period(1.0/frequency[notecount]);
dajbaptis 12:a5be4d71addc 14 _pin = volume/2.0;
dajbaptis 12:a5be4d71addc 15 noteduration.attach(this,&SongPlayer::nextnote, duration[notecount]);
dajbaptis 12:a5be4d71addc 16 // setup timer to interrupt for next note to play
dajbaptis 12:a5be4d71addc 17 frequencyptr = frequency;
dajbaptis 12:a5be4d71addc 18 durationptr = duration;
dajbaptis 12:a5be4d71addc 19 //returns after first note starts to play
dajbaptis 12:a5be4d71addc 20 }
dajbaptis 12:a5be4d71addc 21 void nextnote();
dajbaptis 12:a5be4d71addc 22 private:
dajbaptis 12:a5be4d71addc 23 Timeout noteduration;
dajbaptis 12:a5be4d71addc 24 PwmOut _pin;
dajbaptis 12:a5be4d71addc 25 int notecount;
dajbaptis 12:a5be4d71addc 26 float vol;
dajbaptis 12:a5be4d71addc 27 float * frequencyptr;
dajbaptis 12:a5be4d71addc 28 float * durationptr;
dajbaptis 12:a5be4d71addc 29 };
dajbaptis 12:a5be4d71addc 30 //Interrupt Routine to play next note
dajbaptis 12:a5be4d71addc 31 void SongPlayer::nextnote()
dajbaptis 12:a5be4d71addc 32 {
dajbaptis 12:a5be4d71addc 33 _pin = 0.0;
dajbaptis 12:a5be4d71addc 34 notecount++; //setup next note in song
dajbaptis 12:a5be4d71addc 35 if (durationptr[notecount]!=0.0) {
dajbaptis 12:a5be4d71addc 36 _pin.period(1.0/frequencyptr[notecount]);
dajbaptis 12:a5be4d71addc 37 noteduration.attach(this,&SongPlayer::nextnote, durationptr[notecount]);
dajbaptis 12:a5be4d71addc 38 _pin = vol/2.0;
dajbaptis 12:a5be4d71addc 39 } else
dajbaptis 12:a5be4d71addc 40 _pin = 0.0; //turn off on last note
dajbaptis 12:a5be4d71addc 41 }