Работа со временем
Функция millis()
Возвращает количество миллисекунд с момента начала выполнения текущей программы на плате Arduino. Это количество сбрасывается на ноль вследствие переполнения значения приблизительно через 50 дней.
Параметров нет.
Возвращаемое значение — количество миллисекунд с момента начала выполнения программы (тип unsigned long).
Пример .
unsigned long time; void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print("Time: "); time = millis();
// выводит количество миллисекунд с момента начала выполнения программы Serial.println(time);
// ждет секунду перед следующей итерацией цикла. delay(1000);
}
Функция micros()
Возвращает количество микросекунд с момента начала выполнения текущей программы на плате Arduino. Значение переполняется и сбрасывается на ноль приблизительно через 70 минут. На платах Arduino с 16 МГц (Duemilanove и Nano) функция micros() имеет разрешение 4 секунды (возвращаемое значение всегда кратно 4). На платах с 8 МГц (Arduino Lilypad) — разрешение функции 8 секунд.
Параметров нет.
Возвращаемое значение — количество микросекунд с момента начала выполнения программы (unsigned long).
Пример использования функции
unsigned long time; void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print("Time: "); time = micros();
// выводит количество микросекунд с момента начала выполнения
// программы Serial.println(time);
// ждет секунду перед следующей итерацией цикла. delay(1000);
}
Функция delay()
Останавливает выполнение программы на заданное в параметре количество миллисекунд (1000 миллисекунд в 1 секунде).
Синтаксис:
delay(ms);
Параметр:
ms — количество миллисекунд, на которое приостанавливается выполнение программы ( тип unsigned long).
Пример
int ledPin = 13; // светодиод подключен на порт 13 void setup()
{
pinMode(ledPin, OUTPUT); // устанавливается режим порта – выход
}
void loop()
{
digitalWrite(ledPin, HIGH); // включаем светодиод
delay(1000); // ожидаем секунду
digitalWrite(ledPin, LOW); // выключаем светодиод
delay(1000); // ожидаем секунду
}
Не рекомендуется использовать эту функцию для событий длиннее 10 миллисекунд, т. к. во время останова не могут быть произведены манипуляции с портами, не могут быть считаны сенсоры или произведены математические операции. В качестве альтернативного подхода возможно контролирование времени выполнения тех или иных функций с помощью millis(). При использовании функции delay() работа прерываний не останавливается, продолжается запись последовательно (serial) передаваемых данных на RX-порту, ШИМ-сигнал (analogWrite) продолжает генерироваться на портах.
Функция delayMicroseconds()
Останавливает выполнение программы на заданное в параметре количество микро- секунд (1 000 000 микросекунд в 1 секунде).
В данной версии Arduino максимальная пауза, воспроизводимая корректно, — 16 383. Возможно, это будет изменено в следующих версиях Arduino. Для остановки выполнения программы, более чем на несколько тысяч микросекунд, рекомендуется использовать функцию delay().
Синтаксис:
delayMicroseconds(us);
Параметр:
us — количество микросекунд, на которое приостанавливается выполнение программы (unsigned int).
Пример использования функции
int outPin = 8; // цифровой порт входа/выхода 8 void setup()
{
pinMode(outPin, OUTPUT); // устанавливается режим порта – выход
}
void loop()
{
digitalWrite(outPin, HIGH); // подаем HIGH на выход delay(50); // ожидаем 50 микросекунд digitalWrite(outPin, LOW); // устанавливаем LOW на выходе delay(50); // ожидаем 50 микросекунд
}