facebook pixel מדריך: פירוט שפת תכנות - קווים אנלוגיים - ()analogWrite ו-PWM - www.4project.co.il
Main logo www.4project.co.il
כל הרכיבים לפרוייקט שלכם
עגלת קניות

העגלה ריקה

פירוט שפת תכנות - קווים אנלוגיים - ()analogWrite ו-PWM


2022-06-14 10:26:13
פונקציית ()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.