首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Arduino示例代码讲解:Blink without Delay 无延迟闪烁

Blink without Delay 无延迟闪烁

这段代码是一个经典的Arduino示例程序,名为“Blink without Delay”,它的目的是在不使用delay()函数的情况下让一个LED灯闪烁。这种方法的优点是不会阻塞其他代码的运行,使得程序可以同时执行多个任务。

/* Blink without Delay

Turns on and off a light emitting diode(LED) connected to a digital

pin, without using the delay() function.  This means that other code

can run at the same time without being interrupted by the LED code.

The circuit:

* LED attached from pin 13 to ground.

* Note: on most Arduinos, there is already an LED on the board

that's attached to pin 13, so no hardware is needed for this example.

created 2005

by David A. Mellis

modified 8 Feb 2010

by Paul Stoffregen

modified 11 Nov 2013

by Scott Fitzgerald

This example code is in the public domain.

http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay

*/

// constants won't change. Used here to set a pin number :

const int ledPin =  13;      // the number of the LED pin

// Variables will change :

int ledState = LOW;             // ledState used to set the LED

// Generally, you shuould use "unsigned long" for variables that hold time

// The value will quickly become too large for an int to store

unsigned long previousMillis = 0;        // will store last time LED was updated

// constants won't change :

const long interval = 1000;           // interval at which to blink (milliseconds)

void setup() {

// set the digital pin as output:

pinMode(ledPin, OUTPUT);

}

void loop()

{

// here is where you'd put code that needs to be running all the time.

// check to see if it's time to blink the LED; that is, if the

// difference between the current time and last time you blinked

// the LED is bigger than the interval at which you want to

// blink the LED.

unsigned long currentMillis = millis();

if(currentMillis - previousMillis >= interval) {

  // save the last time you blinked the LED

  previousMillis = currentMillis;

  // if the LED is off turn it on and vice-versa:

  if (ledState == LOW)

    ledState = HIGH;

  else

    ledState = LOW;

  // set the LED with the ledState of the variable:

  digitalWrite(ledPin, ledState);

}

}

代码功能

无延时闪烁LED:代码通过记录时间和比较时间差来控制LED的闪烁,而不是使用delay()函数。这样,程序可以在控制LED的同时执行其他任务。

代码逐行解释

1. 注释部分

这是代码的注释部分,说明了代码的功能和硬件连接方式

/* Blink without Delay

Turns on and off a light emitting diode(LED) connected to a digital

pin, without using the delay() function.  This means that other code

can run at the same time without being interrupted by the LED code.

The circuit:

* LED attached from pin 13 to ground.

* Note: on most Arduinos, there is already an LED on the board

that's attached to pin 13, so no hardware is needed for this example.

created 2005

by David A. Mellis

modified 8 Feb 2010

by Paul Stoffregen

modified 11 Nov 2013

by Scott Fitzgerald

This example code is in the public domain.

<url id="cuh09gv2crefb6jkqol0" type="url" status="failed" title="" wc="0">http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay</url>

*/

功能:在不使用delay()函数的情况下让连接在数字引脚13上的LED灯闪烁。

硬件连接:将LED连接到数字引脚13和地(GND)。大多数Arduino板上已经有一个连接到引脚13的内置LED,因此无需额外硬件。

提到的链接是Arduino官方文档中关于“Blink without Delay”教程的链接,但由于网络原因,无法解析该链接。如果需要查看该教程,建议检查链接的合法性或稍后重试。

2. 变量定义

const int ledPin = 13;      // the number of the LED pin

int ledState = LOW;         // ledState used to set the LED

unsigned long previousMillis = 0; // will store last time LED was updated

const long interval = 1000; // interval at which to blink (milliseconds)

ledPin:定义了一个常量ledPin,值为13,表示LED连接在数字引脚13上。

ledState:定义了一个变量ledState,初始值为LOW,表示LED的初始状态为关闭。

previousMillis:定义了一个变量previousMillis,初始值为0,用于存储上次更新LED的时间。

interval:定义了一个常量interval,值为1000,表示LED闪烁的时间间隔为1000毫秒(1秒)。

3.setup()函数

void setup() {

pinMode(ledPin, OUTPUT); // set the digital pin as output:

}

setup()函数在Arduino板复位后只运行一次。

pinMode(ledPin, OUTPUT);设置数字引脚13为输出模式,这样该引脚可以控制LED的亮灭。

4.loop()函数

void loop() {

unsigned long currentMillis = millis(); // get the current time

if (currentMillis - previousMillis >= interval) {

  previousMillis = currentMillis; // save the last time LED was updated

  if (ledState == LOW) {

    ledState = HIGH; // if the LED is off, turn it on

  } else {

    ledState = LOW; // if the LED is on, turn it off

  }

  digitalWrite(ledPin, ledState); // set the LED with the ledState of the variable

}

}

loop()函数会不断重复运行。

unsigned long currentMillis = millis();:获取当前的时间(以毫秒为单位)。

if (currentMillis - previousMillis >= interval):检查当前时间与上次更新LED的时间差是否大于或等于设定的时间间隔(1000毫秒)。

如果是,则更新previousMillis为当前时间。

切换ledState的状态:如果LED是关闭的(LOW),则将其设置为打开(HIGH);如果LED是打开的(HIGH),则将其设置为关闭(LOW)。

digitalWrite(ledPin, ledState);:根据ledState的值设置LED的状态。

运行结果

当代码上传到Arduino板并运行后,连接在数字引脚13上的LED灯会以每秒闪烁一次的频率不断闪烁。

与使用delay()函数的闪烁程序不同,这段代码不会阻塞其他代码的运行。这意味着在loop()函数中可以添加其他任务,而不会影响LED的闪烁频率。

修改建议

改变闪烁频率:可以通过调整interval的值来改变LED的闪烁频率。例如,将interval设置为500,LED将每秒闪烁两次。

添加其他任务:可以在loop()函数中添加其他代码,例如读取传感器数据或控制其他设备,而不会影响LED的闪烁。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OLeCcjC11ZLolHILt02d0tog0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券