🎹 پیانوی الکترونیکی با آردوینو و چند دکمه
این پروژه بلافاصله نتیجه میدهد و بچهها عاشقش میشوند: چند دکمه، یک بازر، و یک ساز واقعی.
صدا از کجا میآید؟
دستور tone(pin, frequency) یک موج مربعی با فرکانس دلخواه میسازد. هر فرکانس یک نت است:
- دو (C) = ۲۶۲ · ر (D) = ۲۹۴ · می (E) = ۳۳۰
- فا (F) = ۳۴۹ · سل (G) = ۳۹۲ · لا (A) = ۴۴۰ · سی (B) = ۴۹۴
برای یک اکتاو بالاتر، فرکانس را دو برابر کن.
کد با آرایه
بهجای نوشتن هفت شرط if، از دو آرایه و یک حلقه استفاده میکنیم:
const int buzzer = 8;
const int keys[] = {2, 3, 4, 5, 6, 7, 10}; // دکمهها
const int notes[] = {262, 294, 330, 349, 392, 440, 494};
const int count = 7;
void setup() {
for (int i = 0; i < count; i++) {
pinMode(keys[i], INPUT_PULLUP);
}
pinMode(buzzer, OUTPUT);
}
void loop() {
bool playing = false;
for (int i = 0; i < count; i++) {
if (digitalRead(keys[i]) == LOW) {
tone(buzzer, notes[i]);
playing = true;
break; // اولین دکمهی فشرده کافی است
}
}
if (!playing) noTone(buzzer);
}
چرا آرایه بهتر است؟
اگر بخواهی نت هشتم را اضافه کنی، فقط دو عدد به آرایهها اضافه میکنی و count را عوض میکنی — نه اینکه یک شرط جدید بنویسی. همین عادت است که کد را قابل نگهداری میکند.
بازر فعال یا غیرفعال؟
برای این پروژه حتماً بازر غیرفعال (passive) بگیر. بازر فعال فقط یک صدای ثابت دارد و نمیتواند نت بزند.
قدم بعدی: پخش آهنگ
یک آرایه از نتها و یک آرایه از مدتها بساز و در حلقه پخششان کن — «تولدت مبارک» با ۲۵ نت قابل نواختن است.
پیانو را بساز و بنواز 🎹