First commit. Non blocking Led and Buzzer library

Dependents:   non_blocking_Led_Buzze_HelloWorld

Committer:
tsungta
Date:
Mon Nov 21 06:40:27 2016 +0000
Revision:
0:c18c119011ec
Library for non blocking Led and Buzzer controller

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tsungta 0:c18c119011ec 1 /******************** (C) COPYRIGHT 2016 Delta Electronics, Inc. ***************
tsungta 0:c18c119011ec 2 *
tsungta 0:c18c119011ec 3 * File Name : Buzzer.cpp
tsungta 0:c18c119011ec 4 * Authors : Tsungta Wu - CPBG (tsungta.wu@deltaww.com)
tsungta 0:c18c119011ec 5 * Version : V.1.0.1
tsungta 0:c18c119011ec 6 * Date : 2016/Oct/14
tsungta 0:c18c119011ec 7 *
tsungta 0:c18c119011ec 8 *******************************************************************************/
tsungta 0:c18c119011ec 9
tsungta 0:c18c119011ec 10 #include "Buzzer.h"
tsungta 0:c18c119011ec 11 #include "mbed.h"
tsungta 0:c18c119011ec 12
tsungta 0:c18c119011ec 13 using namespace mbed;
tsungta 0:c18c119011ec 14 // constructor
tsungta 0:c18c119011ec 15 /** Create a Beep object connected to the specified PwmOut pin
tsungta 0:c18c119011ec 16 *
tsungta 0:c18c119011ec 17 * @param pin PwmOut pin to connect to
tsungta 0:c18c119011ec 18 */
tsungta 0:c18c119011ec 19
tsungta 0:c18c119011ec 20 Buzzer::Buzzer(PinName pin) : _pwm(pin) {
tsungta 0:c18c119011ec 21 _pwm.write(0.0); // after creating it have to be off
tsungta 0:c18c119011ec 22 }
tsungta 0:c18c119011ec 23
tsungta 0:c18c119011ec 24 static float Int;
tsungta 0:c18c119011ec 25 static float* Freq;
tsungta 0:c18c119011ec 26 static uint16_t Num;
tsungta 0:c18c119011ec 27 static uint16_t tone_cnt;
tsungta 0:c18c119011ec 28
tsungta 0:c18c119011ec 29 /**next beep instantaneous
tsungta 0:c18c119011ec 30 * usually not used
tsungta 0:c18c119011ec 31 */
tsungta 0:c18c119011ec 32
tsungta 0:c18c119011ec 33 void Buzzer::stopBuzzer() {
tsungta 0:c18c119011ec 34 _pwm.write(0.0);
tsungta 0:c18c119011ec 35 tone_cnt = Num;
tsungta 0:c18c119011ec 36 }
tsungta 0:c18c119011ec 37
tsungta 0:c18c119011ec 38 /** Beep with given frequency and duration.
tsungta 0:c18c119011ec 39 *
tsungta 0:c18c119011ec 40 * @param frequency - the frequency of the tone in Hz
tsungta 0:c18c119011ec 41 * @param time - the duration of the tone in seconds
tsungta 0:c18c119011ec 42 */
tsungta 0:c18c119011ec 43
tsungta 0:c18c119011ec 44 void Buzzer::simpleBeep(float freq, float time) {
tsungta 0:c18c119011ec 45 _pwm.period(1.0/freq);
tsungta 0:c18c119011ec 46 _pwm.write(0.5); // 50% duty cycle - beep on
tsungta 0:c18c119011ec 47 tnext.attach(this,&Buzzer::stopBuzzer, time); // time to off
tsungta 0:c18c119011ec 48 }
tsungta 0:c18c119011ec 49
tsungta 0:c18c119011ec 50 void Buzzer::nextTone() {
tsungta 0:c18c119011ec 51 if (++tone_cnt < Num) {
tsungta 0:c18c119011ec 52 if (Freq[tone_cnt] > 0) {
tsungta 0:c18c119011ec 53 _pwm.period(1.0/Freq[tone_cnt]);
tsungta 0:c18c119011ec 54 _pwm.write(0.5); // 50% duty cycle - beep on
tsungta 0:c18c119011ec 55 } else _pwm.write(0.0);
tsungta 0:c18c119011ec 56 tnext.attach(this,&Buzzer::nextTone, Int); // time to off
tsungta 0:c18c119011ec 57 } else _pwm.write(0.0);
tsungta 0:c18c119011ec 58 }
tsungta 0:c18c119011ec 59
tsungta 0:c18c119011ec 60 void Buzzer::playMelody (float* tone_freq, uint16_t tone_num,float tone_time) {
tsungta 0:c18c119011ec 61 stopBuzzer();
tsungta 0:c18c119011ec 62
tsungta 0:c18c119011ec 63 Int = tone_time;
tsungta 0:c18c119011ec 64 Num = tone_num;
tsungta 0:c18c119011ec 65 Freq = tone_freq;
tsungta 0:c18c119011ec 66
tsungta 0:c18c119011ec 67 tone_cnt = 0;
tsungta 0:c18c119011ec 68 _pwm.period(1.0/Freq[tone_cnt]);
tsungta 0:c18c119011ec 69 _pwm.write(0.5); // 50% duty cycle - beep on
tsungta 0:c18c119011ec 70 tnext.attach(this,&Buzzer::nextTone, Int); // time to off
tsungta 0:c18c119011ec 71 }
tsungta 0:c18c119011ec 72
tsungta 0:c18c119011ec 73
tsungta 0:c18c119011ec 74
tsungta 0:c18c119011ec 75