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
Diff: PwmBeep.cpp
- Revision:
- 0:c6220b0517a5
diff -r 000000000000 -r c6220b0517a5 PwmBeep.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PwmBeep.cpp Fri May 22 08:33:18 2020 +0000 @@ -0,0 +1,58 @@ +#include "PwmBeep.h" +#include "mbed.h" + +//public function + + PwmBeep::PwmBeep(PinName pin,int initialfreq) : _pwmbeep(pin) { + setFreq(initialfreq); + _pwmbeep = 0.0; + } + + void PwmBeep::turnOff(){ + _pwmbeep = 0.0; + } + + void PwmBeep::turnOn(){ + _pwmbeep = 0.5; + } + + void PwmBeep::oneshotOn(float time){ + turnOn(); + timeout.attach(callback(this, &PwmBeep::turnOff), time); + } + + void PwmBeep::NshotOn(int num,float ontime,float offtime){ + counter = 0; + repeat_count = num; + repeat_ontime = ontime; + repeat_offtime = offtime; + turnOn_and_setOffTimer(); + } + + void PwmBeep::NshotOnwithWait(int num,float ontime,float offtime){ + for(int i = 0; i < num; i++){ + turnOn(); + wait(ontime); + turnOff(); + wait(offtime); + } + } + + void PwmBeep::setFreq(int freq){ + _pwmbeep.period((float)1.00/freq); //ms + } + + //private function + + void PwmBeep::turnOn_and_setOffTimer(){ + turnOn(); + timeout.attach(callback(this, &PwmBeep::turnOff_and_setOnTimer), repeat_ontime); + counter++; + } + + void PwmBeep::turnOff_and_setOnTimer(){ + turnOff(); + if(counter < repeat_count){ + timeout.attach(callback(this, &PwmBeep::turnOn_and_setOffTimer), repeat_offtime); + } + }