見出し画像

Petoi Bittle 入門 (10) - ブザー

「Petoi Bittle」の「ブザー」の鳴らし方をまとめました。

前回

1. ブザー

ブザー」には、「アクティブブザー」と「パッシブブザー」があります。「アクティブブザー」は、振動源が内蔵されているため、電源を入れると音が鳴ります。「パッシブブザー」は音源が内蔵されていないため、周波数を持つ方形波を入力する必要があります。これによって、簡単なメロディーを鳴らすこともできます。

2. ブザーの動作確認

(1)「Arduino IDE」で以下のテストコードをアップロード。

・testBuzzer.ino

// 変数
#define BUZZER 5 // アクティブブザーのPWMピン
int loopCounter = 0; // ループカウンタ
byte melody[] = { // メロディ
    8, 13, 10, 13, 8,  0,  5,  8,  3,  5, 8, // トーン
    8, 8,  32, 32, 8, 32, 32, 32, 32, 32, 8}; // 相対的な長さ、8は1/8音の長さ

// ビープ
void beep(int note, float duration = 10, int pause = 0, byte repeat = 1 ) {
  if (note == 0) {
    analogWrite(BUZZER, 0);
    delay(duration);
    return;
  }
  int freq = 220 * pow(1.059463, note - 1);
  float period = 1000000.0 / freq / 2.0;
  for (byte r = 0; r < repeat; r++) {
    for (float t = 0; t < duration * 1000; t += period * 2) {
      analogWrite(BUZZER, 150);
      delayMicroseconds(period);
      analogWrite(BUZZER, 0);
      delayMicroseconds(period);
    }
    delay(pause);
  }
}

// メロディの再生
void playMelody(byte m[], int len) {
  for (int i = 0; i < len; i++)
    beep(m[i], 1000 / m[len + i], 100);
}

// ニャー
void meow(int repeat = 1, int pause = 200, int startF = 150,  int endF = 255, int increment = 5) {
  for (int r = 0; r < repeat; r++) {
    for (int amp = startF; amp <= endF; amp += increment) {
      analogWrite(BUZZER, amp);
      delay(30);
    }
    delay(500);
    analogWrite(BUZZER, 0);
    delay(pause);
  }
}

// 初期化
void setup() {
  Serial.begin(115200);
  pinMode(BUZZER, OUTPUT);
  Serial.println("if (you cannot see this sentence on serial monitor)");
  Serial.println("\tthere's something wrong with your Arduino IDE's configuration.");
}

// ループ
void loop() {
  if (loopCounter == 0) {
    // ビープ
    beep(1, 500, 500);
    beep(13, 500, 500);

    // メロディの再生
    playMelody(melody, sizeof(melody) / 2);
    Serial.println(loopCounter++);
    delay(1000);
  }
  else if (loopCounter < 2) {
    // ニャー
    meow(1, 1000, 100);
    meow(2, 100);
    Serial.println(loopCounter++);
  }
}

beep()は、パッシブブザーで再生すると良いです。
playMelody()は、パッシブブザーでメロディを再生します。
meow()は、PWMピン上のアクティブブザーでのみ再生できます。ArduinoのPWMピンは、~3、~5、~6、~9、~10、~11のように、「~」で識別します。

3. 参考

次回


いいなと思ったら応援しよう!