Функции millis(), delay() и micros() являются стандартными функциями для работы с временем в Arduino.
Функция millis() возвращает количество миллисекунд, прошедших с момента запуска Arduino. Эта функция используется для создания задержек, планирования событий или измерения времени. Например, следующий код позволяет зажигать светодиод на 500 миллисекунд каждые 5 секунд:
unsigned long previousMillis = 0; // Переменная для хранения времени последнего выполнения действия
const long interval = 5000; // Интервал между выполнениями действия (в миллисекундах)
unsigned long currentMillis = millis(); // Получаем текущее время в миллисекундах
if (currentMillis — previousMillis >= interval) < // Если прошло нужное количество времени
previousMillis = currentMillis; // Обновляем время последнего выполнения действия
digitalWrite(LED_BUILTIN, HIGH); // Зажигаем светодиод
delay(500); // Ждём полсекунды
digitalWrite(LED_BUILTIN, LOW); // Гасим светодиод
Функция delay() приостанавливает выполнение программы на заданное количество миллисекунд. Эта функция используется для создания задержек между действиями. Во время блокировки вы не можете выполнять другие задачи, что может быть нежелательным в некоторых случаях. Например, следующий код зажигает светодиод на 500 миллисекунд и затем гасит его на 500 миллисекунд:
Уроки Ардуино. Прерывания по таймеру
digitalWrite(LED_BUILTIN, HIGH); // Зажигаем светодиод
delay(500); // Ждём полсекунды
digitalWrite(LED_BUILTIN, LOW); // Гасим светодиод
delay(500); // Ждём ещё полсекунды
Функция micros() возвращает количество микросекунд, прошедших с момента запуска Arduino. Эта функция используется для измерения времени с более высокой точностью, чем функция millis(). Например, следующий код измеряет время, затраченное на выполнение цикла:
unsigned long startTime = micros(); // Запоминаем текущее время в микросекундах
// Здесь выполняется код цикла
unsigned long endTime = micros(); // Запоминаем текущее время в микросекундах
unsigned long elapsedTime = endTime — startTime; // Вычисляем время, затраченное на выполнение цикла
Serial.println(elapsedTime); // Выводим время в монитор порта
Для простых проектов выбирается функция delay. Если в проекте нельзя останавливать выполнение кода, то лучше использовать millis, micros.
Источник: dzen.ru
Arduino
Возвращает время в миллисекундах, прошедшее с начала выполнения программы на плате Arduino. Это число будет переполнено и сброситься до 0 примерно через 50 дней выполнения.
Уроки Arduino #4 — функции времени
Синтаксис
Параметры
Возвращаемое значение
Количество миллисекунд, прошедших с момента запуска программы
Пример
Выводим значение, возвращаемое функцией millis() и ждем 1 секунду:
unsigned long mTime; void setup() < Serial.begin(9600); >void loop()
Функция micros()
Описание
Возвращает время в микросекундах, прошедшее с начала выполнения программы на плате Arduino. Это число будет переполнено и сброситься до 0 примерно через 70 минут выполнения.
Синтаксис
Параметры
Возвращаемое значение
Количество микросекунд, прошедших с момента запуска программы
Пример
Выводим значение, возвращаемое функцией micros() и ждем 1 секунду:
unsigned long mTime; void setup() < Serial.begin(9600); >void loop()
Примечания
На платах Arduino 16 МГц (например Uno и Nano) эта функция имеет разрешение в четыре микросекунды, поэтому значение всегда кратно четырем. На платах Arduino 8 МГц (например, LilyPad) эта функция имеет разрешение восемь микросекунд.
Функция delay()
Описание
Приостанавливает выполнение программы на заданноое время в миллисекундах.
Синтаксис
Параметры
ms — время в миллисекундах, на которое нужно приостановить программу
Возвращаемое значение
Пример
Мигаем встроенным светодиодом:
int ledPin = 13; void setup() < pinMode(ledPin, OUTPUT); >void loop()
Примечания
Несмотря на то, что с помощью функции delay() легко создать мигающий светодиод и многие другие простые скетчи, использование функции имеет существенные недостатки. Во время приостановки программы невозможны любые манипуляции с пинами, например опрос датчиков. Также не будут работать многие математические функции. Поэтому рекомендуется в качестве альтернативы использовать функцию millis() .
Однако некоторые функции во вовремя выполнение delay() все же продолжают работать. Например, прерывания.
Функция delayMicroseconds()
Описание
Приостанавливает выполнение программы на заданное время в микросекундах.
Синтаксис
Параметры
us — время в микросекундах, на которое нужно приостановить программу
Возвращаемое значение
Пример
Посылаем последовательность импульсов с периодом раз в 100 микросекунд:
int outPin = 8; void setup() < pinMode(outPin, OUTPUT); >void loop()
Источник: arduino-technology.ru
Arduino — функции — время
Функция millis() позволяет считать время, прошедшее с момента запуска текущей программы. Функция возвращает значение в формате «unsigned long» и позволяет считать значения до 50 дней с момента запуска программы. По прошествии этого времени отсчет начнется заново. Ниже приведен пример использования функции millis():
[slh lang=»php»] unsigned long time;
void setup() Serial.begin(9600);
>
void loop() Serial.print(«Время включения: «);
time = millis(); // запомнить значение времени
Serial.println(time); // отправка информации через последовательный порт
delay(1000);
>
[/slh]
В приведенном выше примере, каждую секунду в монитор порта будет отправляться информация о времени, которое прошло с момента запуска программы. Поскольку время измеряется в миллисекундах, то каждое последующие значение будет отличаться на 1000. Точность считывания зависит от стабильности кварцевого резонатора Arduino.
Функция micros()
Функция micros() является аналогом функции millis(), разница заключается в точности измерения. С помощью функции micros() мы получим время, прошедшее от запуска текущей программы в микросекундах. Счетчик подсчитанных микросекунд будет сброшен по истечении 70 минут. Ниже приведен пример использования функции micros():
[slh lang=»php»] unsigned long time;
void setup() Serial.begin(9600);
>
void loop() Serial.print(«Время с момента запуска: «);
time = micros();
Serial.print(time);
Serial.println(» мкс «);
delay(1000);
>
[/slh] Так же, как и в примере с функцией millis(), здесь каждую секунду в монитор порта будет отправляться информация об измеренном времени, разница состоит только в том, что в данном случае время измеряется в микросекундах.
Функция delay()
Функция delay() позволяет приостановить выполнение текущей программы на указанное в параметре время. Синтаксис команды выглядит следующим образом:
[slh lang=»php»] //команды
delay(500); //задержка на 0,5 сек
//команды
delay(1000); //задержка на 1с
[/slh]
Время указывается в миллисекундах (1 сек = 1000 мс). Данный параметр может иметь тип «unsigned long», который находится в диапазоне от 0 до 4294967295. Ниже пример использования команды delay():
[slh lang=»php»] #define ledPin 13
void setup()
pinMode(ledPin,13);
>
void loop()
digitalWrite(ledPin,HIGH); //включить LED
delay(500); //подождать 500ms (0,5 сек)
digitalWrite(ledPin,LOW); //выключить LED
delay(1000); //подождать 1000 мс (1 сек)
>
[/slh]
В приведенном выше примере, светодиод загорается на 0,5 секунды, затем гаснет на 1 секунду и так далее, пока питание Arduino не будет отключено.
Функция delayMicroseconds()
Функция delayMicroseconds() является разновидностью функции delay(). Разница заключается в количестве и точности отсчета времени. Функция delay() позволяет отсчитывать время с точностью до 1 миллисекунды, в то время как delayMicroseconds() с точностью до 1 микросекунды.
Значение, которое можно указать в параметре, находиться в диапазоне от 0 до 16383. Для более длинных временных интервалов следует использовать функцию delay() или несколько раз использовать delayMicroseconds().
[slh lang=»php»] #define outPin 8
void setup()
pinMode(outPin, OUTPUT); // контакт 8 как выход
>
void loop()
digitalWrite(outPin, HIGH); // контакт 8 высокое состояние
delayMicroseconds(50); // пауза 50 микросекунд
digitalWrite(outPin, LOW); // контакт 8 низкое состояние
delayMicroseconds(50); // пауза 50 микросекунд
>
[/slh]
Этот пример генерирует меандр с периодом 100 микросекунд и заполнением 50%.
Источник: www.joyta.ru