现在是时候做一些多重任务了!首先按下图所示连接另一个LED。

microcontrollers_FlashWithoutDelay_bb.png

然后我们将为第二个LED创建另一个状态机,它以完全不同的速率闪烁。使用两个独立的状态机可以让两个led完全独立地闪烁。仅仅使用延迟就会非常复杂。

//这些变量存储flash模式//和LED的当前状态int ledPin1 = 12;// LED引脚编号int ledState1 = LOW;// ledState用于设置LED unsigned long previousMillis1 = 0;//将存储上一次LED更新的时间长OnTime1 = 250;// on-time long OffTime1 = 750毫秒;//毫秒off-time int ledPin2 = 13;// LED引脚编号int ledState2 = LOW;// ledState用于设置LED unsigned long previousMillis2 = 0;//将存储上一次LED更新的时间长OnTime2 = 330;//时间长OffTime2 = 400毫秒; // milliseconds of off-time void setup() { // set the digital pin as output: pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); } void loop() { // check to see if it's time to change the state of the LED unsigned long currentMillis = millis(); if((ledState1 == HIGH) && (currentMillis - previousMillis1 >= OnTime1)) { ledState1 = LOW; // Turn it off previousMillis1 = currentMillis; // Remember the time digitalWrite(ledPin1, ledState1); // Update the actual LED } else if ((ledState1 == LOW) && (currentMillis - previousMillis1 >= OffTime1)) { ledState1 = HIGH; // turn it on previousMillis1 = currentMillis; // Remember the time digitalWrite(ledPin1, ledState1); // Update the actual LED } if((ledState2 == HIGH) && (currentMillis - previousMillis2 >= OnTime2)) { ledState2 = LOW; // Turn it off previousMillis2 = currentMillis; // Remember the time digitalWrite(ledPin2, ledState2); // Update the actual LED } else if ((ledState2 == LOW) && (currentMillis - previousMillis2 >= OffTime2)) { ledState2 = HIGH; // turn it on previousMillis2 = currentMillis; // Remember the time digitalWrite(ledPin2, ledState2); // Update the actual LED } }

谢谢你,先生!我可以再要一杯吗?

您可以添加更多的状态机,直到耗尽内存或GPIO引脚为止。每个状态机都有自己的闪光速率。作为练习,编辑上面的代码以添加第三个状态机。

  • 首先从一个状态机复制所有的状态变量和代码。
  • 然后重新命名所有变量,以避免与第一台机器冲突。

这并不难做。但是,一遍又一遍地编写相同的代码似乎相当浪费。一定有更有效的方法!

有更好的方法来管理这种复杂性。有些编程技术既简单又高效。在下一页中,我们将介绍Arduino编程语言的一些更高级的功能。

本指南首次发布于2014年11月3日。最后更新于2014年10月27日。

本页(现在可以同时浏览两页)最后一次更新是在2014年10月27日。

文本编辑器tinymce