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

Files at this revision

API Documentation at this revision

Comitter:
hmizuno
Date:
Fri May 22 08:33:18 2020 +0000
Commit message:
first release

Changed in this revision

PwmBeep.cpp Show annotated file Show diff for this revision Revisions of this file
PwmBeep.h Show annotated file Show diff for this revision Revisions of this file
--- /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);
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PwmBeep.h	Fri May 22 08:33:18 2020 +0000
@@ -0,0 +1,79 @@
+#ifndef PWMBEEP_H
+#define PWMBEEP_H
+
+#include "mbed.h"
+
+/** PwmBeep class.
+*  PwmOutを使用してビープを鳴らすライブラリです。(A library that generate a beep using PwmOut.)
+*/
+class PwmBeep{
+public:
+    /** 
+     * @param pin 使用するPwmOutポート (PwmOut port to use)
+     * @param initialfreq 周波数(Hz) (Frequency(Hz))
+     *
+     * 周波数はsetFreq()により後で変更できます。(The frequency can be changed later with setFreq().)
+     */
+    PwmBeep(PinName pin, int initialfreq = 1000);
+    
+    /**
+     * @brief ビープをオフします。(Turn off a beep.)
+     */
+    void turnOff();
+     
+     /**
+     * @brief ビープをオンします。(Turn on a beep.)
+     */
+    void turnOn();
+    
+    /**
+     * @brief 一度だけ指定時間鳴らします。内部でタイムアウト割り込みを使用しており、鳴らしながら他の処理ができます。ボタン操作音用です。
+     * (Sounds once for a specified time. The timeout interrupt is used internally, and other processing can be done while sounding.For button touch sounds.)
+     * @param time 鳴らす時間(秒) (Duration time(sec))
+     */
+    void oneshotOn(float time);
+    
+     /**
+     * @brief 指定回数繰り返し鳴らします。内部でタイマー割り込みを使用しており、鳴らしながら他の処理ができます。
+     * (Repeat the specified number of times. The timer interrupt is used internally, and other processing can be done while sounding.)
+     * @param num 繰り返し回数 (Number of repetitions)
+     * @param ontime 一周期中のON時間(秒) (On time in one cycle(sec))
+     * @param offtime 一周期中のoff時間(秒) (Off time in one cycle(sec))
+     *
+     * ※鳴動回数でエラーコードを示すなど確実に指定回数鳴らしたい場面では、NshotOnwithWait の使用を検討ください。
+     * (Consider using NshotOnwithWait in situations where you want to be sure to sound the specified number of times, 
+     *  such as showing an error code by the number of times you ring.)
+     */
+    void NshotOn(int num,float ontime,float offtime);
+     
+     /**
+     * @brief 指定回数繰り返し鳴らします。内部でwait()関数を使用しており、指定数鳴らし終わるまで他の処理を止めます。
+     *  (Repeat the specified number of times. The wait() function is used internally, and other processing is stopped until the specified number of sounds have been played.)
+     * @param num 繰り返し回数 (Number of repetitions)
+     * @param ontime 一周期中のON時間(秒) (On time in one cycle(秒))
+     * @param offtime 一周期中のoff時間(秒) (Off time in one cycle(秒))
+     * 
+     * 途中でビープを操作する割り込み処理がかからないよう、必要に応じて割り込みの禁止・許可を外部で設定してください。
+     * (If necessary, disable or enable interrupts externally so that interrupt processing that operates the beep does not occur during the process.)
+     */
+    void NshotOnwithWait(int num,float ontime,float offtime);
+    
+    /**
+     * @brief ビープの周波数を設定します。(Set frequency of beep.)
+     * @param freq 周波数(Hz) (Frequency(Hz))
+     */
+    void setFreq(int freq);
+ 
+private:
+    PwmOut _pwmbeep;
+    Timeout timeout;
+    int counter;
+    int repeat_count;
+    float repeat_ontime;
+    float repeat_offtime;
+    
+    void turnOn_and_setOffTimer();
+    void turnOff_and_setOnTimer();
+};
+
+#endif
\ No newline at end of file