for rex

Dependencies:   FatFileSystem mbed

Fork of SnakeGame by Pujun Bhatnagar

Committer:
superlova
Date:
Sat Aug 08 09:32:56 2015 +0000
Revision:
1:4222a8f9ca88
for rexry

Who changed what in which revision?

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