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

تابع ()analogWrite آردوینو جزو توابع ورودی خروجی آنالوگ آردوینو می باشد و به کمک این تابع ()analogWrite می توانیم یک مقدار آنالوگ ( موج PWM ) را روی یک پین ( هر پین دیجیتالی که PWM را پشتیبانی می کند. ) بنویسیم. ما با استفاده از مقدار آنالوگ ( موج PWM ) می توانیم شدت نور یک LED را زیاد و کم کنیم یا سرعت چرخش موتور را زیاد و کم و کنترل کنیم.

بعد از اینکه بر روی پین موردنظر تابع ()analogWrite را فراخوانی کردیم، بر روی آن پین یک موج مستطیلی ثابت با چرخه کاری مشخص تولید خواهد شد که همان موج PWM  یا همان مقدار آنالوگ می باشد. این موج PWM  یا همان مقدار آنالوگ بر روی آن پین همچنان ادامه خواهد داشت مگر اینکه بر روی آن پین، ما توابع ()analogWrite یا ()digitalRead یا ()digitalWrite را فراخوانی کنیم.

بر اساس بردهای مختلف آردوینو، پین هایی که قابلیت PWM دارند متفاوت است بنابراین پین‌های برد آردوینو خود را بررسی کنید تا بدانید کدام پین‌های PWM رسماً پشتیبانی می‌شوند. اگرچه برخی از بردها پین‌های اضافی با قابلیت PWM دارند، استفاده از آنها فقط برای کاربران حرفه‌ای توصیه می‌شود که می‌توانند در دسترس بودن تایمر و تداخل‌های احتمالی با سایر کاربردهای آن پین‌ها را در نظر بگیرند.

علاوه بر قابلیت‌های PWM، برخی از بردهای آردوینو هنگام استفاده از تابع ()analogWrite می توانند با استفاده از مبدل DAC یعنی مبدل دیجیتال به آنالوگ، خروجی آنالوگ واقعی نیز تولید کنند. پین‌های علامت‌گذاری شده. پین‌های برد خود را بررسی کنید تا ببینید آیا DAC در دسترس است یا خیر.

نکته مهم 1: فقط می‌توان از ۴ پین مختلف به طور همزمان استفاده کرد. فعال کردن PWM روی بیش از ۴ پین، طرح در حال اجرا را متوقف می‌کند و برای آپلود مجدد یک طرح جدید، برد را مجدداً تنظیم می‌کند.

نکته مهم 2: قبل از استفاده از تابع ()analogWrite نیازی نیست که با استفاده از تابع ()pinMode پین موردنظر را بصورت خروجی دربیاوریم.  در واقع تابع ()analogWrite هیچ ارتباطی به پین های آنالوگ یا تابع ()analogRead ندارد.

 

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

تابع ()analogWrite آردوینو در برنامه نویسی آردوینو بصورت زیر استفاده می شود:

analogWrite(pin, value)

 در عبارت بالا به جای pin، شماره پین آردوینو که قابلیت PWM دارد را می نویسیم که یک مقدار از نوع int می باشد و به جای value یک مقدار بین 0 تا 255 را می نویسیم که همان چرخه کاری PWM  است که یک مقدار از نوع int می باشد.

 

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

 تابع ()analogWrite هیچ چیزی را برنمی گرداند.

 

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

در مثال زیر، مقدار آنالوگ از پین A3 خوانده می شود که عددی بین 0 تا 1023 است و متناسب با آن، بر روی پین 9 یک موج PWM که شدت نور LED را کنترل می کند، ایجاد می شود.

int ledPin = 9;      // LED به پین دیجیتال 9 متصل است
int analogPin = A3;   // پتانسیومتر به پین آنالوگ 3 متصل است (A3)
int val = 0;         // متغیر برای ذخیره کردن مقدار خوانده شده
void setup() {
  pinMode(ledPin, OUTPUT);  // پین دیجیتال 9 را بصورت خروجی درمی آورد
}

void loop() {
  val = analogRead(analogPin);  // پین ورودی را می خواند
  analogWrite(ledPin, val / 4); // مقادیر ورودی که بین 0 تا 1023 را می خواند و آنها را 
                               //بصورت خروجی و اعداد بین 0 تا 255 می نویسید
}

 

نکته مهم3: خروجی‌های PWM تولید شده روی پین‌های ۵ و ۶ ممکن است چرخه‌های کاری بالاتر از حد انتظار داشته باشند. این به دلیل تعاملات با ()millis و ()delay توابعی که از تایمر داخلی یکسانی برای تولید خروجی‌های PWM استفاده می‌کنند. این مشکل بیشتر در تنظیمات چرخه کاری پایین (مثلاً 0 تا 10) مشاهده می‌شود و ممکن است منجر به این شود که مقدار 0 خروجی روی پین‌های 5 و 6 را به طور کامل خاموش نکند.