Menu
CoddyTech

Butonlu Kronometre

Coddy'nin Arduino Journey'sinin delay() Kullanmadan Zamanlama bölümünün bir parçası. Ders 18 / 18.

Bir kronometrenin çalışan ve durmuş olmak üzere iki durumu vardır; bir basış onu bir durumdan diğerine geçirir. Zamanı güvenli bir şekilde ölçer: başlangıçta millis() değerini saklar, sonunda çıkarma yapar.

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

Düğme, mod düğmesinde olduğu gibi sıçramalara karşı filtrelenir: okuma değiştiğinde işlem yapılır, ardından 20 ms beklenir. Her iki basışta da aynı 20 ms beklendiği için aralarındaki süre doğru kalır.

LED durumu gösterir: kronometre çalışırken yanar.

challenge icon

Görev

Orta

Düğme zaten okunuyor ve titreşim giderme uygulanıyor, ayrıca onPress() her basışta bir kez çalışıyor. onPress() işlevini yaz:

  • kronometre çalışmıyorsa: başlat, millis() değerini startTime içine kaydet ve LED’i yak
  • çalışıyorsa: durdur, LED’i söndür ve süreyi milisaniye cinsinden yazdır

Run’a bas, düğmeye iki kez bas, ardından Check’e bas.

Kendin dene

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);
}

// Her basışta bir kez çağrılır.
void onPress() {
  // çalışmıyorsa: başlat, zamanı kaydet, LED'i yak
  // çalışıyorsa: durdur, LED'i söndür, süreyi ms cinsinden yazdır
}

void loop() {
  bool pressed = digitalRead(buttonPin) == LOW;
  if (pressed != wasPressed) {
    if (pressed) {
      onPress();
    }
    wasPressed = pressed;
    delay(20);   // kontakların kararlı hâle gelmesini bekle
  }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

delay() Kullanmadan Zamanlama bölümündeki tüm dersler

Kendi başına pratik yap: Arduino playground