Description

Pauses the program for the amount of time (in milliseconds) specified as parameter.

Syntax

Use the following function to start a pause of a given time in the code:

delay(ms)

Parameters

The function admits the following parameter:

ms: the number of milliseconds to pause. Allowed data types: unsigned long.

Returns

The function returns nothing.

Example Code

The code pauses the program for one second before toggling the output pin.

int ledPin = 13;              // LED connected to digital pin 13

void setup() {
  pinMode(ledPin, OUTPUT);    // sets the digital pin as output
}

void loop() {
  digitalWrite(ledPin, HIGH); // sets the LED on
  delay(1000);                // waits for a second (1000 ms)
  digitalWrite(ledPin, LOW);  // sets the LED off
  delay(1000);                // waits for a second (1000 ms)
}

Notes and Warnings

While it is easy to create a blinking LED with the delay() function, and many sketches use short delays for tasks such as switch debouncing, the use of delay() in a sketch has significant drawbacks. No other reading of sensors, mathematical calculations, or pin manipulation can occur 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 using delay() for timing events longer than 10s of milliseconds, unless the Arduino sketch is straightforward.

Certain things do occur while the delay() function is controlling the chip 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 (attachInterrupt) will function as expected.

See also