最新消息:380元/半年,推荐全网最具性价比的一站式编程学习平台码丁实验室

Arduino LED 闪烁的三种思路

Arduino 少儿编程 1957浏览 0评论

友情提示:380元/半年,儿童学编程,就上码丁实验室

Arduino LED 闪烁的三种思路


首先将电路图贴上:

Arduino LED 闪烁的三种思路

第一种思路:使用delay函数

思路如下图:

Arduino LED 闪烁的三种思路

官方文档中的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);//调用函数

  }

 

优点:简洁优雅

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

 

欢迎大家评论与转化

您必须 登录 才能发表评论!