กลับไปหน้ารวมไฟล์
arduino-talk-use-of-tone-function.md

Arduino Talk 1: การใช้ฟังก์ชัน Tone

ฟิสิกส์ของ Square Wave: การใช้ฟังก์ชัน Tone

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

button_led_basic_interaction_1772681969235.png

การทำงานของ Hardware (Timer2)

คุณไม่สามารถพูดว่า: make_music_now() ได้ คุณต้องกำหนดทางคณิตศาสตร์ให้ชัดเจนว่า pin ทางกายภาพสั่นสะเทือนเร็วแค่ไหนโดยใช้ Hertz (Hz)

  1. การได้ยินของมนุษย์โดยทั่วไปจะครอบคลุมตั้งแต่ 20Hz ไปจนถึง 20,000Hz
  2. ฟังก์ชัน tone(pin, frequency) จะบังคับให้ clock 16MHz ของ Arduino เข้าควบคุม Hardware Timer 2 อย่างสมบูรณ์
  3. ปัจจัยทางฟิสิกส์: หากคุณเขียน tone(8, 440);, โปรเซสเซอร์จะสลับ Digital Pin 8 ระหว่าง 5V (HIGH) และ 0V (LOW) อย่างรวดเร็วถึง 440 ครั้งต่อวินาที!
  4. ผลึกของ 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 เพื่อต่อวงจรอย่างปลอดภัย

ข้อมูล Frontmatter ดั้งเดิม

title: "Arduino Talk 1: Use Of The Tone Function"
description: "Acoustic fundamentals! Master the absolute basic requirement of hardware square-wave processing, isolating exactly how the ATmega utilizes internal `Timer2` architecture to output raw frequency mathematics."
category: "Audio & Sound"
difficulty: "Easy"