ECE3872 HW/SW Project Code

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

Committer:
trmontgomery
Date:
Mon Apr 13 21:32:00 2020 +0000
Revision:
25:7764baddb7bc
Child:
26:2063ee8419cc
trying to make a servo move back and forth. tried to use SongPlayer class to control servos.

Who changed what in which revision?

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