Menu
CoddyTech

Pomiar za pomocą micros()

Część sekcji Odmierzanie czasu bez delay() ścieżki Arduino w Coddy. Lekcja 16 z 18.

millis() zlicza pełne milisekundy, co jest zbyt małą dokładnością przy krótkich zdarzeniach: naciśnięcie trwające 2.5 ms zostałoby odczytane jako 2 lub 3. micros() to ten sam rodzaj zegara, ale zlicza mikrosekundy, czyli milionowe części sekundy: 1000 mikrosekund przypada na każdą milisekundę.

Na Uno wartość rośnie skokowo co 4 mikrosekundy, a funkcja również zwraca wartość typu unsigned long. Aby zmierzyć czas, odczytaj wartość przed i po, a następnie odejmij:

unsigned long start = micros();
int reading = analogRead(A0);
unsigned long took = micros() - start;
Serial.println(took);   // około 110: analogRead() trwa około 0.1 ms

Ponieważ zlicza tak szybko, micros() wyczerpuje liczby znacznie szybciej niż millis(): po około 70 minutach zaczyna od nowa od 0. Używaj go do krótkich pomiarów czasu, a millis() do wszystkiego, co trwa dłużej niż kilka minut.

challenge icon

Wyzwanie

Łatwy

Zmierz, jak długo przycisk jest wciśnięty, w mikrosekundach:

  • gdy przycisk zostanie wciśnięty, zapisz micros() w pressedAt
  • gdy zostanie zwolniony, wypisz micros() - pressedAt

Naciśnij Run, stuknij przycisk, a następnie naciśnij Check.

Spróbuj swoich sił

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) {
    // przycisk został właśnie wciśnięty: zapamiętaj czas
  }

  if (!pressed && wasPressed) {
    // przycisk został właśnie zwolniony: wypisz, jak długo był przytrzymywany, w mikrosekundach
  }

  wasPressed = pressed;
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Odmierzanie czasu bez delay()

Poćwicz samodzielnie: Edytor online Arduino