Menu
CoddyTech

שעון עצר עם כפתור

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

לשעון עצר יש שני מצבים, פועל ועצור, ולחיצה מעבירה אותו ממצב אחד לאחר. הוא מודד זמן בדרך הבטוחה: שומרים את millis() בתחילת המדידה ומחסרים בסופה.

if (!running) {
  running = true;
  startTime = millis();
} else {
  running = false;
  Serial.println(millis() - startTime);
}

מנטרלים את קפיצות הכפתור כפי שעשינו עבור כפתור המצב: פועלים כשהקריאה משתנה, ואז ממתינים 20 ms. אחרי שתי הלחיצות ממתינים לאותן 20 ms, כך שהזמן ביניהן נשאר מדויק.

ה־LED מציג את המצב: דולק בזמן ששעון העצר פועל.

challenge icon

אתגר

בינוני

הכפתור כבר נקרא ומבוצעת מניעת ריצוד, ו־onPress() פועלת פעם אחת בכל לחיצה. כתבו את onPress():

  • אם שעון העצר אינו פועל: הפעילו אותו, שמרו את millis() בתוך startTime והדליקו את LED
  • אם הוא פועל: עצרו אותו, כבו את LED והדפיסו את הזמן במילישניות

לחצו על Run, לחצו על הכפתור פעמיים, ואז לחצו על Check.

נסו בעצמכם

const int ledPin = 13;
const int buttonPin = 2;

bool wasPressed = false;
bool running = false;
unsigned long startTime = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
}

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

void loop() {
  bool pressed = digitalRead(buttonPin) == LOW;
  if (pressed != wasPressed) {
    if (pressed) {
      onPress();
    }
    wasPressed = pressed;
    delay(20);   // לאפשר למגעים להתייצב
  }
}
quiz iconבחנו את עצמכם

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

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

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