Menu
CoddyTech

Измерение с помощью micros()

Часть раздела Отсчёт времени без delay путешествия по Arduino на Coddy. Урок 16 из 18.

millis() считает целые миллисекунды, что слишком грубо для коротких событий: нажатие длительностью 2.5 мс будет показано как 2 или 3. micros() — это такие же часы, но они считают микросекунды, миллионные доли секунды: по 1000 микросекунд в каждой миллисекунде.

На Uno значение увеличивается с шагом в 4 микросекунды, и функция тоже возвращает unsigned long. Чтобы засечь время, считай его до и после, а затем вычти:

unsigned long start = micros();
int reading = analogRead(A0);
unsigned long took = micros() - start;
Serial.println(took);   // около 110: вызов analogRead() занимает около 0.1 ms

Поскольку micros() считает так быстро, значения у неё заканчиваются гораздо раньше, чем у millis(): примерно через 70 минут отсчёт начинается снова с 0. Используй её для коротких промежутков времени, а millis() — для промежутков длительностью больше нескольких минут.

challenge icon

Задание

Легко

Измерьте, как долго удерживается кнопка, в микросекундах:

  • когда кнопка нажимается, сохраните micros() в pressedAt
  • когда кнопка отпускается, выведите micros() - pressedAt

Нажмите Run, коснитесь кнопки, затем нажмите Check.

Попробуйте сами

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) {
    // кнопку только что нажали: запомни время
  }

  if (!pressed && wasPressed) {
    // кнопку только что отпустили: выведи, сколько времени её удерживали, в микросекундах
  }

  wasPressed = pressed;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Отсчёт времени без delay

Потренируйтесь самостоятельно: Песочница Arduino