Arduino.ru
Останавливает выполнение программы на заданное в параметре количество миллисекунд (1000 миллисекунд в 1 секунде).
Синтаксис
Параметры
ms: количество миллисекунд, на которое приостанавливается выполнение программы. (unsigned long)
Возвращаемое значение
Пример
Замечания по использования функции
Не рекомендуется использовать эту функцию для событий длиннее 10 миллисекунд, т.к. во время останова, не могут быть произведены манипуляции с портам, не могут быть считаны сенсоры или произведены математические операции. В качестве альтернативного подхода возможно контролирование времени выполнения тех или иных функций с помощью millis().
Большинство активности платы останавливается функцией delay(). Тем не менее работа прерываний не останавливается, продолжается запись последовательно (serial) передаваемых данных на RX порту, ШИМ сигнал (analogWrite) продолжает генерироваться на портах.
delay()
ms : the number of milliseconds to pause. Allowed data types: unsigned long .
Returns
Example Code
The code pauses the program for one second before toggling the output pin.
Notes and Warnings
While it is easy to create a blinking LED with the delay() function and many sketches use short delays for such tasks as switch debouncing, the use of delay() in a sketch has significant drawbacks. No other reading of sensors, mathematical calculations, or pin manipulation can go on during the delay function, so in effect, it brings most other activity to a halt. For alternative approaches to controlling timing see the Blink Without Delay sketch, which loops, polling the millis() function until enough time has elapsed. More knowledgeable programmers usually avoid the use of delay() for timing of events longer than 10’s of milliseconds unless the Arduino sketch is very simple.
Certain things do go on while the delay() function is controlling the Atmega chip, however, because the delay function does not disable interrupts. Serial communication that appears at the RX pin is recorded, PWM (analogWrite) values and pin states are maintained, and interrupts will work as they should.
Функции времени
Простейшей с точки зрения использования функцией времени является задержка: программа “зависает” внутри функции задержки и ожидает указанное время. Задержка позволяет очень удобно и наглядно организовать работу простой “однозадачной” программы, у нас есть два варианта задержек:
- delay(time)
- Задержка на указанное количество миллисекунд (мс). 1 секунда = 1’000 мс.
- time принимает тип данных unsigned long и может приостановить выполнение на срок от 1 до 4 294 967 295 мс (
- Задержка на указанное количество микросекунд (мкс). 1 секунда = 1’000’000 мкс.
- time принимает тип данных unsigned int и может приостановить выполнение на срок от 4 до 16383 мкс (да, меньше чем максимум для этого типа данных) с разрешением 4 мкс.
- Работает не на таймере, а на пропуске тактов процессора, поэтому может работать в прерывании и при отключенных прерываниях.
- Иногда не совсем корректно работает с переменными, поэтому нужно стараться использовать константы ( const или просто число).
- Часто используется в библиотеках для эмуляции цифровых интерфейсов связи.
Задержки использовать очень просто:
Мышление “задержками” – главная проблема новичков. Организовать работу сложной программы при помощи задержки – невозможно, поэтому дальше рассмотрим более полезные инструменты.
Функция yield()
Разработчики Arduino позаботились о том, чтобы функция delay() не просто блокировала выполнение кода, но и позволяла выполнять другой код во время этой задержки. Данный “костыль” получил название yield() и работает следующим образом: если объявить функцию
то расположенный внутри неё код будет выполняться во время работы любой задержки delay() в программе! Это решение хоть и кажется нелепым, но в то же время позволяет быстро и без написания лишних костылей и таймеров реализовать пару параллельно выполняющихся задач. Это вполне соответствует идеологии Arduino – максимально простая и быстрая разработка прототипа. Рассмотрим простой пример: стандартный мигающий светодиод, но с опросом кнопки:
Функции счёта времени
Данные функции возвращают время, прошедшее с момента запуска программы, так называемый аптайм (англ. uptime). Таких функций у нас две:
-
millis() – миллисекунды, тип unsigned long , от 1 до 4 294 967 295 мс (
Эти функции позволяют организовать программу практически любой сложности с любым количеством параллельно выполняющихся по таймеру задач. Подробнее об этом поговорим в уроке про многозадачность.
millis() в часы и секунды
Миллисекунды – не самый удобный способ оценить время работы программы. Можно перевести его в более человеческие часы, минуты и секунды при помощи нехитрых математических операций:
Функция delay в Ардуино, delayMicroseconds
Функции Arduino delay() и delayMicroseconds() играют важную роль, и без этих команд практически невозможно написать большинство программ. На нашем сайте вы найдете множество примеров, где нужно управлять временем с помощью delay, например, чтобы контакт кнопки не дребезжал при нажатии. Рассмотрим назначение и применение команд delay и delayMicroseconds в программировании микроконтроллера Ардуино.
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- светодиод и резистор
- макетная плата
- коннекторы
Функция delayMicroseconds останавливает выполнение программы на заданное количество микросекунд (1 секунда считается за 1 000 000 микросекунд). Если в коде необходима задержка более чем на несколько тысяч микросекунд, рекомендуется использовать функцию delay. Далее рассмотрим на простом примере использование функций delayMicroseconds и delay в Arduino IDE, чтобы заставить мигать светодиод.
Функции delayMicroseconds и delay в языке Ардуино

Функция задержки delay Ардуино останавливает выполнение программы на заданное количество миллисекунд (1 секунда соответствует 1000 миллисекунд). Пока программа останавливается с помощью команды delay(), нельзя опрашивать датчики, подключенные к плате, или выполнять другие операции, такие как запись данных в EEPROM Arduino. В этом случае следует использовать функцию millis для активации многозадачности.
Функция delay Ардуино, пример использования в скетче

Задержка delay() Arduino часто встречается в программах. Если вы хотите узнать, как заменить delay на millis в языке программирования Arduino, мы также рассмотрели этот вопрос в другой статье. Сейчас мы разберем основное назначение функции задержки delay на примере мигающего светодиода. Вам понадобится только сама плата Arduino Uno, но вы можете подключить светодиод к контакту 13, как показано на картинке выше.
Заключение. Функция Arduino millis не останавливает выполнение программы, а заново начинает отсчет миллисекунд с обнулением счетчика. В отличие от них, delay и delayMicroseconds останавливают выполнение программы на заданное количество миллисекунд или микросекунд соответственно. Применение той или иной функции паузы в программе для микроконтроллера зависит от поставленной для вас задачи.
