คุณรู้หรือไม่ว่าคุณสามารถเล่นเพลงใดก็ได้ด้วยอาร์ดูโน่และบัซเซอร์แบบพาสซีฟ?
ตัวอย่างเช่น ผมได้เล่นเพลง 'Hey Jude' ของ The Beatles
สองสิ่งที่คุณต้องจำไว้เมื่อให้อินพุตเพื่อเล่นเพลงคือโน้ตและระยะเวลา (duration) ของแต่ละโน้ต ในโค้ดด้านล่างทุกอย่างถูกอธิบายไว้แล้ว แต่หากยังมีข้อสงสัยใดๆ ผมยินดีช่วยเหลือ คุณสามารถส่งข้อความมาถามได้
นักประพันธ์ดิจิทัล: เล่นเพลงด้วยบัซเซอร์แบบพาสซีฟ
ต่อยอดจากโปรเจกต์ "Happy Birthday" เฟรมเวิร์ก Play Any Song มอบคลังโน้ตขนาดใหญ่ให้คุณ (ไฟล์เฮดเดอร์ที่เต็มไปด้วยนิยามเช่น #define NOTE_C4 262) ทำให้คุณสามารถแปลงโน้ตเพลงจริงเป็นโค้ด C++ ได้

เฟรมเวิร์ก "pitches.h"
ความลับของโปรเจกต์นี้คือการใช้ไฟล์เฮดเดอร์ภายนอกชื่อ pitches.h
- ไฟล์นี้ประกอบด้วยการแมปความถี่ที่แน่นอนสำหรับโน้ตเกือบ 90 โน้ตครอบคลุม 8 อ็อกเทฟ
- แทนที่จะพิมพ์
tone(pin, 440)คุณสามารถเขียนtone(pin, NOTE_A4)ซึ่งทำให้โค้ดของคุณอ่านและดีบั๊กได้ง่ายขึ้นอย่างมาก - คุณจัดการจังหวะ (tempo) โดยการกำหนดตัวแปรระดับโลก (เช่น
int tempo = 120) และใช้การคำนวณเพื่อหาความยาวเป็นมิลลิวินาทีของโน้ตตัวกลม โน้ตตัวขาว และโน้ตเขบ็ดหนึ่งชั้นแบบไดนามิก
รายการอุปกรณ์
- Arduino Uno/Nano: ตัวควบคุมหลัก
- บัซเซอร์แบบพาสซีฟ (Passive Piezo Buzzer): ลำโพง
- โพเทนชิโอมิเตอร์ (ไม่จำเป็น): สามารถต่อเข้ากับขาอินพุตแอนะล็อก 0 เพื่อทำหน้าที่เป็นปุ่มปรับจังหวะแบบเรียลไทม์ เร่งหรือชะลอเพลงขณะที่กำลังเล่นได้!
เหตุใดสิ่งนี้จึงทรงพลัง
ด้วยการแยก "ข้อมูล" (โน้ตและระยะเวลา) ออกจาก "เครื่องยนต์" (ลูป for ที่เล่นโทน) คุณจะได้เรียนรู้แนวคิดที่สำคัญในโครงสร้างซอฟต์แวร์ คุณสามารถเปลี่ยนอาร์เรย์ของเพลงได้อย่างง่ายดายโดยไม่ต้องแตะต้องลอจิกการเล่นเลย