Lab4 4180 photocell controlled cursor game
Dependencies: 4DGL-uLCD-SE SDFileSystem mbed-rtos mbed wave_player
PwmSpeaker.cpp@0:a17e0e0a506a, 2015-10-20 (annotated)
- Committer:
- pwolfe8
- Date:
- Tue Oct 20 20:22:41 2015 +0000
- Revision:
- 0:a17e0e0a506a
4180Lab4Fall15PhilipWolfe;
Who changed what in which revision?
User | Revision | Line number | New 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 | //} |