不使用 delay() 函数而使 LED 闪烁

有些时候你需要同时做两件事。例如,你可能希望在读取按键按下状态同时让LED闪烁。 在这种情况下,你不能使用 delay(),因为Arduino程序会在delay()中停顿。 如果按键被按下的同时,Arduino正在暂停等待 delay()结束 ,你的程序也将会错过按键的按下.

这个演示展示了如何闪烁LED而不使用 delay()。它点亮了LED,然后记录下时间。然后,每一次通过 loop()循环, 检查闪烁设置时间是否到达。 如果是,它的点亮或熄灭LED, 并且刷新时间。以这种方式让LED不断闪烁, 而代码的执行不会因一个指令而滞后.

类似的,你用微波炉热比萨,并同时等待一些重要的电子邮件。你把比萨放进微波炉10分钟。使用 delay()的类比,你坐在微波炉前面看着定时器计数,倒计时10分钟直到定时器达到零为止。如果在这期间重要的邮件到达,你将会错过它。

在现实生活中你会做的是开始热萨饼,然后检查你的电子邮件,然后可能再做别的事情(不太长时间的事!)偶尔你会回到微波炉,看看定时器是否已经达到零,即你的比萨饼是否已经完成。

在本教程中,你将学会如何建立一个类似的计时器 .

硬件需求

  • Arduino 开发板
  • LED (非必要)
  • 220欧电阻(非必要)

电路

要构建这电路,请把电阻的一端连接到板子的pin13,电阻的另一端连接到LED的长引脚(长的引脚,称为阳极),LED的短引脚连接到(短的引脚,称为阴极)板子的GND,如上图所示和下面的原理图。

大多数Arduino和Genuino板子已经将板上的LED附加在板子本身的pin13。如果你不附加任何硬件中运行这个例子,您应该看到,LED闪烁。

原理图

点击图片放大

图像使用fritzing.开发。电路的例子, 看到fritzing项目页面

构建电路后将板子插入到你的电脑,开始Arduino软件(IDE),输入下面的代码。

代码

下面的代码使用millis() 函数,从板子开始运行时,就会返回很多个毫秒的命令。当前的演示,是使LED闪烁.

