()analogWrite در آردوینو

()analogWrite در آردوینو

()analogWrite در آردوینو یک مقدار آنالوگ (PWM wave) را روی پین می‌نویسد. از ()analogWrite می‌توان برای تنظیم روشنایی یک ال‌ای‌دی با شدت نور متنوع یا راندن یک موتور با سرعت‌های مختلف استفاده کرد. پس از فراخوانی ()analogWrite، تا فراخوانی بعد همین دستور (یا فراخوانی ()digitalRead یا ()digitalWrite روی همان پین) پین یک موج مربعی ثابت را طبق چرخه‌ی وظیفه‌ی (دوره‌ی کاری – duty cycle) مشخص‌شده، تولید خواهد کرد. در بیشتر پین‌ها، فرکانس سیگنال PWM، تقریباً 490 هرتز است. در آردوینو Uno و بردهای مشابه، پین‌های 5 و 6 حدوداً فرکانس 980 هرتز دارند. پین‌های 3 و 11 Leonardo هم فرکانس 980 هرتز دارند.

 

در بیشتر بردهای آردوینو (آن‌هایی که مبتنی بر  ATmega168 و ATmega328 هستند)، این تابع (فانکشن) روی پین‌های 10،9،6،5،3 و 11 و در آردوینو Mega، تابع روی پین‌های 13-2 و 46-44 کار می‌کند. بردهای قدیمی‌تر آردوینو دارای ATmega8، فقط روی پین‌های 10،9 و 11 از ()analogWrite پشتیبانی می‌کند.

آردوینو Duo از ()analogWrite روی پین 2 ار طریق پین 13 و پین‌های DAC0 و DAC1 پشتیبانی می‌کند. بر‌خلاف پین‌های PWM، پین  DAC0 و DAC1 مبدل دیجیتال به آنالوگ هستند و همانند خروجی‌های آنالوگ واقعی عمل می‌کنند.

قبل از فراخوانی ()analogWrite نیازی به فراخوانی ()pinMode و تنظیم پین‌ها به‌عنوان خروجی نیست.

تابع analogWrite هیچ ارتباطی با پین‌های آنالوگ و  تابع analogRead ندارد.

سینتکس (نحو)

(analogWrite(pin, value

پارامتر

pin: پین برای نوشتن.

value: چرخه‌ی وظیفه: بین ۲۵۵ (همیشه on) و ۰ (همیشه off)

خروجی

ندارد (هیچ)

نکته

خروجی‌های PWM تولید‌شده روی پین‌های 5 و 6، چرخه‌ی وظیفه‌ی بالاتری نسبت به آنچه انتظار می‌رود را خواهد داشت. این اتفاق به دلیل اثر متقابل با توابع ()millis و ()delay است که تایمر درونیِ یکسانی را برای تولید آن خروجی‌های PWM به‌صورت مشترک استفاده می‌کنند و بیشتر در تنظیمات پایین چرخه‌ی وظیفه (به‌عنوان‌مثال 10 – 0) دیده خواهد شد و ممکن است به مقداری از 0 که به‌صورت کامل خروجی روی پین 5 و 6 را خاموش نکند، بیانجامد.

مثال:

خروجی را به LED تنظیم می کند که متناسب با مقدار خوانده‌شده از پتانسیومتر است:

 

int ledPin = 9;
// ال‌ای‌دی متصل به پین دیجیتال شماره‌ی نه

int analogPin = 3;
// پتانسیومتر متصل به پین آنالوگ شماره‌ی سه

int val = 0;
// متغیری برای ذخیره‌ی مقدار خوانده شده

void setup()

{

pinMode(ledPin, OUTPUT);
// پین را به‌عنوان خروجی تنظیم (ست) می‌کند.

}

void loop()

{

val = analogRead(analogPin);
// پین ورودی را می‌خواند.

analogWrite(ledPin, val / 4);
// analogRead در
//مقدارها از صفر تا هزار و بیست و سه می‌روند
//0-1023
//analogWrite در
//مقدارها از 0 تا 255 می‌روند
//0-255

}

 

()analogRead در آردوینو

()analogWriteResolution

Tutorial: PWM

 

منبع

درباره نویسنده

نویسنده و طراح الکترونیکا هستم . سوالی داشتید در کامنت ها یا پیج های اینستاگرام و تلگرام سایت بپرسید .