micros() ile Ölçüm
Coddy'nin Arduino Journey'sinin delay() Kullanmadan Zamanlama bölümünün bir parçası. Ders 16 / 18.
millis() tam milisaniyeleri sayar; bu, kısa süreler için fazla kaba bir ölçümdür: 2.5 ms süren bir basış 2 ya da 3 olarak okunur. micros() aynı türden bir saattir, ancak saniyenin milyonda biri olan mikrosaniyeleri sayar: her milisaniyede 1000 mikrosaniye vardır.
Uno'da 4 mikrosaniyelik adımlarla artar ve o da bir unsigned long döndürür. Bir şeyi zamanlamak için önce ve sonra değerini okuyup çıkarın:
unsigned long start = micros();
int reading = analogRead(A0);
unsigned long took = micros() - start;
Serial.println(took); // yaklaşık 110: analogRead() yaklaşık 0.1 ms sürerÇok hızlı saydığı için micros(), sayılarını millis()'ten çok daha önce tüketir: yaklaşık 70 dakika sonra 0'dan yeniden başlar. Kısa süreler için bunu, birkaç dakikadan uzun süreler içinse millis()'i kullanın.
Görev
KolayDüğmeye ne kadar süreyle basılı tutulduğunu mikrosaniye cinsinden ölçün:
- düğmeye basıldığında,
micros()değerinipressedAtdeğişkenine kaydedin - düğme bırakıldığında,
micros() - pressedAtdeğerini yazdırın
Run düğmesine basın, düğmeye dokunun, ardından Check düğmesine basın.
Kendin dene
const int buttonPin = 2;
bool wasPressed = false;
unsigned long pressedAt = 0;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
bool pressed = digitalRead(buttonPin) == LOW;
if (pressed && !wasPressed) {
// düğmeye az önce basıldı: zamanı kaydet
}
if (!pressed && wasPressed) {
// düğme az önce bırakıldı: ne kadar süre basılı tutulduğunu mikrosaniye cinsinden yazdır
}
wasPressed = pressed;
}
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