Fork of beep lib. Enables play of continous tones and changing of frequency on the fly

Fork of beep by Peter Drescher

Committer:
alexanderh
Date:
Fri Jan 24 09:47:13 2014 +0000
Revision:
5:a844c1579d27
Beep2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alexanderh 5:a844c1579d27 1 #include "beep2.h"
alexanderh 5:a844c1579d27 2 #include "mbed.h"
alexanderh 5:a844c1579d27 3
alexanderh 5:a844c1579d27 4 /** class to make sound with a buzzer, based on a PwmOut
alexanderh 5:a844c1579d27 5 * The class use a timeout to switch off the sound - it is not blocking while making noise
alexanderh 5:a844c1579d27 6 *
alexanderh 5:a844c1579d27 7 * Example:
alexanderh 5:a844c1579d27 8 * @code
alexanderh 5:a844c1579d27 9 * // Beep with 1Khz for 0.5 seconds
alexanderh 5:a844c1579d27 10 * #include "mbed.h"
alexanderh 5:a844c1579d27 11 * #include "beep.h"
alexanderh 5:a844c1579d27 12 *
alexanderh 5:a844c1579d27 13 * Beep buzzer(p21);
alexanderh 5:a844c1579d27 14 *
alexanderh 5:a844c1579d27 15 * int main() {
alexanderh 5:a844c1579d27 16 * ...
alexanderh 5:a844c1579d27 17 * buzzer.beep(1000,0.5);
alexanderh 5:a844c1579d27 18 * ...
alexanderh 5:a844c1579d27 19 * }
alexanderh 5:a844c1579d27 20 * @endcode
alexanderh 5:a844c1579d27 21 */
alexanderh 5:a844c1579d27 22
alexanderh 5:a844c1579d27 23 using namespace mbed;
alexanderh 5:a844c1579d27 24 // constructor
alexanderh 5:a844c1579d27 25 /** Create a Beep object connected to the specified PwmOut pin
alexanderh 5:a844c1579d27 26 *
alexanderh 5:a844c1579d27 27 * @param pin PwmOut pin to connect to
alexanderh 5:a844c1579d27 28 */
alexanderh 5:a844c1579d27 29
alexanderh 5:a844c1579d27 30 Beep::Beep(PinName pin) : _pwm(pin) {
alexanderh 5:a844c1579d27 31 _pwm.write(0.0); // after creating it have to be off
alexanderh 5:a844c1579d27 32 }
alexanderh 5:a844c1579d27 33
alexanderh 5:a844c1579d27 34 /** stop the beep instantaneous
alexanderh 5:a844c1579d27 35 * usually not used
alexanderh 5:a844c1579d27 36 */
alexanderh 5:a844c1579d27 37 void Beep::nobeep() {
alexanderh 5:a844c1579d27 38 _pwm.write(0.0);
alexanderh 5:a844c1579d27 39 }
alexanderh 5:a844c1579d27 40
alexanderh 5:a844c1579d27 41
alexanderh 5:a844c1579d27 42 /** Beep with given frequency and duration.
alexanderh 5:a844c1579d27 43 *
alexanderh 5:a844c1579d27 44 * @param frequency - the frequency of the tone in Hz
alexanderh 5:a844c1579d27 45 * @param time - the duration of the tone in seconds
alexanderh 5:a844c1579d27 46 */
alexanderh 5:a844c1579d27 47
alexanderh 5:a844c1579d27 48 void Beep::beep(float freq, float time, float dc ) {
alexanderh 5:a844c1579d27 49
alexanderh 5:a844c1579d27 50 _pwm.period(1.0/freq);
alexanderh 5:a844c1579d27 51 _pwm.write(dc); // 50% duty cycle - beep on
alexanderh 5:a844c1579d27 52 toff.attach(this,&Beep::nobeep, time); // time to off
alexanderh 5:a844c1579d27 53 }
alexanderh 5:a844c1579d27 54 void Beep::beepNoStop(float freq, float dc ) {
alexanderh 5:a844c1579d27 55
alexanderh 5:a844c1579d27 56 _pwm.period(1.0/freq);
alexanderh 5:a844c1579d27 57 _pwm.write(dc); // 50% duty cycle - beep on
alexanderh 5:a844c1579d27 58
alexanderh 5:a844c1579d27 59 }
alexanderh 5:a844c1579d27 60
alexanderh 5:a844c1579d27 61 void Beep::changeDc(float dc ) {
alexanderh 5:a844c1579d27 62 static float lastdc;
alexanderh 5:a844c1579d27 63
alexanderh 5:a844c1579d27 64
alexanderh 5:a844c1579d27 65 if ( lastdc != dc){
alexanderh 5:a844c1579d27 66 _pwm.write(dc);
alexanderh 5:a844c1579d27 67 }
alexanderh 5:a844c1579d27 68
alexanderh 5:a844c1579d27 69 lastdc = dc;
alexanderh 5:a844c1579d27 70
alexanderh 5:a844c1579d27 71 }
alexanderh 5:a844c1579d27 72
alexanderh 5:a844c1579d27 73