First commit. Non blocking Led and Buzzer library

Dependents:   non_blocking_Led_Buzze_HelloWorld

Revision:
0:c18c119011ec
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Buzzer.cpp	Mon Nov 21 06:40:27 2016 +0000
@@ -0,0 +1,75 @@
+/******************** (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
+}
+
+
+
+