深入理解Arduino中的millis()函数

一、millis()函数的原理

在使用Arduino进行开发时,我们经常会使用到millis()函数。这个函数的作用是返回程序运行时间(以毫秒为单位)。这个函数的实现原理是基于计算机系统中的定时器中断。

当你调用millis()函数时,它会返回自外部中断0引脚上次触发的时间(以毫秒为单位)。如果你记录了当前时刻,你可以将两个时刻的差值转换成你需要的时间单位,以实现时间测量、定时和延时等操作。

每个定时器中断的时间间隔为1毫秒(或4毫秒),也就是说,如果你运行了一段时间,你可能会在外部中断0引脚上看到一条稳定的PWM波形。

    unsigned long lastTime = 0;
    unsigned long currentTime = millis();
    unsigned long timeInterval = currentTime - lastTime; // 计算时间间隔
    lastTime = currentTime; // 更新上一次时间戳

二、millis()函数的优势

在嵌入式系统中,对于延时和时间间隔的测量是非常基础、常用也容易出错的操作。在以前,我们通常会使用delay函数或者外部计时器的计数器进行测量。

但是,这两种方法都不能很好地适应多任务和异步操作的需求。使用delay函数会阻塞整个系统,而使用计数器会强制你手动调用计数器和计时器中断的计数。在复杂的系统中,这些操作会占用大量的CPU时间,导致系统响应缓慢甚至崩溃。

与这些方法相比,使用millis()函数具有一些优势:

  • millis()函数不会阻塞整个系统,因为它只是返回计时器中断的时间戳。
  • millis()函数非常准确,因为它使用系统硬件定时器。
  • millis()函数非常容易使用,因为它只需要一个简单的函数调用。

三、millis()函数的应用

在使用millis()函数进行时间测量和延时时,你需要知道当前时间戳和上一次时间戳之间的差值。通常情况下,你需要定义一个全局变量来存储上一次时间戳。

在Arduino中,我们可以使用millis()来实现很多应用。比如:

  • 时间控制,定时器、计数器和闹钟系统的实现。
  • 按键消抖(当按键按下时,等待一段时间以消抖,以确定按键是否真正按下)。
  • 物品测距,当超声波发生器和接收器之间没有障碍物时,通过测量信号发出和返回的时间来计算距离。
  • 太阳能利用,使用光敏传感器来测量光线强度,并根据测量结果来调整太阳能板的朝向。

四、代码示例

下面是一个使用millis()函数实现闪烁LED的简单代码示例:

    void setup() {
      pinMode(LED_BUILTIN, OUTPUT);
    }
    
    void loop() {
      unsigned long currentTime = millis();
      static unsigned long lastTime = 0;
      unsigned long interval = 1000; // 闪烁间隔
      if (currentTime - lastTime >= interval) {
        lastTime = currentTime;
        digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); // 翻转LED状态
      }
    }

这个程序会使内置LED在1秒钟内翻转一次。在每次循环中,它会检查当前时间戳和上一次时间戳之间的时间间隔。如果时间间隔超过了闪烁间隔,就会翻转LED状态。

五、总结

通过这篇文章的阐述,我们更深入的理解了Arduino中的millis()函数。我们了解了它的优点和原理,并了解了它的一些应用场景。在实际的应用中,我们可以根据具体的需求来使用这个函数,从而达到更高效的开发结果。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/258591.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-15 12:50
下一篇 2024-12-15 12:50

相关推荐

  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python中capitalize函数的使用

    在Python的字符串操作中,capitalize函数常常被用到,这个函数可以使字符串中的第一个单词首字母大写,其余字母小写。在本文中,我们将从以下几个方面对capitalize函…

    编程 2025-04-29
  • Python中set函数的作用

    Python中set函数是一个有用的数据类型,可以被用于许多编程场景中。在这篇文章中,我们将学习Python中set函数的多个方面,从而深入了解这个函数在Python中的用途。 一…

    编程 2025-04-29
  • 单片机打印函数

    单片机打印是指通过串口或并口将一些数据打印到终端设备上。在单片机应用中,打印非常重要。正确的打印数据可以让我们知道单片机运行的状态,方便我们进行调试;错误的打印数据可以帮助我们快速…

    编程 2025-04-29
  • 三角函数用英语怎么说

    三角函数,即三角比函数,是指在一个锐角三角形中某一角的对边、邻边之比。在数学中,三角函数包括正弦、余弦、正切等,它们在数学、物理、工程和计算机等领域都得到了广泛的应用。 一、正弦函…

    编程 2025-04-29
  • Python3定义函数参数类型

    Python是一门动态类型语言,不需要在定义变量时显示的指定变量类型,但是Python3中提供了函数参数类型的声明功能,在函数定义时明确定义参数类型。在函数的形参后面加上冒号(:)…

    编程 2025-04-29
  • Python实现计算阶乘的函数

    本文将介绍如何使用Python定义函数fact(n),计算n的阶乘。 一、什么是阶乘 阶乘指从1乘到指定数之间所有整数的乘积。如:5! = 5 * 4 * 3 * 2 * 1 = …

    编程 2025-04-29
  • Python定义函数判断奇偶数

    本文将从多个方面详细阐述Python定义函数判断奇偶数的方法,并提供完整的代码示例。 一、初步了解Python函数 在介绍Python如何定义函数判断奇偶数之前,我们先来了解一下P…

    编程 2025-04-29
  • Python函数名称相同参数不同:多态

    Python是一门面向对象的编程语言,它强烈支持多态性 一、什么是多态多态是面向对象三大特性中的一种,它指的是:相同的函数名称可以有不同的实现方式。也就是说,不同的对象调用同名方法…

    编程 2025-04-29
  • 分段函数Python

    本文将从以下几个方面详细阐述Python中的分段函数,包括函数基本定义、调用示例、图像绘制、函数优化和应用实例。 一、函数基本定义 分段函数又称为条件函数,指一条直线段或曲线段,由…

    编程 2025-04-29

发表回复

登录后才能评论