ECE3872 HW/SW Project Code
Dependencies: mbed Servo mbed-rtos 4DGL-uLCD-SE PinDetect X_NUCLEO_53L0A1
SongPlayer.h@26:2063ee8419cc, 2020-04-14 (annotated)
- Committer:
- trmontgomery
- Date:
- Tue Apr 14 01:40:26 2020 +0000
- Revision:
- 26:2063ee8419cc
- Parent:
- 25:7764baddb7bc
map of distinct movements is playable. can record and play music at the same time.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
trmontgomery | 25:7764baddb7bc | 1 | #include "mbed.h" |
trmontgomery | 26:2063ee8419cc | 2 | #include <vector> |
trmontgomery | 26:2063ee8419cc | 3 | |
trmontgomery | 25:7764baddb7bc | 4 | class SongPlayer |
trmontgomery | 25:7764baddb7bc | 5 | { |
trmontgomery | 25:7764baddb7bc | 6 | public: |
trmontgomery | 26:2063ee8419cc | 7 | SongPlayer(PinName pin, vector<float> freq) : _pin(pin), frequency(freq) { |
trmontgomery | 25:7764baddb7bc | 8 | } |
trmontgomery | 26:2063ee8419cc | 9 | void PlaySong(float duration, float volume=1.0) { |
trmontgomery | 25:7764baddb7bc | 10 | vol = volume; |
trmontgomery | 25:7764baddb7bc | 11 | notecount = 0; |
trmontgomery | 25:7764baddb7bc | 12 | _pin.period(1.0/frequency[notecount]); |
trmontgomery | 25:7764baddb7bc | 13 | _pin = volume/2.0; |
trmontgomery | 26:2063ee8419cc | 14 | noteduration.attach(this,&SongPlayer::nextnote, DUR); |
trmontgomery | 25:7764baddb7bc | 15 | } |
trmontgomery | 25:7764baddb7bc | 16 | void nextnote(); |
trmontgomery | 26:2063ee8419cc | 17 | |
trmontgomery | 25:7764baddb7bc | 18 | private: |
trmontgomery | 25:7764baddb7bc | 19 | Timeout noteduration; |
trmontgomery | 25:7764baddb7bc | 20 | PwmOut _pin; |
trmontgomery | 25:7764baddb7bc | 21 | int notecount; |
trmontgomery | 25:7764baddb7bc | 22 | float vol; |
trmontgomery | 26:2063ee8419cc | 23 | vector<float> frequency; |
trmontgomery | 25:7764baddb7bc | 24 | }; |
trmontgomery | 26:2063ee8419cc | 25 | |
trmontgomery | 25:7764baddb7bc | 26 | void SongPlayer::nextnote() |
trmontgomery | 25:7764baddb7bc | 27 | { |
trmontgomery | 25:7764baddb7bc | 28 | _pin = 0.0; |
trmontgomery | 25:7764baddb7bc | 29 | notecount++; //setup next note in song |
trmontgomery | 26:2063ee8419cc | 30 | if (frequency[notecount]==0.0) notecount = 0; |
trmontgomery | 26:2063ee8419cc | 31 | _pin.period(1.0/frequency[notecount]); |
trmontgomery | 26:2063ee8419cc | 32 | noteduration.attach(this,&SongPlayer::nextnote, DUR); |
trmontgomery | 26:2063ee8419cc | 33 | _pin = vol/2.0; |
trmontgomery | 25:7764baddb7bc | 34 | } |