M5Stackがアツいらしい
ちょいと試作をしてみようと思い久しぶりにArduino界隈に触れてみました。M5 Stackという開発環境が流行っているようなので上記の本を元に勉強を進めています。
購入したのはM5 StickC Plus
用途的に細くて軽い方が良かったのでSwitch ScienceにてM5 StickC Plusという製品を買いました。本を進めていると搭載Beep音を鳴らす所でM5 Stackのコードでは単純には動かないものがあり、M5 StickC Plusでは少し書き方が違うので調べました。
M5以下のSpeakerクラスが実装されておらず、代わりにBeepクラスが実装されているようでした。
修正後動いた!
コード(上記の本のサンプルコードのM5 Stick C Plus用 改変版)
#include <M5StickCPlus.h>
//各音符の周波数を定義しています
#define NOTE_C4 261.626 //ド4 C4
#define NOTE_C4b 277.183 //ド#4 C#4
#define NOTE_D4 293.665 //レ4 D4
#define NOTE_D4b 311.127 //レ#4 D#4
#define NOTE_E4 329.628 //ミ4 E4
#define NOTE_F4 349.228 //ファ4 F4
#define NOTE_F4b 369.994 //ファ#4 F#4
#define NOTE_G4 391.995 //ソ4 G4
#define NOTE_G4b 415.305 //ソ#4 G#4
#define NOTE_A4 440.000 //ラ4 A4
#define NOTE_A4b 466.164 //ラ#4 A#4
#define NOTE_B4 493.883 //シ4 B4
#define NOTE_C5 523.251 //ド5 C5
#define NOTE_C5b 554.365 //ド#5 C#5
#define NOTE_D5 587.330 //レ5 D5
#define NOTE_D5b 622.254 //レ#5 D#5
#define NOTE_E5 659.255 //ミ5 E5
#define NOTE_F5 698.456 //ファ5 F5
#define NOTE_F5b 739.989 //ファ#5 F#5
#define NOTE_G5 783.991 //ソ5 G5
#define NOTE_G5b 830.609 //ソ#5 G#5
#define NOTE_A5 880.000 //ラ5 A5
#define NOTE_A5b 932.328 //ラ#5 A#5
#define NOTE_B5 987.767 //シ5 B5
#define NOTE_C6 1046.502 //ド6 C6
//音符の長さをミリ秒で定義しています
#define R_4 2800
#define R_3 2100
#define R_2 1400
#define R_1 700
#define R_1_2 350
#define R_1_3 233.3
#define R_1_4 175
#define R_1_6 116.6
#define R_1_8 87.5
#define R_1_12 58.3
#define R_1_16 43.75
//エルガー「愛の挨拶」のメロディ
float salut[][2] =
{
{NOTE_G5b, R_1}, {NOTE_B4, R_1_2}, {NOTE_G5b, R_1_2},
{NOTE_F5b, R_1_2}, {NOTE_E5, R_1_2}, {NOTE_D5b, R_1_2}, {NOTE_E5, R_1_2},
{NOTE_A5, R_1}, {NOTE_A5, R_1}, {NOTE_A5, R_1}, {NOTE_B4, R_1_2}
};
void setup() {
M5.begin();
}
void loop() {
//ボタンA(左のボタン)が押されたとき
if (M5.BtnA.wasPressed()) {
//スピーカーからブザー音を鳴らします
M5.Beep.beep();
}
//ボタンB(中央のボタン)が押されたとき
if (M5.BtnB.wasPressed()) {
//配列salutを順番に読み込みます
for (int i = 0; i < sizeof(salut) / sizeof(salut[0]); i++) {
//[i][0]番目の要素の周波数をスピーカーから鳴らします。
M5.Beep.tone(salut[i][0]);
//[i][1]番目の要素の時間待ちます(音符の長さ)
delay(salut[i][1]);
}
M5.Beep.end();
}
// M5Stackのボタン操作やスピーカーの状態を更新します
M5.update();
}