تابع ()tone آردوینو

تابع ()tone آردوینو جزو توابع ورودی خروجی پیشرفته آردوینو می باشد و به کمک این تابع می توان یک موج مربعی با فرکانس مشخص (و چرخه وظیفه ۵۰٪) روی یک پین تولید کرد. می‌توان مدت زمان را مشخص کرد، در غیر این صورت موج تا زمان فراخوانی تابع ()noTone ادامه می‌یابد. این پین را می‌توان به یک پیزوالکترونیک یا بلندگوی دیگر برای پخش صدا متصل کرد.

نکته 1: فقط یک صدا می‌تواند در یک زمان تولید شود. اگر صدایی از قبل روی پین دیگری در حال پخش باشد، فراخوانی برای ()tone هیچ تاثیری نخواهد داشت. اگر صدای بوق روی همان پین پخش شود، فراخوانی مجدد تابع  ()tone روی همان پین فقط باعث می شود که فرکانس از نو تنظیم شود.

نکته 2: استفاده از تابع ()tone روی پین‌های ۳ و ۱۱ با خروجی PWM تداخل ایجاد می کند (روی بردهایی غیر از مگا).

نکته 3: تولید تُن‌های کمتر از ۳۱ هرتز امکان‌پذیر نیست.

 

استفاده از تابع ()tone آردوینو - نحو و سینتکس

تابع ()tone را می توان به شکل های زیر برای تولید یک صدا روی یک پین خاص به طور نامحدود یا در یک زمان معین در برنامه نویسی آردوینو استفاده کرد:

tone(pin, frequency)

یا

tone(pin, frequency, duration)

 پارامترهایی که در عبارت های بالا استفاده شده اند بصورت زیر هستند:

pin: پین آردوینو که روی آن صدا تولید می‌شود.

frequency: فرکانس صدا بر حسب هرتز. انواع داده مجاز:unsigned int.

duration: مدت زمان پخش صدا بر حسب میلی‌ثانیه (اختیاری). انواع داده‌های مجاز:unsigned long.

 

مقدار برگشتی از تابع ()tone آردوینو

 این تابع هیچ چیزی را برنمی‌گرداند.

 

مثال از تابع ()tone آردوینو

مثال زیر یک موج مربعی را روی پین D0 به مدت یک ثانیه و به طور مکرر تولید می کند.

#define BUZZER_PIN D0 // Example pin

void setup() {
  pinMode(BUZZER_PIN, OUTPUT);
}

void loop() {
  tone(BUZZER_PIN, 1000, 1000); // 1 kHz tone
  delay(1000);
}

 نکته 4: اگر می خواهید بر روی چندین پین مختلف صدا تولید کنید، اول باید تابع ()noTone را بر روی پین اولی فراخوانی کنید، سپس تابع ()tone را بر روی پین دومی فراخوانی کنید.

نکته 5: این تابع غیر مسدودکننده است، به این معنی که حتی اگر شما پارامتر duration را نیز استفاده کرده باشید، اجرای برنامه بلافاصله ادامه خواهد یافت، حتی اگر پخش صدا تمام نشده باشد.