อาร์เรย์ที่ออกแบบท่าเต้น: Happy Birthday แสงสีและเสียง
การเล่นเพลงด้วย Buzzer เป็นเพียงการวนซ้ำใน Array อย่างง่าย โปรเจกต์ Happy Birthday แสงสีและเสียง เพิ่มความซับซ้อนขึ้นอย่างมากโดยกำหนดให้โปรแกรมเมอร์ต้องซิงโครไนซ์โดเมนเอาต์พุตหลายตัวพร้อมกัน คุณต้องแน่ใจว่าการประมวลผล C++ ระดับไมโครวินาทีของการส่งโน้ตเพลง 1000 มิลลิวินาทีนั้นสอดคล้องกับการที่ LED ค่อยๆ สว่างขึ้น และถึงจุดสูงสุดตรงจังหวะพอดี!

การประมวลผล Struct แบบหลาย Array
คุณไม่สามารถใช้ Array แยกกันสามชุด (melody[], durations[], ledPattern[]) และหวังว่ามันจะทำงานพร้อมกันอย่างสมบูรณ์แบบได้ เพราะจังหวะจะเกิดข้อผิดพลาดเสมอ
- คุณต้องสร้าง C++ Struct แบบรวมศูนย์
struct Beat {
int freq; // e.g. 262 (C4 note)
int dur; // e.g. 250 (Quarter note)
byte ledStatus1; // e.g. HIGH or LOW
byte ledStatus2; // e.g. HIGH or LOW
};
Beat song[25] = { ... }; // Massive song database!
- ฟังก์ชัน
loop()จะวนซ้ำผ่านsong[i]เท่านั้น - ในบล็อกการประมวลผลขนาดใหญ่เดียว, Arduino จะสั่ง
tone(buzzerPin, song[i].freq)และสั่งงาน LED ทันทีด้วยdigitalWrite(LED1, song[i].ledStatus1)จากนั้นจึงหน่วงเวลาด้วยdelay(song[i].dur * 1.3)ตามหลักคณิตศาสตร์
การกำจัด delay() เพื่อการเฟดแบบ Synthesizer ที่แท้จริง
หากคุณต้องการให้ LED ค่อยๆ "Fade" (analogWrite()) เข้ากับจังหวะอย่างสมบูรณ์แบบแทนที่จะเปิดติดทันที, delay() จะทำให้โค้ดล้มเหลวโดยสิ้นเชิง
- คุณต้องใช้การติดตาม
millis()แบบดิบ - ในขณะที่ Buzzer ส่งเสียงโน้ตเพลง 400ms, ลูป
whileที่ว่างเปล่าจะทำงานอย่างรวดเร็วเพื่อสร้างเส้นโค้งการหรี่ไฟแบบ analog PWM ทำให้ NeoPixel สว่างขึ้นอย่างแม่นยำก่อนที่โน้ตจะหยุดลง! - สิ่งนี้รับประกันการนำเสนอ Hardware ด้านภาพและเสียงที่ซิงโครไนซ์อย่างไม่มีที่ติราวกับภาพยนตร์!
Hardware สำหรับการซิงโครไนซ์แบบ Chiptune
- Arduino Uno/Nano (การประมวลผลบน Form factor มาตรฐาน)
- Standard Piezoelectric Passive Buzzer (สำหรับสร้างความถี่)
- Array ของ Red, Green, และ Blue 5mm LED หรือ WS2812B แบบ Addressable โดยเฉพาะ
- (หมายเหตุ: ตรวจสอบให้แน่ใจว่า LED และ Buzzer อยู่บน Hardware Timer ที่แยกจากกันโดยสิ้นเชิง! หาก Buzzer อยู่ที่ Pin 9 (Timer 1) และคุณใช้
analogWrite()บน Pin 10 (Timer 1) ความถี่ของ PWM จะไปทำลายความถี่ของ Tone โดยหลักคณิตศาสตร์!)