ビープ音を出力
今回はビープ音を出力するプログラミングを作成しました。
音を鳴らすための初期化
ビープ音関係の初期化はM5.begin()
では行っていないのでこちらの関数で初期化しましょう。
私は初期化を忘れてかなりの時間、ハマってました。。。
M5.Speaker.begin();
音を鳴らすためのAPI
音を出すためのAPIはいくつかありますが、今回はM5.Speaker.tone()
を使ってみたら、いきなり爆音!!!!
しかも、音量調節できないみたいです。。。
なので代わりにこちらを使います。
まずは使用するチャンネル設定の関数です。
第一引数に使用するチャンネル
第二引数にPWMの周波数
第三引数にデューティ比を表すビット数
この関数はM5.Speaker.begin()
の中でコールされているので第一、第三引数はそのままで、第二引数の周波数だけ変えてあげればよいです。
ledcSetup( TONE_PIN_CHANNEL, TONE_FREQ, 13);
次に音声音量調整の関数です。
第一引数に使用するチャンネル
第二引数にデューティ比
音量は第二引数のデューティ比を変更して調整します。
ledcWrite( TONE_PIN_CHANNEL, 0x1FF>>(9-ucVol) );
サンプルコード
#include <M5Stack.h> #define TONE_FREQ 900 #define TONE_STOP 0 #define TONE_PLAY 1 static unsigned char gucVol = 0; static unsigned char gucToneSts = 0; void setup() { // M5Stackの初期化 M5.begin(); // Speaker初期化 M5.Speaker.begin(); // BLACK Screen M5.Lcd.fillScreen(BLACK); // 横線 M5.Lcd.drawFastHLine(0, 220, 320, WHITE); // 縦線 M5.Lcd.drawFastVLine(106, 220, 20, WHITE); M5.Lcd.drawFastVLine(219, 220, 20, WHITE); // 矢印 M5.Lcd.fillTriangle( 49, 232, 53, 224, 57, 232,WHITE ); // M5.Lcd.fillTriangle( 159, 224, 167, 228, 159, 232,WHITE ); M5.Lcd.fillTriangle( 269, 224, 273, 232, 277, 224,WHITE ); // テキストサイズ指定 M5.Lcd.setTextSize(1); // START M5.Lcd.setCursor(140, 224); M5.Lcd.print("START"); // ボリューム値 gucVol = 4; // トーン状態 gucToneSts = TONE_STOP; } void loop() { M5.update(); // Aボタン if (M5.BtnA.wasPressed()) { // 再生中 if( TONE_PLAY == gucToneSts) { // 音量UP if( gucVol < 9 ){ gucVol++; } else { gucVol = 9; } SetVolume( gucVol ); } } // Bボタン if (M5.BtnB.wasPressed()) { // 開始 if( TONE_STOP == gucToneSts) { ledcSetup( TONE_PIN_CHANNEL, TONE_FREQ, 13); SetVolume( gucVol ); gucToneSts = TONE_PLAY; // テキストサイズ指定 M5.Lcd.setTextSize(1); // START M5.Lcd.fillRect(107, 221, 87, 19, BLACK); M5.Lcd.setCursor(140, 224); M5.Lcd.print("STOP"); } // 停止 else { // ミュート M5.Speaker.mute(); gucToneSts = TONE_STOP; // テキストサイズ指定 M5.Lcd.setTextSize(1); // START M5.Lcd.fillRect(107, 221, 87, 19, BLACK); M5.Lcd.setCursor(140, 224); M5.Lcd.print("START"); } } // Cボタン if (M5.BtnC.wasPressed()) { // 再生中 if( TONE_PLAY == gucToneSts) { // 音量DOWN if( gucVol > 0 ){ gucVol--; } else { gucVol = 0; } SetVolume( gucVol ); } } //音量 // テキストサイズ指定 M5.Lcd.setTextSize(2); // ENTER M5.Lcd.setCursor(100, 100); M5.Lcd.printf("VOLUME: %d", gucVol); delay(100); return; } static void SetVolume( unsigned char ucVol ) { ledcWrite( TONE_PIN_CHANNEL, 0x1FF>>(9-ucVol) ); return; }
これで爆音でなるビープ音から解放された。
www.youtube.com
m5stackで組込み! 時刻設定
設定メニューから事項設定に遷移できるようにしました。
m5stackで組込み! メニュー表示
設定メニューに遷移できるようにしました。
m5stackで組込み! 起動画面
まずは起動後の最初の画面は無難に時刻表示にしときましょう。
中央上部に表示させるようにしました。
m5stackで組込み!
今まで個々の機能を作ってきましたが、それぞれの機能を合わせて色々とできないかなーと思っていたところ、
やはり同じように考えている方がいました。
私もこんな感じでこれからは作っていきたいと思います。
Arduino Pro IDEとは?
Arduino IDEとは違いデバッグができるみたいですけど。。。できない。
まずは使い方がさっぱりわからない。
α版なのでバグも多いみたい。。。
ちなみにこちらからダウンロードできます。
github.com
興味がある人はダウンロードしてみてください。
また使い方が分かったらぜひ教えていただきたいです。笑
twitterに投稿 その2
ソースを綺麗にしたので公開
メインファイル
#include <M5Stack.h> #include "WifiTwitter.h" WifiTwitter wifitwitter("YOUR_TOKEN"); void setup() { String config_ini; String ssid; String password; /* 初期化 */ M5.begin(); /* SD初期化 */ SD.begin(); /* 文字サイズを変更 */ M5.Lcd.setTextSize(1); /* ファイルオープン */ File datFile = SD.open("/set/config.ini"); if( datFile ) { M5.Lcd.println("File open successful"); /* サイズ分ループ */ while( datFile.available() ) { config_ini = config_ini + datFile.readString(); } /* ファイルクローズ */ datFile.close(); } else { M5.Lcd.println("File open error hello.txt"); } /* SSID取得 */ config_ini = config_ini.substring(config_ini.indexOf("#SSID\r\n") + 7); ssid = config_ini.substring(0, config_ini.indexOf("\r\n")); /* パスワード取得 */ config_ini = config_ini.substring(config_ini.indexOf("#SSID_PASS\r\n") + 12); password = config_ini.substring(0, config_ini.indexOf("\r\n")); /* connect to WiFi */ M5.Lcd.print("Connecting to YOUR_SSID "); /* wifi初期化 */ WiFi.begin(ssid.c_str(), password.c_str()); while (WiFi.status() != WL_CONNECTED) { delay(500); M5.Lcd.print("."); } M5.Lcd.println(" CONNECTED"); /* disconnect WiFi as it's no longer needed */ // WiFi.disconnect(true); // WiFi.mode(WIFI_OFF); } void loop() { M5.update(); // Aボタン if (M5.BtnA.wasPressed()) { if (wifitwitter.post("tweet for M5stack A Btn")) { int status = wifitwitter.wait(); if (status == 200) { Serial.println("OK."); } else { Serial.print("failed : code "); Serial.println(status); } } else { Serial.println("connection failed."); } } // Bボタン if (M5.BtnB.wasPressed()) { wifitwitter.post("tweet for M5stack B Btn"); } // Cボタン if (M5.BtnC.wasPressed()) { wifitwitter.post("tweet for M5stack C Btn"); } }
twitterライブラリ
このライブラリをもとにEthernetからwifiに変更しました。
github.com