【Arduino】delay()、millis() 时间函数

目录

1、延时函数

2、运行时间函数

[3、不使用delay() 函数实现定时、等待](#3、不使用delay() 函数实现定时、等待)


1、延时函数

通过延迟函数,我们可以实现LED灯以1S为间隔闪送。

复制代码
void setup() {
  pinMode(LED_BUILTIN,OUTPUT);  
    //定义引脚,告诉ESP8266那个引脚做什么用,模式是什么,通常有三种模式可以配置:INPUT:输入模式;OUTPUT:输出模式;INPUT_PULLUP:输入上拉模式。
    //LED_BUILTIN :Arduino内置的常量
}
void loop() {
  
  digitalWrite(LED_BUILTIN,HIGH);  
  //拉高LED电平。点亮LED。
  delay(1000);//让LED灯以1s为间隔闪烁
  digitalWrite(LED_BUILTIN,LOW);  //拉低LED电平。
  delay(1000);
  }

在Arduino中,提供了毫秒级和微秒级两种延时函数。运行延时函数时,会等待指定的时间,再运行此后的程序。可以通过参数设定延时时间。

函数格式

复制代码
delay(ms);//此函数为毫秒级延时,括号里面默认单位ms
delayMicroseconds(us)//此函数为微秒级延时,括号里面默认单位us

2、运行时间函数

millis() 函数可以获取单片机开机至今的毫秒数;如果开机24小时,就是:606024*1000=86400000 毫秒

复制代码
millis()//返回值是系统运行时间,单位毫秒
micros()返回值是系统运行时间,单位微秒

两个函数都可以获取运行时间,也就是单片机开机至今的时间。

millis(),毫秒数,大约50天后溢出,即回到零

micros(),微秒数,大约70分钟后溢出,回到零。

3、不使用delay() 函数实现定时、等待

在前面,我们使用delay()函数实现的LED的的间隔点亮,但是使用delay() 函数缺点:会堵塞整个loop,不能同时执行多个任务。

大部分MCU都不具备多个核心,其同一时刻,只能执行一条指令。如果使用delay进行延时,将导致整个程序阻塞,影响此后的其他操作。对于处理稍微复杂的程序,很容易导致程度卡顿。推荐使用milis()函数,获取当前时间,根据不同的时间执行不同的操作,实现同样的定时、等待功能。

程序示例

复制代码
// 定义常量:LED灯所在针脚,LED_BUILTIN 也是一个常量,由开发板内置。
const int ledPin =  LED_BUILTIN;

// LED针脚的默认电平为:低电平;默认LED是亮的
int ledState = LOW; 

// 定义一个无符号的长整数变量,因为它可能会变的很大
// 将保存上次触发的时间点,默认为0
unsigned long previousMillis = 0;

// 定义常量:触发间隔,单位是毫秒,1000 = 1秒
const long interval = 1000;

void setup() {
  // 设定LED针脚为输出模式
  pinMode(ledPin, OUTPUT);
}

void loop() {
  unsigned long currentMillis = millis(); //获取当前时间
  //如果(当前时间 - 上次触发的时间 > 触发间隔) 说明该进行下一次触发了。
  if (currentMillis - previousMillis >= interval) {
    
    // 将上次触发事件更新为 "当前时间"
    previousMillis = currentMillis;

    /**
     * 这里写任何你想执行的代码
     * 在例子中,则是反转LED的电平,达到亮灭切换的效果
     *    判断LED当前的电平,如果是低,就改为高;如果是高,就改为低
     */
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }

    // 将修改后的电平写入LED针脚
    digitalWrite(ledPin, ledState);
  }
}
相关推荐
wuyk55520 小时前
《WiFi 嵌入式物联网开发全套实战》| 第 33 章 Wireshark 无线抓包环境搭建、802.11 帧过滤规则
物联网·测试工具·wireshark
乐橙开放平台1 天前
智慧连锁客流检测和离岗检测怎么对接
大数据·人工智能·笔记·物联网·自动化·音视频·智能家居
SL_staff1 天前
设备越多系统越崩?根源在三层抽象失效
spring boot·物联网·github
LiuYanG1 天前
设备断电了平台还显示在线?MQTT 遗嘱消息(LWT)与离线判定踩坑实录
物联网
夏虫不可与之言冰1 天前
Windows WSL2 (Ubuntu) 搭建 ESP‑IDF 6.1 开发环境全过程演示
linux·windows·ubuntu·esp32·乐鑫科技·乐鑫eim·乐鑫代理商
做萤石二次开发的哈哈1 天前
海康甲烷监测终端二次开发:四级能力门控、规则联动与两类异常事件的全链路拆解
物联网·二次开发·工业安全·蓝海aiot一站式工作台·aiot开发·危险气体监测·甲烷检测
阿乔外贸日记1 天前
全球电子产业高度集中:中、韩、日和中国台湾地区占全球数字硬件产能八成
大数据·服务器·人工智能·物联网·云计算
北京盛世宏博大卤蛋1 天前
多机房分布式采集实战:网口温湿度传感器网段划分与网关解耦要点
物联网
Yiran_G1 天前
BLE终端数据积压如何处理?缓存队列、断连补传与流量调度设计
嵌入式硬件·物联网
做萤石二次开发的哈哈1 天前
网络音箱如何接入?音频文件夹、TTS播报、音量管控与ISAPI透传对接详解
人工智能·物联网·蓝海aiot一站式工作台·aiot开发·网络音箱·智慧广播·二次开放