Arduino Talk 1: การใช้ฟังก์ชัน Tone
ฟิสิกส์ของ Square Wave: การใช้ฟังก์ชัน Tone
รากฐานของซินธิไซเซอร์ที่ซับซ้อน, สัญญาณกันขโมยในรถยนต์ และตู้เกมอาร์เคดทุกเครื่องคือ Square Wave ที่เรียบง่าย บทเรียน การใช้ฟังก์ชัน Tone จะวิเคราะห์ตรรกะ C++ หลักของไวยากรณ์ tone() อย่างละเอียด พิสูจน์ให้เห็นว่าการสร้างเสียงบน Arduino แตกต่างอย่างมากจากการทำให้ LED กะพริบผ่าน PWM arrays ได้อย่างไร

การทำงานของ Hardware (Timer2)
คุณไม่สามารถพูดว่า: make_music_now() ได้ คุณต้องกำหนดทางคณิตศาสตร์ให้ชัดเจนว่า pin ทางกายภาพสั่นสะเทือนเร็วแค่ไหนโดยใช้ Hertz (Hz)
- การได้ยินของมนุษย์โดยทั่วไปจะครอบคลุมตั้งแต่
20Hzไปจนถึง20,000Hz - ฟังก์ชัน
tone(pin, frequency)จะบังคับให้ clock 16MHz ของ Arduino เข้าควบคุม Hardware Timer 2 อย่างสมบูรณ์ - ปัจจัยทางฟิสิกส์: หากคุณเขียน
tone(8, 440);, โปรเซสเซอร์จะสลับ Digital Pin 8 ระหว่าง5V(HIGH) และ0V(LOW) อย่างรวดเร็วถึง 440 ครั้งต่อวินาที! - ผลึกของ Piezo Buzzer จะโค้งงอ 440 ครั้งต่อวินาที ทำให้โมเลกุลอากาศเคลื่อนที่และเลียนแบบโน้ตดนตรี 'A4' บนเปียโนได้อย่างแม่นยำ!
การบล็อกของ delay() และ Protocol ของ noTone()
ข้อผิดพลาดในการทำงานที่พบบ่อยที่สุดในตรรกะเสียงของ Arduino คือการลืมว่าฟังก์ชัน tone() ทำงานทั้งหมด "In The Background" (Asynchronously)
- หากคุณเขียน:
tone(8, 440);
tone(8, 523); // โน้ต C!
- piezo จะไม่เล่นโน้ต 440 เลย โค้ดทำงานเร็วมากจนเขียนทับคำสั่งแรกใน register ทันที!
- วิธีแก้ปัญหา:
tone(8, 440);
delay(1000); // บังคับให้ Uno เล่นโน้ตเป็นเวลา 1 วินาที!
tone(8, 523);
delay(1000);
- นอกจากนี้,
tone()ไม่มีวันหยุด จนกว่าคุณจะสั่งให้หยุดด้วยตัวเอง! หากคุณไม่ใช้noTone(8);, piezoelectric buzzer จะส่งเสียงแหลม 523Hz ออกไปอย่างไม่ปรานีสู่ความไม่มีที่สิ้นสุด ทำให้พื้นที่ทำงานเสียไปโดยสิ้นเชิงจนกว่าคุณจะถอดสายไฟ!
รายการตรวจสอบพื้นฐานทางเสียงหลัก
- Arduino Uno/Nano (ความเร็วในการประมวลผลมาตรฐาน)
- Passive Piezoelectric Buzzer (กระบอกสีดำขนาดเล็กที่มี 2 pins)
- (หมายเหตุ: ตรวจสอบให้แน่ใจว่าคุณใช้ PASSIVE buzzer ชุดเริ่มต้นส่วนใหญ่มาพร้อมกับ "Active" buzzer! หากคุณเชื่อมต่อ Active buzzer เข้ากับแบตเตอรี่ มันจะเริ่มส่งเสียงเองทันที มันจะเพิกเฉยต่อคำสั่ง
tone()โดยสิ้นเชิง และเล่นโน้ตเดียวที่แย่มากตลอดไป!) - Jumper Wire และ 100 Ohm Resistor เพื่อต่อวงจรอย่างปลอดภัย