First commit. Non blocking Led and Buzzer library

Dependents:   non_blocking_Led_Buzze_HelloWorld

Buzzer.cpp

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.cpp
* Authors   : Tsungta Wu - CPBG (tsungta.wu@deltaww.com)
* Version   : V.1.0.1
* Date      : 2016/Oct/14
*
*******************************************************************************/

#include "Buzzer.h"
#include "mbed.h"

using namespace mbed;
 // constructor
 /** Create a Beep object connected to the specified PwmOut pin
  *
  * @param pin PwmOut pin to connect to 
  */

Buzzer::Buzzer(PinName pin) : _pwm(pin) {
    _pwm.write(0.0);     // after creating it have to be off 
}

static float Int;
static float* Freq;
static uint16_t Num;
static uint16_t tone_cnt;

 /**next beep instantaneous 
  * usually not used 
  */
  
void Buzzer::stopBuzzer() {
  _pwm.write(0.0);
  tone_cnt = Num;
}

/** 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 Buzzer::simpleBeep(float freq, float time) {
    _pwm.period(1.0/freq);
    _pwm.write(0.5);            // 50% duty cycle - beep on
    tnext.attach(this,&Buzzer::stopBuzzer, time);   // time to off
}
  
void Buzzer::nextTone() {
    if (++tone_cnt < Num) {
      if (Freq[tone_cnt] > 0) {    
        _pwm.period(1.0/Freq[tone_cnt]);
        _pwm.write(0.5);            // 50% duty cycle - beep on
      } else _pwm.write(0.0);
      tnext.attach(this,&Buzzer::nextTone, Int);   // time to off
    } else _pwm.write(0.0);
}

void Buzzer::playMelody (float* tone_freq, uint16_t tone_num,float tone_time) {
    stopBuzzer();
    
    Int = tone_time;  
    Num = tone_num;
    Freq = tone_freq;
    
    tone_cnt = 0;
    _pwm.period(1.0/Freq[tone_cnt]);
    _pwm.write(0.5);            // 50% duty cycle - beep on    
    tnext.attach(this,&Buzzer::nextTone, Int);   // time to off
}