ירידה, עלייה ושינוי
חלק מהיחידה תזמון ללא 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);אתגר
קלהלחצן מחובר לפין 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);
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תזמון ללא Delay
תרגלו בעצמכם: Arduino אונליין