Arduino LED 闪烁的三种思路

作者: 英文原版童书 | 来源:发表于2017-05-30 10:27 被阅读179次

首先将电路图贴上:

第一种思路:使用delay函数

官方文档中的blink例子就是使用的这种方法,代码如下:

int led = 13;                   //LED连接在13引脚

void setup() {

pinMode(led, OUTPUT);

}

void loop() {                   // 循环

digitalWrite(led, HIGH);      // 点亮LED

delay(1000);                  // 延时1000ms(即1秒)

digitalWrite(led, LOW);       // 熄灭LED

delay(1000);                  // 延时1000ms

}

多说几句:这里的延时也就是LED保持状态(点亮或熄灭)的持续时间,如果熄灭LED之后不加延时函数的话,程序熄灭LED之后,进入下一次循环又点亮了LED(速度太快,将看不出来闪烁,结果就是LED一直保持点亮状态)

优点:简单易懂

缺点:delay函数会阻塞程序的运行,因为在延时时间内程序处于暂停状态(不会执行其下面的代码,直到延时结束)

第二种方法:使用millis时间函数实现非阻塞

代码如下:

int led = 13;

int pre_time=0;                    //初始时间

int led_state=LOW;             //led初始状态为熄灭

int hold_time=500;              //LED维持状态的时间

void setup() {

pinMode(led, OUTPUT);

}

void loop() {

int cur_time=millis();           //获取当前程序运行的时间

if(cur_time-pre_time>hold_time)//如果达到了指定的时间

{

led_state=!led_state;        //改变LED灯的状态

pre_time=cur_time;//将当前时间保存到初始的时间,准备进入下一轮循环

}

digitalWrite(led,led_state);

}

优点:非阻塞(如果程序中有其他的代码要运行将不会有延迟)

第三种方法:使用指针进行改造

思路和第一种方法一样,只是使用了指针来进行改造,并且封装在了一个函数内。

代码如下:

int led=13;

void setup(){

pinMode(led,OUTPUT);

}

void BlinkLED(int pin,int *led_state)//函数封装

{

digitalWrite(pin,*led_state);

delay(1000);

*led_state=!(*led_state);//改变LED状态

}

void loop(){

static int state=HIGH;//LED 的状态,只初始化一次,所以声明为静态变量

BlinkLED(led,&state);//调用函数

}

优点:简洁优雅

缺点:指针优点难度(不过很强大)

相关文章

网友评论

    本文标题:Arduino LED 闪烁的三种思路

    本文链接:https://www.haomeiwen.com/subject/dmxrfxtx.html