توضیحات
تابع analogWrite – نوشتن آنالوگ مقدار آنالوگ را روی پین مورد نظر می نویسد. می توان به کمک ان میزان روشنایی یک LED را تنظیم یا سرعت حرکت یک موتور را تنظیم کرد. پس از فراخوان تابع analogWrite – نوشتن آنالوگ، پین یک موج مستطیلی را ایجاد می کند تا زمانی که یکی از توابع analogWrite (یا digitalRead() یا digitalWrite()) در همان پین فراخوان شوند.
Board | PWM Pins | PWM Frequency |
Uno, Nano, Mini | 3, 5, 6, 9, 10, 11 | 490 Hz (pins 5 and 6: 980 Hz) |
Mega | 2 – 13, 44 – 46 | 490 Hz (pins 4 and 13: 980 Hz) |
Leonardo, Micro, Yún | 3, 5, 6, 9, 10, 11, 13 | 490 Hz (pins 3 and 11: 980 Hz) |
Uno WiFi Rev2, Nano Every | 3, 5, 6, 9, 10 | 976 Hz |
MKR boards * | 0 – 8, 10, A3, A4 | 732 Hz |
MKR1000 WiFi * | 0 – 8, 10, 11, A3, A4 | 732 Hz |
Zero * | 3 – 13, A0, A1 | 732 Hz |
Nano 33 IoT * | 2, 3, 5, 6, 9 – 12, A2, A3, A5 | 732 Hz |
Nano 33 BLE/BLE Sense | 1 – 13, A0 – A7 | 500 Hz |
Due ** | 2-13 | 1000 Hz |
101 | 3, 5, 6, 9 | pins 3 and 9: 490 Hz, pins 5 and 6: 980 Hz |
- * علاوه بر قابلیت های ذکر شده در پین ها ، برد های MKR، Nano 33 IoTو Zero هنگام استفاده از تابع analogWrite – نوشتن آنالوگ در پایه DAC0(A0) باید توجه شود که دارای خروجی آنالوگ واقعی هستند.
- ** علاوه بر قابلیت های PWM در پایه های ذکر شده در بالا ، هنگام استفاده از analogWrite () در پایه های DAC0 و DAC1 ، دلیل خروجی آنالوگ واقعی است.
- برای تنظیم پین به عنوان یک خروجی قبل از فراخوانی analogWrite نیازی به تماس با pinMode() نیست.
- عملکرد analogWrite هیچ ارتباطی با پین های آنالوگ یا تابع analogRead ندارد.
نحوه استفاده
analogWrite(pin, value)
- در قسمت pin باید پینی وارد شود که مقدار به ان داده شود.
- در قسمت value باید چرخه کار ذکر شود. بین 0 (همیشه خاموش) و 255 (همیشه روشن).
- هر دو داده pin و value باید از نوع int باشند
خروجی تابع
تابع خروجی ندارد.
مثال
دادن خروجی به LED متناسب با مقدار خوانده شده از پتاسیومتر.
int ledPin = 9; // را به پین 9 متصل می کنیم LED
int analogPin = 3; // پتاسیومتر را به پین 3 انالوگ متصل می کنیم
int val = 0; // متغیر برای ذخیره مقدار خوانده شده تعریف می کنیم
void setup() {
pinMode(ledPin, OUTPUT); // پین را به عنوان خروجی تنظیم می کنیم
}
void loop() {
val = analogRead(analogPin); // پین ورودی را می خوانیم
analogWrite(ledPin, val / 4); //
از 0 تا 255 تبدیل می کنیم analogWrite از 0 تا 1023، analogRead مقادیر
}
نکات مهم
خروجی های PWM تولید شده در پایه های 5 و 6 دارای چرخه های کاری بیش از حد انتظار هستند. این به دلیل فعل و انفعالات با توابع milis() و delay() است که دارای تایمر داخلی یکسانی هستند که برای تولید آن خروجی PWM استفاده می شود. این امر بیشتر در تنظیمات چرخه کار کم مشاهده می شود (به عنوان مثال 0 تا 10) و ممکن است منجر به خاموش نشدن کامل خروجی در پایه های 5 و 6 با مقدار 0 شود.