/* 不使用 delay() 函数而使 LED 闪烁 

点亮和熄灭一个连接到数字引脚的发光二极管(LED),不使用delay()延迟函数。
这意味着其他代码可以同时运行而不被LED代码干扰 电路
* LED 连到引脚13 和 地
* 注:大部分 Arduino 已经有板上的LED并且是连到引脚13,所以此示例无需额外硬件 created 2005
by David A. Mellis
modified 8 Feb 2010
by Paul Stoffregen
modified 11 Nov 2013
by Scott Fitzgerald 这个示例代码是在公共领域. http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/ //一个不会改变的常量。这里用来定义一个引脚:
const int ledPin = 13; // LED引脚号 // 一个会变化的变量:
int ledState = LOW; //ledState将LED置低电平 //一般来说,应该使用 "unsigned long" 类型的变量来保存时间
// 如果用int类型来存储值,它很快就会变得过大而该类似无法储存
unsigned long previousMillis = 0; // 将存储的LED值最后一次更新 //一个不会改变的常量:
const long interval = 1000; // 闪烁的时间间隔(毫秒) void setup() {
// 设置数字引脚作为输出:
pinMode(ledPin, OUTPUT);
} void loop() {
// 在这里,你放置的代码需要一直运行. // 检查闪烁的时间,就是if
// 当前时间和上次闪烁的时间
//设置你想要的 LED更大的时间间隔
// LED闪烁.
unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) {
// 保存上次LED闪烁时间
previousMillis = currentMillis; // 如果LED是点亮的,反之亦然:
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
} // 设置LED的电平为ledState值:
digitalWrite(ledPin, ledState);
}
}

参考

Blink Without Delay: 不使用 delay() 函数而使 LED 闪烁的更多相关文章

  1. ytu 1050:写一个函数,使给定的一个二维数组(3×3)转置,即行列互换(水题)

    1050: 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 154  Solved: 112[ ...

  2. [UE4]Delay与Retriggerable Delay

    一.Delay 在右上角都有一个表盘的图标,表示不是在当帧内执行,而是需要一定时间才能完成的. 鼠标移上去,会有一段文字注释.根据指定的延迟时间执行一个延后的动作.当计时还没有结束的时候,如果再次被调 ...

  3. timequest 中set input delay set output delay 的使用

    set_input_delay/ set_output_delay TimeQuest出现以后,随之 set input delay 与 set output delay 也跟着出现,该约束命令用“外 ...

  4. Linux Shell管道调用用户定义函数(使shell支持map函数式特性)

    Linux中有一个管道的概念,常用来流式的处理文本内容,比如一个文件对其中的每一行应用好几个操作,出于两个方面的考虑可能需要在管道中使用用户定义函数: 1. 刚需: 内置的sed/awk之类的可能没法 ...

  5. Python与SQLite日期时间函数的使法

    SQLite的时间函数跟Python的时间函数有些许差别,所以稍做记录,供自己以后查询. 网上有将SQLite官方WIKI内容翻译成中文的文章,大家有兴趣可以搜索一下,我这里单纯记录一下个人比较常用的 ...

  6. 巧用函数,使Sql中in的用法更多变

    在Sql中我们经常会用到in 普遍的写法为 where xx in ('1','2','3') 通过函数写法为: IF EXISTS ( SELECT * FROM sys.objects WHERE ...

  7. javascript函数一共可分为五类: ·常规函数 ·数组函数 ·日期函数 ·数学函数 ·字符串函数

    javascript函数一共可分为五类:    ·常规函数    ·数组函数    ·日期函数    ·数学函数    ·字符串函数    1.常规函数    javascript常规函数包括以下9个 ...

  8. JavaScript 函数大全

    javascript函数一共可分为五类: ·常规函数 ·数组函数 ·日期函数 ·数学函数 ·字符串函数 1.常规函数 javascript常规函数包括以下9个函数: (1)alert函数:显示一个警告 ...

  9. JavaScript中常用的函数

    javascript函数一共可分为五类:  ·常规函数  ·数组函数  ·日期函数  ·数学函数  ·字符串函数 1.常规函数  javascript常规函数包括以下9个函数:  (1)alert函数 ...

随机推荐

  1. Linux 和 Windows 常用工具列表

    1. Windows 篇 1)MobaItem 一款优秀的Windows下模拟Linux Terminal工具,同时也可以用来远程Linux服务器. 2. Linux 篇 2) MC Linux下非常 ...

  2. downsampling and upsampling【转】

    orig: http://www.eetimes.com/document.asp?doc_id=1275556 downsampling The process of reducing a samp ...

  3. 使用 FP-growth 算法高效挖掘海量数据中的频繁项集

    前言 对于如何发现一个数据集中的频繁项集,前文讲解的经典 Apriori 算法能够做到. 然而,对于每个潜在的频繁项,它都要检索一遍数据集,这是比较低效的.在实际的大数据应用中,这么做就更不好了. 本 ...

  4. 最短路径问题——floyd算法

    floyd算法和之前讲的bellman算法.dijkstra算法最大的不同在于它所处理的终于不再是单源问题了,floyd可以解决任何点到点之间的最短路径问题,个人觉得floyd是最简单最好用的一种算法 ...

  5. Myeclipse非正常关闭出现问题

    Could not create the view: An unexpected exception was thrown. 解决办法: 关闭myeclipse 原来工作空间的.metadata文件夹 ...

  6. poj1852 Ants ——想法题、水题

    求最短时间和最长时间. 当两个蚂蚁相遇的时候,可以看做两个蚂蚁穿过,对结果没有影响.O(N)的复杂度 c++版: #include <cstdio> #define min(a, b) ( ...

  7. RMAN备份与恢复之初入茅庐

    理解数据库备份 所谓备份实际上是把数据库复制到转储设备的过程. 从备份方式来看数据库备份分为物理备份和逻辑备份,物理备份是把构成数据库的所有文件拷贝到指定的位置的过程,而逻辑备份只是利用SQL语言从数 ...

  8. 关于CSS初步入门简述1

    关于CSS的简介可以自行百度,本篇只考虑内容 首先关于CSS会由浅入深,写在前面的有很多不严谨,只是为了引出后文所写.不过如果谬误较大,敬请指正! 1.大部分的代码要写在之中 简单的例子: <b ...

  9. tcpdf最新版 6.2版

    tcpdf6.2版,地址记 录 http://download.csdn.net/detail/hayywcy/9547873

  10. var关键字获取数据类型

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...