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

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

המאקרו constrain(amt, low, high) מיועד להחלה (בדיעבד) של גבולות לא-סטנדרטיים על ערכי מספרים. כאשר ערך “נופל” מחוץ לגבולות שהוגדרו, המאקרו הזה מחזיר את ערך הגבול הקרוב ביותר.

בדרך כלל, החלת גבולות שכזו שימושית כאשר טווח הערכים המעניין של משתנה כלשהו קטן יותר מטווח הערכים האפשרי. את אותה הפונקציונליות קל להשיג בעזרת if או שניים, כך שהיתרון של constrain הוא בעיקר בקריאוּת שלו.

פרמטרים

amt הוא הערך הגולמי.

low הוא ערך שמייצג את הגבול התחתון של הטווח הרצוי

high הוא ערך שמייצג את הגבול העליון של הטווח הרצוי

מכיוון שמדובר במאקרו ולא בפונקציה רגילה, אין לפרמטרים אלה טיפוס – הם יכולים להיות כל סוג מספר.

ערך חוזר

הערך של amt אם הוא בין הערכים low ל-high (כולל), הערך של low אם amt נמוך ממנו, או הערך של high אם amt גבוה ממנו.

דוגמאות

int a = analogRead(A4);
int ac = constrain(a, 100, 900);

הערות

  • מכיוון שמדובר במאקרו ולא בפונקציה, אין לשלוח ביטוי מורכב – כגון קריאה לפונקציה אחרת או פעולה על משתנה – כפרמטר. זו אינה שגיאה תחבירית, כך שהקומפיילר לא יתריע על בעיה, אך תופעות הלוואי עלולות להיות חמורות מאד. לדוגמה, לאחר הרצת הקוד הבא, הערך ב-y יהיה 101(!)
byte x = 99;
byte y = constrain(x++, 90, 100);
  • לידע כללי, הנה הגדרת המאקרו (מהקובץ Arduino.h בספריות הליבה של ארדואינו):
define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt)))

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

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