【M5】Core2に外付けブザー付けたPgm簡単<3段階の警告音>

M5Core2でRTKモニター作ったのですが、スキーなど運動中にRTKシステムが正常に稼働しているかを見ることができませんので、警告音で状態を知らせる機能をつけました。
M5Stack用パッシブブザーユニット
https://www.switch-science.com/catalog/7629/
●CORE2は音出しが面倒
私はlangship様のコードをコピペしてM5シリーズを使わせていただいているので、langship様がサンプルコードを
用意してない使い方はできません。音出しにかんしては、音源データを用意して高音質の音出しサンプルしかありませんでした。計測プログラムなので、余計なメモリーとCPUパワーを食いたくないので、外付けの単純なブザーを使うことにしました。
kanship様の音についての記事 M5Stack Core2のスピーカー周りを調べる

●常時動作ブザーのプログラムの構成
ESP-NOWでデータログマイコンから状態監視用データが無線で送られてくるので、受信関数はマルチタスクで動作してます。ブザーは、Mainのloop()で回ってます。1秒周期で3段階の音種を鳴らします。マルチタスク部で液晶表示処理をするのに10,msecほどかかりますが、PWMは途切れることなく動作するので、音が途切れる現象は出ません。ブザーを使う場合は、マルチタスクもしくは、短い割り込み処理で他の仕事をやらせるプログラム構造にする必要があります。

●下記サンプルプログラムは、単純にブザーを鳴らす関数を回すだけですので、マルチタスク化も割り込み関数化もしてありませんので、ご自分の用途で改造してください。
基本は3個ですgarretlabo様のreference:ledcSetup()ledcAttachPin() ledcWrite()

ledcSetup(uint8_t PWM Ch, double 周波数Hz,uint8_t PWMのビット数);//0,4000,10bit

ledcAttachPin(uint8_t pin番号、uint8_t PWMのCh);//6,0

 

ledc.Write(uint8_t Ch,uint32_t Duty数);//指定DutyでPWM出力して音量指定で連続出力
Duty=0で無音、Duty=512で50%Dutyでちょうどいい音量になります。

●私のサンプルコード
①関数ABeep(int flag)を実行すると、1~1.7秒に1回だけ音を鳴らします。
動作:1秒周期で警告音がなります。
A音=システム状態がOKな場合:短い高音(20msec,3000Hz) ピッピ音
B音=システムが少し不安定な場合:中くらいの長さの少し低い音(40msec,1000Hz)ププー音
C音=システムが死んでいる場合:長くて低音(700msec,200Hz)ブーブー音
ここでは、flag=131でA音、flag=67でB音、flag<67でC音となってますので、改造時に自分のルールで変更いてください。

②loop()では、ABeep()を呼び出してぐるぐる回っているだけです。10秒たったら、音の種類を切り替えてます。

Core2_BuzzerTest00.ino
https://gist.github.com/dj1711572002/a7aeab039ecce7730c4738b8b1266ca7

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です