
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のように、「~」で識別します。