Blink Without Delay: 不使用 delay() 函数而使 LED 闪烁

您所在的位置:网站首页 arduino乱执行代码delay Blink Without Delay: 不使用 delay() 函数而使 LED 闪烁

Blink Without Delay: 不使用 delay() 函数而使 LED 闪烁

2024-07-10 19:26| 来源: 网络整理| 查看: 265

不使用 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); } }

 

参考 pinMode() digitalWrite() digitalRead() if else BlinkWithoutDelay - Blink an LED without using the delay() function. Debounce - Read a pushbutton, filtering noise. DigitalInputPullup - Demonstrates the use of INPUT_PULLUP with pinMode(). StateChangeDetection - Count the number of button pushes. toneKeyboard - A three-key musical keyboard using force sensors and a piezo speaker. toneMelody - Play a melody with a Piezo speaker. toneMultiple - Play tones on multiple speakers sequentially using the tone() command. tonePitchFollower - Play a pitch on a piezo speaker depending on an analog input.


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3