【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);
  }
}
相关推荐
杭州泽沃电子科技有限公司2 小时前
烧结工序的“隐形守护者”:在线监测如何成为钢铁制造的关键支柱
物联网·安全·智能监测
TDengine (老段)4 小时前
TDengine 数据函数 ROUND 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·1024程序员节
TDengine (老段)4 小时前
TDengine 数学函数 RAND 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
小莞尔5 小时前
【51单片机】【protues仿真】基于51单片机智能温控风扇系统
c语言·单片机·嵌入式硬件·物联网·51单片机·1024程序员节
GIS数据转换器6 小时前
城市基础设施安全运行监管平台
大数据·运维·人工智能·物联网·安全·无人机·1024程序员节
搞科研的小刘选手7 小时前
【云计算专题会议】第二届云计算与大数据国际学术会议(ICCBD 2025)
大数据·人工智能·物联网·5g·云计算·6g·智能通信
电子科技圈7 小时前
芯科科技推出智能开发工具Simplicity Ecosystem软件开发套件开启物联网开发的新高度
mcu·物联网·设计模式·软件工程·软件构建·iot·1024程序员节
taxunjishu7 小时前
欧姆龙 NX1P2 借助 Ethernet/ip 转 Modbus RTU,与德马泰克设备共创仓库精准货位管理方案
人工智能·嵌入式硬件·物联网·工业物联网·工业自动化
DuHz20 小时前
基于MIMO FMCW雷达的二维角度分析多径抑制技术——论文阅读
论文阅读·物联网·算法·信息与通信·毫米波雷达
MicroTech20251 天前
微算法科技(NASDAQ MLGO)基于区块链点阵加密算法的物联网轻量级方案:构建物联网安全基石
科技·物联网·区块链