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

Committer:
hmizuno
Date:
Fri May 22 08:33:18 2020 +0000
Revision:
0:c6220b0517a5
first release

Who changed what in which revision?

UserRevisionLine numberNew 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 }