Menu
CoddyTech

ירידה, עלייה ושינוי

חלק מהיחידה תזמון ללא Delay במסלול ה-Arduino של Coddy. שיעור 13 מתוך 18.

ל-Uno יש שני פינים שיכולים להפעיל פסיקה: פין 2 ופין 3. לחצן שזקוק לפסיקה צריך להיות מחובר לאחד מהם. בתוך השבב הם פסיקה 0 ופסיקה 1, לכן כדאי לתת ל-digitalPinToInterrupt() להפוך את הפין למספר שלו. attachInterrupt(3, ...) מבקש פסיקה 3, שאין ל-Uno, ולכן לא קורה דבר.

החלק האחרון של attachInterrupt() מציין לאיזה שינוי להגיב:

  • FALLING: הפין עובר מ-HIGH ל-LOW (עם נגד pull-up, לחיצה)
  • RISING: הפין עובר מ-LOW ל-HIGH (שחרור)
  • CHANGE: כל אחד מהם

עם CHANGE, ה-ISR מופעל בעת הלחיצה ובעת השחרור. הוא קורא את הפין כדי לגלות מה קרה:

void onChange() {
  if (digitalRead(buttonPin) == LOW) {
    // הוא ירד
  } else {
    // הוא עלה
  }
}

attachInterrupt(digitalPinToInterrupt(buttonPin), onChange, CHANGE);
challenge icon

אתגר

קל

הלחצן מחובר לפין 3, ו־loop() עסוקה בעבודה איטית. גרום ל־LED בפין 13 להגיב ללחצן מיד:

  • ב־onChange(), קרא את מצב הלחצן: LOW מדליק את ה־LED, ו־HIGH מכבה אותו
  • חבר את onChange() לפין הלחצן באמצעות CHANGE

לחץ על Run, החזק את הלחצן ושחרר אותו, ואז לחץ על Check.

נסו בעצמכם

const int ledPin = 13;
const int buttonPin = 3;

// פועל בכל פעם שמצב הפין של הכפתור משתנה.
void onChange() {
  // הדלק את ה-LED כשהכפתור לחוץ, וכבה אותו כשהכפתור משוחרר
}

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
  // חבר את onChange() לפין של הכפתור כאן
}

void loop() {
  // הפעולה האיטית: השאר אותה כפי שהיא
  Serial.println("working");
  delay(2000);
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תזמון ללא Delay

תרגלו בעצמכם: Arduino אונליין