()analogWrite
כותבת ערך אנלוגי לקו שציינתם (ראו מדריך PWM - TODO). אפשר להשתמש בזה להדלקת נורת לד בעוצמות שונות או לשלוט על מהירות סיבוב של המנוע. אחרי קריאה לפונקציה ()analogWrite
הקו ייצר גל ריבועי יציב עם מחזוריות שצוינה (duty cicle). הגל יימשך עד לקריאה הבאה ל-()analogWrite
(או קריאה לפונקצות ()digitalRead
או ()digitalWrite
עבור אותו הקו). תדר של גל ה-PWM על רוב הקווים הוא כ-490Hz. על Arduino Uno וכרטיסים דומים הקווים 5 ו-6 יכולים לספק תדר של כ-980Hz. גם הקווים 3 ו-11 בכרטיס Arduino Leonardo יכולים לספק תדר של כ-980Hz.על רוב כרטיסי ה-Arduino (המבוססים על מיקרובקר ATmega168 או ATmega328) הפונקציה פועלת על הקווים 3, 5, 6, 9, 10, ו-11. על Arduino Mega הפונקציה פועלת על הקווים 2-13 ו-44-46. על כרטיסים ישנים הפועלים על מיקרובקר ATmega8 פונקציית
()analogWrite
פועלת רק על הקווים 9, 10 ו-11.בכרטיסי Arduino Due פונקציה
()analogWrite
נתמכת על הקווים 2 עד 13, בנוסף לזה גם על הקווים DAC0 ו-DAC1. בשונה לקווי PWM, קווי ה-DAC כוללים ממיר מדיגיטלי לאנלוגי, כך שהיציאה שלהם היא מתח אנלוגי אמיתי.אתם לא צריכים לקרוא ל-
()pinMode
כדי להגדיר את הקו כיציאה לפני שקוראים לפונקציית ()analogWrite
.תחביר
- קוד: בחר הכל
analogWrite(pin, value);
פרמטרים:
pin - מספר של הקו אליו תרצו לכתוב את הערך
value - ערך המציין יחס המחזור של גל ה-PWM, ערך 0 מציין שהקו יוציא "0" לוגי קבוע, ערך 255 מציין שהקו יוציא "1" לוגי קבוע
פונקציה זו לא מחזירה ערכים.
הערות ובעיות ידועות:
מחזוריות (duty cicle) של גל ה-PWM המיוצר על הקווים 5 ו-6 יכול להיות גבוה יוצת מהצפוי בגלל עבודה עם פונקציות
()millis
ו-()delay
שמשתמשות באותו השעון הפנימי שאחראי לייצור של גל ה-PWM על קווים אלה. תופעה זו מורגשת יותר עם ערכי מחזור נמוכים (0-10) ויכולים לגרום לכך שערך 0 לא יכבה לגמרי את היציאה של הקו.דוגמה
הקוד הבא יכוון את עוצמת הלד בקו 9 בהתאם לקריאה מנגד משתנה המחובר לכניסה אנלוגית 3.- קוד: בחר הכל
int ledPin = 9; // LED connected to digital pin 9
int analogPin = 3; // potentiometer connected to analog pin 3
int val = 0; // variable to store the read value
void setup()
{
pinMode(ledPin, OUTPUT); // sets the pin as output
}
void loop()
{
val = analogRead(analogPin); // read the input pin
analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255
}
ראו גם:
()analogRead()analogWriteResolution
מדריך: PWM - TODO
פירוט שפת תכנות לסביבת Arduino
עמוד זה הוא תרגום של ()analogWrite לפי רישיון Creative Commons Attribution-ShareAlike 3.0.