First commit. Non blocking Led and Buzzer library

Dependents:   non_blocking_Led_Buzze_HelloWorld

Buzzer.h

Committer:
tsungta
Date:
2016-11-21
Revision:
0:c18c119011ec

File content as of revision 0:c18c119011ec:

/******************** (C) COPYRIGHT 2016 Delta Electronics, Inc. ***************
*
* File Name : Buzzer.h
* Authors   : Tsungta Wu - CPBG (tsungta.wu@deltaww.com)
* Version   : V.1.0.1
* Date      : 2016/Nov/14
*
*******************************************************************************/

/** class to make sound and play melody with a buzzer using PWM
 *   The class use a timer to change tone  - it is not blocking while playing melody
 *
 * Example:
 * @code
 * #include "mbed.h"
 * #include "Buzzer.h"
 * 
 * Buzzer buzzer(p21);
 * 
 *#define tone_num   5
 *float tone[tone_num] = {262, 294, 330, 349, 392};

 * int main() {
 *       ...
 *   buzzer.simpleBeep(1000,0.5);   //beep frequency at 1KHz for 0.5 second    
 *       ...
 *   buzzer.playMelody(tone, tone_num, 0.5);    //play do re mi fa so change tone every 0.5 second
 *       ...
 * }
 * @endcode
 */

#ifndef MBED_BUZZER_H
#define MBED_BUZZER_H

#include "mbed.h"

namespace mbed {

/* Class: Buzzer
 *  A class witch uses PwmOut to play sounds.
 *  The class use a timer to change tone  - it is not blocking
 */
class Buzzer {

public:

/** Create a Buzzer object connected to the specified GPIO pin
 *
 * @param pin GPIO pin to connect to
 * @param debug GPIO uart tx pin used to print debug message (reserved)  
 */
    Buzzer (PinName pin);

/** Beep with given frequency and duration.
 *
 * @param frequency - the frequency of the tone in Hz
 * @param time - the duration of the tone in seconds
 */
    void simpleBeep (float frequency, float time);

/** Play melody with given frequency and interval.
 *
 * @param tone_freq - the frequency of each tone in Hz
 * @param tone_num - the total number of the given tones
 * @param tone_time - the duration of each tone in seconds
 */
    void playMelody (float* tone_freq, uint16_t tone_num,float tone_time);
    
/** stop the Buzzer instantaneous 
 * usually not used 
 */
    void stopBuzzer();
    
private :

    void nextTone();
    PwmOut _pwm;
    Timeout tnext;
    PinName _debug;
};

}
#endif