初学者通常需要学习将两个Arduino草图(代码)组合成一个草图的艺术(和科学)。草图是Arduino调用其代码或程序文件的名称。

它不像复制和粘贴一个草图到另一个草图那么简单。这将导致编译失败,并导致许多错误。主要是因为您将得到多个Setup()和Loop()函数。每个草图只允许一个!

结合两个Arduino草图

此外,您还需要注意其他问题。

  • 引脚分配–如果两个草图闪烁发光二极管两个LED都在同一个数字输出引脚上,您的代码无法编译。否则,它肯定不会起作用!
  • 变量名和常量名–如果两个草图都使用类似的命名变量或常量,则会出现问题。而且您不能仅仅删除双重实例化(定义变量),因为代码在执行期间会在这些变量中放置错误的数据。
  • 函数名–所有用户定义的函数名称都必须是唯一的。如果两个草图都有一个名为“void blinker”的函数,那么其中一个函数需要重命名为其他函数,所有引用的代码都需要使用新的函数名。

最好的开始方法是用眼睛浏览这两组代码,并寻找重复的名称(而不是setup和loop)。如果识别重复项,请在整个草图上执行查找和替换。在合并两个Arduino草图之前,请修复所有副本!这个过程会快得多!

草图样本

在本教程中,我们创建了两个示例草图,以演示如何简单地完成此过程。第一个草图使LED闪烁。第二张草图也会使同一引脚上的LED闪烁,并将“闪烁!”写入控制台。我们需要一个组合代码,使两个LED都闪烁,并将“闪烁!”写入控制台。

示例草图1:闪烁

此示例草图使连接到针脚12的LED闪烁。

/**结合ARDUINO草图:示例1闪烁*作者:TheGeekPub.com*更多ARDUINO教程://www.ergcommercial.com/arduino-tutorials/ */int LED_引脚=12;void setup(){pinMode(LED_引脚,输出);}void loop(){digitalWrite(LED_引脚,高);delay(1000);digitalWrite(LED_引脚,低);delay(1000);}

示例草图2:闪烁和控制台

这个示例草图也在同一个引脚12上闪烁一个LED,并输出单词“Blink!”转到串行控制台。

/**结合ARDUINO草图:示例2闪烁和控制台*作者:TheGeekPub.com*更多ARDUINO教程://www.ergcommercial.com/arduino-tutorials/ */int LED_引脚=12;void setup(){pinMode(LED_引脚,输出);Serial.begin(9600);}void loop(){digitalWrite(LED_引脚,高);Serial.println(“Blink!”);delay(1000);digitalWrite(LED_引脚,低);delay(1000);}

结合两个ARDUINO草图

现在,我们继续结合两个Arduino草图的实际过程。正如我们前面提到的,让我们先浏览一下代码,看看能找到哪些重复项。

马上,我们在两个草图上都有一个LED,都在针脚12上!更糟糕的是,两者共享相同的变量名。为了解决这个问题,让我们将LED移动到第一个草图上的针脚8。让我们通过简单的查找和替换来更改两个草图中整数的名称。让我们调用S1_LED_PIN和S2_LED_PIN。

查找并替换组合Arduino代码。

现在让我们继续讨论代码的实际组合。它将按照以下代码格式工作:

/**组合ARDUINO草图:演示代码组合*作者:geekpub.com*更多ARDUINO教程://www.ergcommercial.com/arduino-tutorials/ *//*----------------------------------------*样本草图1变量------------------------------*/*----------------------------------------*样本草图2变量-------------------------------*/void setup(){/*--------------------------------------*示例草图1设置代码--------------------------------------------*//*--------------------------------------*示例草图2设置代码---------------------------------------------*/}void loop(){/*--------------------------------------*示例草图1循环代码--------------------------------------------*/*--------------------------------------*示例草图2循环代码---------------------------------------------*/}

如您所见,我们需要将代码复制并粘贴到其他草图中的不同位置。我们的建议是将最简单和/或最小的草图移动到更大和/或更复杂的草图代码部分。

组合式阿杜伊诺草图

组合两个示例草图中的代码部分后,它们应该如下所示:

/**组合ARDUINO草图:示例组合*作者:TheGeekPub.com*更多ARDUINO教程://www.ergcommercial.com/arduino-tutorials/ *///组合变量int S1_LED_PIN=8;int S2_LED_引脚=12;void setup(){//绘制示例1代码pinMode(S1_LED_PIN,输出);//绘制示例2代码pinMode(S2_LED_PIN,输出);Serial.begin(9600);}void loop(){//绘制示例1代码digitalWrite(S1_LED_PIN,高);delay(1000);digitalWrite(S1_LED_PIN,低);delay(1000)//绘制示例2代码digitalWrite(S2_LED_PIN,高);Serial.println(“闪烁”);延迟(1000);数字写入(S2_LED_引脚,低);延迟(1000);}

一旦您在Arduino编程技能方面有所提高,您就可以了解您可以创造的效率。让我们把这两个组合的草图简化,使它们更有效。在本例中,我们将主要合并并消除额外的delay()语句。

/**组合ARDUINO草图:组合和压缩示例*作者:TheGeekPub.com*更多ARDUINO教程://www.ergcommercial.com/arduino-tutorials/ *///组合变量int S1_LED_PIN=8;int S2_LED_引脚=12;void setup(){//组合样本代码pinMode(S1_LED_引脚,输出);pinMode(S2_LED_引脚,输出);Serial.begin(9600);}void loop(){//组合样本代码digitalWrite(S1_LED_引脚,高);digitalWrite(S2_LED_引脚,高);delay(1000);digitalWrite(S1_LED_引脚,低);digitalWrite(S2_LED_引脚,低);Serial.println(“闪烁!”;delay(1000)})

这不会在每一段代码上都起作用,但大多数情况下会起作用。此外,尽管为了简单起见,我们在本示例代码中使用了delay()。当组合两个Arduino草图时,我们强烈建议使用毫秒()而不是延迟()只要可能。这是非常有益的,因为延迟是一个阻塞代码,将停止所有后台任务的运行。

下一步

现在,您可以继续学习下一个教程或返回教程索引。