Newer
Older
M5StickCPlus_FactoryTest2022 / SampleSrc / sound01.ino
#include <M5StickCPlus.h>

int f[28] = { 262, 294, 330, 349, 392, 440, 494 }; // 配列のサイズは4オクターブ分
void setup() {
  M5.begin(115200);
  M5.Lcd.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;
  }
  // setBeep( Hz, ms) でビープ音を設定して、beep()で鳴らす。
  M5.Beep.setBeep(523, 500);  M5.Beep.beep();  delay(500);
  // tone( Hz, ms ) で鳴らす方法
  M5.Beep.tone(1046, 500);  delay(500);
  // msを省略し、tone( Hz ) で鳴らす(結局、delayが必要になるので)
  M5.Beep.tone(2092);  delay(500);
  // ここはmsを指定するとよい (loopのM5.Beep.updateが停めてくれるので、delayを省略できる)
  M5.Beep.tone(2092 * 2, 1000);
  Serial.println("Input [c] -- [z] character.");
}

void loop() {
  M5.Beep.update(); //tone()やsetBeep()で指定した時間を過ぎていたら音を止める。
  //                  M5.Beep.mute() とすると、すぐに停止する。
  
  while (Serial.available()) {
    char c = Serial.read();
    if (c < 'c' || 'z' < c) continue; // c〜zの文字以外なら、以降のwhile内処理をスキップ
    M5.Beep.tone( f[c - 'c'] , 1000); // 1秒鳴らす
    Serial.printf( "%d Hz\n", f[c - 'c'] );
  }
  delay(50);
}