First commit. Non blocking Led and Buzzer library
Dependents: non_blocking_Led_Buzze_HelloWorld
Buzzer.cpp@0:c18c119011ec, 2016-11-21 (annotated)
- 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?
User | Revision | Line number | New 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 |