#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);
}