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
time = millis()
Parameters
None
Returns
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
3 void setup() {4 Serial.begin(9600);5 }6 void loop() {7 Serial.print("Time: ");8 myTime = millis();9
10 Serial.println(myTime); // prints time since program started11 delay(1000); // wait a second so as not to send massive amounts of data12 }
Notes and Warnings
The return value for millis() is of type
, logic errors may occur if a programmer tries to do arithmetic with smaller data types such asunsigned long
. Even signedint
may encounter errors as its maximum value is half that of its unsigned counterpart.long
millis() is incremented (for 16 MHz AVR chips and some others) every 1.024 milliseconds, then incrementing by 2 (rather than 1) every 41 or 42 ticks, to pull it back into synch; thus some millis() values are skipped. For accurate timing over short intervals, consider using micros().
millis() will wrap around to 0 after about 49 days (micros in about 71 minutes).
Reconfiguration of the microcontroller’s timers may result in inaccurate
readings. The "Arduino AVR Boards" and "Arduino megaAVR Boards" cores use Timer0 to generatemillis()
. The "Arduino ARM (32-bits) Boards" and "Arduino SAMD (32-bits ARM Cortex-M0+) Boards" cores use the SysTick timer.millis()
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.