#include <M5Unified.h>
int f[28] = { 262, 294, 330, 349, 392, 440, 494 }; // 配列のサイズは4オクターブ分確保する
void setup() {
auto cfg = M5.config();
cfg.serial_baudrate = 115200;
M5.begin(cfg);
M5.Display.setRotation(3);
for (int i = 0; i < 7; i++) {
f[i + 7] = f[i] * 2;
f[i + 14] = f[i] * 4;
f[i + 21] = f[i] * 8;
}
M5.Display.setFont(&fonts::lgfxJapanGothic_16);
M5.Display.println("サウンドテスト (tone関数)");
M5.Display.setTextScroll(true);
tone(GPIO_NUM_2, f[0], 200);
tone(GPIO_NUM_2, f[2], 200);
tone(GPIO_NUM_2, f[4], 200);
tone(GPIO_NUM_2, f[7], 400);
M5.Display.setBrightness(255);
}
void loop() {
while (Serial.available()) {
char c = Serial.read();
if (c < 'c' || 'z' < c) continue; // c〜zの文字以外なら、以降のwhile内処理をスキップ
tone(GPIO_NUM_2, f[c - 'c'], 500); // 0.5秒鳴らす
M5.Display.setBrightness(255);
Serial.printf(" chr=%c %d Hz\n", c, f[c - 'c']);
M5.Display.printf(" chr=%c %d Hz\n", c, f[c - 'c']);
}
M5.delay(50);
}