Menu
CoddyTech

Mit micros() messen

Teil des Abschnitts Timing ohne Delay der Arduino-Journey von Coddy. Lektion 16 von 18.

millis() zählt ganze Millisekunden, was für kurze Zeitspannen zu grob ist: Ein Tastendruck von 2.5 ms würde als 2 oder 3 gemessen. micros() ist dieselbe Art Uhr, zählt aber Mikrosekunden, Millionstel einer Sekunde: 1000 davon entsprechen einer Millisekunde.

Auf dem Uno erhöht sich der Wert in Schritten von 4 Mikrosekunden, und auch diese Funktion gibt einen unsigned long zurück. Um etwas zu messen, lies den Wert davor und danach ab und ziehe den ersten vom zweiten ab:

unsigned long start = micros();
int reading = analogRead(A0);
unsigned long took = micros() - start;
Serial.println(took);   // etwa 110: ein analogRead() dauert etwa 0.1 ms

Weil micros() so schnell zählt, gehen ihm die Zahlen viel früher aus als millis(): Nach etwa 70 Minuten beginnt die Zählung wieder bei 0. Verwende sie für kurze Zeitspannen und millis() für alles, was länger als ein paar Minuten dauert.

challenge icon

Aufgabe

Einfach

Miss, wie lange die Taste in Mikrosekunden gedrückt gehalten wird:

  • wenn die Taste gedrückt wird, speichere micros() in pressedAt
  • wenn sie losgelassen wird, gib micros() - pressedAt aus

Klicke auf Run, drücke kurz die Taste und klicke dann auf Check.

Probier es selbst

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) {
    // Die Taste wurde gerade gedrückt: Zeitpunkt merken
  }

  if (!pressed && wasPressed) {
    // Die Taste wurde gerade losgelassen: Ausgeben, wie lange sie gedrückt war, in Mikrosekunden
  }

  wasPressed = pressed;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Timing ohne Delay

Übe selbstständig: Arduino-Playground