millis():获取Arduino开机后运行的时间

millis函数可以用来获取Arduino开机后运行的时间长度,该时间长度单位是毫秒,最长可记录接近50天左右的时间。如果超出记录时间上限,记录将从0重新开始。

返回值

Arduino开机后运行的时间长度,此时间数值以毫秒为单位(返回值类型:无符号长整型

注意:

millis函数的返回值为无符号长整型数据, 如果将该数值与整型数据或其它数据类型进行运算,运行结果将产生错误。

示例程序-1

以下实例程序将通过串口监视器输出程序的运行时间

unsigned long time;
 
void setup(){
  Serial.begin(9600);
}
void loop(){
  Serial.print("Arduino has been running this sketch for ");
  time = millis();
  //输出程序运行时间
  Serial.print(time);
  Serial.println(" milliseconds.");
  delay(1000);
}

示例程序-2

/* 
 *  millisBlink
 * 本示例程序使用millis()函数控制Arduino开发板内置LED的点亮和熄灭。
*/
unsigned long previousBlinkTime;
int blinkInterval = 1000; //LED闪烁时间间隔
bool toggle;
 
void setup() {
  pinMode(LED_BUILTIN, OUTPUT); 
  Serial.begin(9600);
}
 
void loop() {  
  unsigned long currentMillis = millis(); // 获取当前时间
  millisBlink(currentMillis);
 
  /* 由于使用millis()函数控制LED闪烁,所以loop函数中没有delay。
   * 于是我们可以在loop函数中流畅的执行其他操作。
  */
 
}
 
void millisBlink(unsigned long currentTime) { 
  //检查是否到达时间间隔
  if (currentTime - previousBlinkTime >= blinkInterval) {    //如果时间间隔达到了
    toggle = (toggle == 1) ? 0 : 1;    
    digitalWrite(LED_BUILTIN, toggle);                       //执行闪烁LED操作
    
    previousBlinkTime = currentTime;  // 将检查时间复位   
    
    Serial.print(F("toggle = "));Serial.println(toggle);          
  }  else if (currentTime - previousBlinkTime <= 0) {   // 如果millis时间溢出
    previousBlinkTime = currentTime;
  }
}