ECE3872 HW/SW Project Code

Dependencies:   mbed Servo mbed-rtos 4DGL-uLCD-SE PinDetect X_NUCLEO_53L0A1

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?

UserRevisionLine numberNew 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 }