PWMポートを使ってビープを鳴らすライブラリです。周波数指定、単純なON/OFF、ワンショット、指定回数の繰り返しに対応しています。(It is a library that sounds a beep using the PWM port. It supports frequency specification, simple ON / OFF, one shot, and specified number of repetitions.)
Dependents: PwmBeep_hello DLC_STARTER
PwmBeep.cpp@0:c6220b0517a5, 2020-05-22 (annotated)
- Committer:
- hmizuno
- Date:
- Fri May 22 08:33:18 2020 +0000
- Revision:
- 0:c6220b0517a5
first release
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hmizuno | 0:c6220b0517a5 | 1 | #include "PwmBeep.h" |
hmizuno | 0:c6220b0517a5 | 2 | #include "mbed.h" |
hmizuno | 0:c6220b0517a5 | 3 | |
hmizuno | 0:c6220b0517a5 | 4 | //public function |
hmizuno | 0:c6220b0517a5 | 5 | |
hmizuno | 0:c6220b0517a5 | 6 | PwmBeep::PwmBeep(PinName pin,int initialfreq) : _pwmbeep(pin) { |
hmizuno | 0:c6220b0517a5 | 7 | setFreq(initialfreq); |
hmizuno | 0:c6220b0517a5 | 8 | _pwmbeep = 0.0; |
hmizuno | 0:c6220b0517a5 | 9 | } |
hmizuno | 0:c6220b0517a5 | 10 | |
hmizuno | 0:c6220b0517a5 | 11 | void PwmBeep::turnOff(){ |
hmizuno | 0:c6220b0517a5 | 12 | _pwmbeep = 0.0; |
hmizuno | 0:c6220b0517a5 | 13 | } |
hmizuno | 0:c6220b0517a5 | 14 | |
hmizuno | 0:c6220b0517a5 | 15 | void PwmBeep::turnOn(){ |
hmizuno | 0:c6220b0517a5 | 16 | _pwmbeep = 0.5; |
hmizuno | 0:c6220b0517a5 | 17 | } |
hmizuno | 0:c6220b0517a5 | 18 | |
hmizuno | 0:c6220b0517a5 | 19 | void PwmBeep::oneshotOn(float time){ |
hmizuno | 0:c6220b0517a5 | 20 | turnOn(); |
hmizuno | 0:c6220b0517a5 | 21 | timeout.attach(callback(this, &PwmBeep::turnOff), time); |
hmizuno | 0:c6220b0517a5 | 22 | } |
hmizuno | 0:c6220b0517a5 | 23 | |
hmizuno | 0:c6220b0517a5 | 24 | void PwmBeep::NshotOn(int num,float ontime,float offtime){ |
hmizuno | 0:c6220b0517a5 | 25 | counter = 0; |
hmizuno | 0:c6220b0517a5 | 26 | repeat_count = num; |
hmizuno | 0:c6220b0517a5 | 27 | repeat_ontime = ontime; |
hmizuno | 0:c6220b0517a5 | 28 | repeat_offtime = offtime; |
hmizuno | 0:c6220b0517a5 | 29 | turnOn_and_setOffTimer(); |
hmizuno | 0:c6220b0517a5 | 30 | } |
hmizuno | 0:c6220b0517a5 | 31 | |
hmizuno | 0:c6220b0517a5 | 32 | void PwmBeep::NshotOnwithWait(int num,float ontime,float offtime){ |
hmizuno | 0:c6220b0517a5 | 33 | for(int i = 0; i < num; i++){ |
hmizuno | 0:c6220b0517a5 | 34 | turnOn(); |
hmizuno | 0:c6220b0517a5 | 35 | wait(ontime); |
hmizuno | 0:c6220b0517a5 | 36 | turnOff(); |
hmizuno | 0:c6220b0517a5 | 37 | wait(offtime); |
hmizuno | 0:c6220b0517a5 | 38 | } |
hmizuno | 0:c6220b0517a5 | 39 | } |
hmizuno | 0:c6220b0517a5 | 40 | |
hmizuno | 0:c6220b0517a5 | 41 | void PwmBeep::setFreq(int freq){ |
hmizuno | 0:c6220b0517a5 | 42 | _pwmbeep.period((float)1.00/freq); //ms |
hmizuno | 0:c6220b0517a5 | 43 | } |
hmizuno | 0:c6220b0517a5 | 44 | |
hmizuno | 0:c6220b0517a5 | 45 | //private function |
hmizuno | 0:c6220b0517a5 | 46 | |
hmizuno | 0:c6220b0517a5 | 47 | void PwmBeep::turnOn_and_setOffTimer(){ |
hmizuno | 0:c6220b0517a5 | 48 | turnOn(); |
hmizuno | 0:c6220b0517a5 | 49 | timeout.attach(callback(this, &PwmBeep::turnOff_and_setOnTimer), repeat_ontime); |
hmizuno | 0:c6220b0517a5 | 50 | counter++; |
hmizuno | 0:c6220b0517a5 | 51 | } |
hmizuno | 0:c6220b0517a5 | 52 | |
hmizuno | 0:c6220b0517a5 | 53 | void PwmBeep::turnOff_and_setOnTimer(){ |
hmizuno | 0:c6220b0517a5 | 54 | turnOff(); |
hmizuno | 0:c6220b0517a5 | 55 | if(counter < repeat_count){ |
hmizuno | 0:c6220b0517a5 | 56 | timeout.attach(callback(this, &PwmBeep::turnOn_and_setOffTimer), repeat_offtime); |
hmizuno | 0:c6220b0517a5 | 57 | } |
hmizuno | 0:c6220b0517a5 | 58 | } |