Найти в Дзене

Программирование для Arduino. Функции времени

Функции millis(), delay() и micros() являются стандартными функциями для работы с временем в Arduino.

millis()

Функция millis() возвращает количество миллисекунд, прошедших с момента запуска Arduino. Эта функция используется для создания задержек, планирования событий или измерения времени. Например, следующий код позволяет зажигать светодиод на 500 миллисекунд каждые 5 секунд:

unsigned long previousMillis = 0; // Переменная для хранения времени последнего выполнения действия
const long interval = 5000; // Интервал между выполнениями действия (в миллисекундах)
void loop() {
unsigned long currentMillis = millis(); // Получаем текущее время в миллисекундах
if (currentMillis - previousMillis >= interval) { // Если прошло нужное количество времени
previousMillis = currentMillis; // Обновляем время последнего выполнения действия
digitalWrite(LED_BUILTIN, HIGH); // Зажигаем светодиод
delay(500); // Ждём полсекунды
digitalWrite(LED_BUILTIN, LOW); // Гасим светодиод
}
}

delay()

Функция delay() приостанавливает выполнение программы на заданное количество миллисекунд. Эта функция используется для создания задержек между действиями. Во время блокировки вы не можете выполнять другие задачи, что может быть нежелательным в некоторых случаях. Например, следующий код зажигает светодиод на 500 миллисекунд и затем гасит его на 500 миллисекунд:

void loop() {
digitalWrite(LED_BUILTIN, HIGH); // Зажигаем светодиод
delay(500); // Ждём полсекунды
digitalWrite(LED_BUILTIN, LOW); // Гасим светодиод
delay(500); // Ждём ещё полсекунды
}

micros()

Функция micros() возвращает количество микросекунд, прошедших с момента запуска Arduino. Эта функция используется для измерения времени с более высокой точностью, чем функция millis(). Например, следующий код измеряет время, затраченное на выполнение цикла:

void loop() {
unsigned long startTime = micros(); // Запоминаем текущее время в микросекундах
// Здесь выполняется код цикла
unsigned long endTime = micros(); // Запоминаем текущее время в микросекундах
unsigned long elapsedTime = endTime - startTime; // Вычисляем время, затраченное на выполнение цикла
Serial.println(elapsedTime); // Выводим время в монитор порта
}

Для простых проектов выбирается функция delay. Если в проекте нельзя останавливать выполнение кода, то лучше использовать millis, micros.

До новых встреч!