map – הסבר ופרטים

- עמוד זה הוא חלק מהמדריך לפונקציות ארדואינו -

הפונקציה map(x, in_min, in_max, out_min, out_max) ממירה ערך מסקאלה (סולם ערכים) מסוימת לסקאלה אחרת. אפשר לחשוב על המרה כזו כעל הזזה ו/או כיווץ/מתיחה של ציר המספרים.

התרחיש הנפוץ לשימוש ב-map הוא כאשר מתקבל ממקור מסוים ערך בטווח ידוע, וצריך להעביר את הערך הזה – ליתר דיוק, את מה שהוא מייצג – ליעד שמצפה לערכים בטווח שונה. קיראו בתשומת לב את ההערות בהמשך.

פרמטרים

x הוא הערך הספציפי שרוצים להמיר מסקאלה אחת לאחרת. מטיפוס long.

in_min הוא ערך נמוך בסקאלה שבה x מוגדר – יכול אך לא חייב להיות המינימום המוחלט. מטיפוס long.

in_max הוא ערך גבוה בסקאלה שבה x מוגדר – יכול אך לא חייב להיות המקסימום המוחלט. מטיפוס long.

out_min הוא הערך המקביל ל-in_min, בסקאלה החדשה שאליה מתבצעת ההמרה. מטיפוס long.

out_max הוא הערך המקביל ל-in_max, בסקאלה החדשה שאליה מתבצעת ההמרה. מטיפוס long.

ערך חוזר

הערך של הפרמטר x אחרי המרה לסקאלה החדשה. מטיפוס long.

דוגמאות

int a = analogRead(A2);
long a0To100 = map(a, 0, 1024, 0, 101);

הערות

  • ניתן לעבוד גם עם ערכים שליליים בסקאלות השונות.
  • הפונקציה map אינה תוחמת את הערכים. אם ערך הפרמטר x יהיה מחוץ לטווח in_min עד in_max, הערך החוזר יהיה מחוץ לטווח out_min עד out_max, באותו יחס.
  • בגלל נוסחת החישוב ב-map, כאשר טווח הפלט קטן מטווח הקלט, ערך out_max יתקבל אך ורק עבור הערך in_max, וזאת לעומת out_min שיכול להתקבל עבור מספר רב של ערכים קרובים ל-in_min. כלומר, התפלגות ערכי הפלט אינה אחידה. דרך פשוטה ו“מלוכלכת” לתקן את הבעיה היא להוסיף 1 ידנית הן לפרמטר in_max והן לפרמטר out_max שנשלחים לפונקציה. לפירוט נוסף, ראו כאן.

קישורים רלוונטיים

בלוג אישי בנושאי מייקינג, תכנות, מיקרו-בקרים ואלקטרוניקה