millis()

Description

Returns the number of milliseconds passed since the Arduino board began running the current program. This number will overflow (go back to zero), after approximately 50 days.

Syntax

Use the following function to get the exact time the board has been running the current program in milliseconds:

millis()

Parameters

This function does not admit parameters.

Returns

This function returns the number of milliseconds passed since the program started. Data type:

unsigned long
.

Example Code

This example code prints on the serial port the number of milliseconds passed since the Arduino board started running the code itself.

1unsigned long myTime;
2
3void setup() {
4 Serial.begin(9600);
5}
6void loop() {
7 Serial.print("Time: ");
8 myTime = millis();
9
10 Serial.println(myTime); // prints time since program started
11 delay(1000); // wait a second so as not to send massive amounts of data
12}

Notes and Warnings

  • The return value for

    millis()
    is of type
    unsigned long
    ; logic errors may occur if a programmer tries to do arithmetic with smaller data types such as
    int
    . Even signed
    long
    may encounter errors as its maximum value is half that of its unsigned counterpart.

  • millis()
    is incremented (for 16 MHz AVR chips and some others) every 1.024 milliseconds, then incremented by 2 (rather than 1) every 41 or 42 ticks, to pull it back into sync; thus, some
    millis()
    values are skipped. For accurate timing over short intervals, consider using
    micros()
    .

  • millis()
    will wrap around to 0 after about 50 days (micros in about 70 minutes).

  • Reconfiguration of the microcontroller’s timers may result in inaccurate

    millis()
    readings.

See also

Suggest changes

The content on docs.arduino.cc is facilitated through a public GitHub repository. If you see anything wrong, you can edit this page here.

License

The Arduino documentation is licensed under the Creative Commons Attribution-Share Alike 4.0 license.