Lab4 4180 photocell controlled cursor game

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

Committer:
pwolfe8
Date:
Tue Oct 20 20:22:41 2015 +0000
Revision:
0:a17e0e0a506a
4180Lab4Fall15PhilipWolfe;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pwolfe8 0:a17e0e0a506a 1 #include "PwmSpeaker.h"
pwolfe8 0:a17e0e0a506a 2
pwolfe8 0:a17e0e0a506a 3 PwmSpeaker::PwmSpeaker(PinName pin) : _pin(pin) {
pwolfe8 0:a17e0e0a506a 4 // _pin(pin) means pass pin to the Speaker Constructor
pwolfe8 0:a17e0e0a506a 5 }
pwolfe8 0:a17e0e0a506a 6
pwolfe8 0:a17e0e0a506a 7 // class method to play a note based on PwmOut class
pwolfe8 0:a17e0e0a506a 8 void PwmSpeaker::playNote(float frequency, float duration, float volume) {
pwolfe8 0:a17e0e0a506a 9 _pin.period(1.0/frequency);
pwolfe8 0:a17e0e0a506a 10 _pin = volume/2.0; //50% duty cycle - max volume
pwolfe8 0:a17e0e0a506a 11 wait(duration);
pwolfe8 0:a17e0e0a506a 12 _pin = 0.0; //turn off note
pwolfe8 0:a17e0e0a506a 13 }
pwolfe8 0:a17e0e0a506a 14
pwolfe8 0:a17e0e0a506a 15 // generate a short 150Hz tone using PWM hardware output
pwolfe8 0:a17e0e0a506a 16 // something like this can be used for a button click effect for feedback
pwolfe8 0:a17e0e0a506a 17 //for (i=0; i<10; i++) {
pwolfe8 0:a17e0e0a506a 18 // speaker.period(1.0/150.0); // 500hz period
pwolfe8 0:a17e0e0a506a 19 // speaker =0.25; //25% duty cycle - mid range volume
pwolfe8 0:a17e0e0a506a 20 // wait(.02);
pwolfe8 0:a17e0e0a506a 21 // speaker=0.0; // turn off audio
pwolfe8 0:a17e0e0a506a 22 // wait(0.5);
pwolfe8 0:a17e0e0a506a 23 // }
pwolfe8 0:a17e0e0a506a 24 // sweep up in frequency by changing the PWM period
pwolfe8 0:a17e0e0a506a 25 //for (i=0; i<8000; i=i+100) {
pwolfe8 0:a17e0e0a506a 26 // speaker.period(1.0/float(i));
pwolfe8 0:a17e0e0a506a 27 // speaker=0.25;
pwolfe8 0:a17e0e0a506a 28 // wait(.1);
pwolfe8 0:a17e0e0a506a 29 // }
pwolfe8 0:a17e0e0a506a 30 // wait(2);
pwolfe8 0:a17e0e0a506a 31 // two tone police siren effect - two periods or two frequencies
pwolfe8 0:a17e0e0a506a 32 // increase volume - by changing the PWM duty cycle
pwolfe8 0:a17e0e0a506a 33 // for (i=0; i<26; i=i+2) {
pwolfe8 0:a17e0e0a506a 34 // speaker.period(1.0/969.0);
pwolfe8 0:a17e0e0a506a 35 // speaker = float(i)/50.0;
pwolfe8 0:a17e0e0a506a 36 // wait(.5);
pwolfe8 0:a17e0e0a506a 37 // speaker.period(1.0/800.0);
pwolfe8 0:a17e0e0a506a 38 // wait(.5);
pwolfe8 0:a17e0e0a506a 39 // }
pwolfe8 0:a17e0e0a506a 40 //// decrease volume
pwolfe8 0:a17e0e0a506a 41 // for (i=25; i>=0; i=i-2) {
pwolfe8 0:a17e0e0a506a 42 // speaker.period(1.0/969.0);
pwolfe8 0:a17e0e0a506a 43 // speaker = float(i)/50.0;
pwolfe8 0:a17e0e0a506a 44 // wait(.5);
pwolfe8 0:a17e0e0a506a 45 // speaker.period(1.0/800.0);
pwolfe8 0:a17e0e0a506a 46 // wait(.5);
pwolfe8 0:a17e0e0a506a 47 // }
pwolfe8 0:a17e0e0a506a 48 // speaker =0.0;
pwolfe8 0:a17e0e0a506a 49 // wait(2);
pwolfe8 0:a17e0e0a506a 50 //}