现在你已经完成了你的第一个程序,我们已经准备好继续下去并真正理解我们写了什么,它为什么工作,以及关于Arduino平台的代码结构的一些基本知识。

Arduino代码基础

Arduino将其程序称为“草图”。所以从现在开始,当我们提到我们正在创建的程序时,我们将使用这个术语。

大多数编程语言都有一个叫做s的东西ubroutines.有时这些子例程可以返回数据并被调用功能.在《sketch》世界中,几乎所有的东西都被称为功能

Arduinos在每个草图中都有两个必需的功能:设置()循环().你可以在你的草图中有尽可能多的功能,但你必须有这两个,否则草图将拒绝编译。

设置函数

setup()函数是存放只希望运行一次的代码的地方。这通常是设置配置设置、定义常量(一个永不改变的变量)或加载我们稍后将在loop()函数中使用的库。尽管应该注意,没有什么可以阻止您将常规代码放入setup()函数中。无论你在里面放了什么,它都会在Arduino启动的那一刻被执行,然后就再也不会执行了。

循环函数

loop()函数通常被认为是魔术发生的地方。从逻辑上讲,这是Arduino正在执行的主程序(或“应用程序”)。当您所编写的所有代码都完成时,循环函数将重新开始并重新执行它。无限地(或者直到你把它关掉)。

示例概要:设置和循环

让我们创建一个快速草图来给出一个基本的Arduino代码结构示例。我们会带上我们的“Hello World!”“设计并发展它。

在IDE中输入以下程序,按下上传按钮编译并发送到您的Arduino。

void setup(){//把安装代码放在这里,运行一次:Serial.begin(9600);系列。println(“你好设置代码!我运行一次!”);} void loop(){//把你的主代码放在这里,重复运行:println(“你好循环代码!我再说一遍!”);延迟(1000);}

上传完成后,再次打开串行控制台,您应该会看到以下输出。您可以看到设置代码在开始时运行了一次,但循环代码却一次又一次地运行。正如我们所料!

Arduino代码结构的其他注意事项

在继续我们教程的下一个步骤之前,还有一些关于Arduino代码结构的基本知识你应该知道。让我们快速看一下。

块注释

块注释用于在代码中写出您或其他人可以阅读的代码中以了解代码的工作原理或者为什么以这种方式编写。这只是一种简单的方式来沿途留下文档。

当你上传草图时,编译器会忽略块注释,不会发送给Arduino。因此它不占用Arduino中的任何内存。我们建议您创建尽可能多的评论。当多年后(对我来说甚至是几天后),你试着回忆你为什么用他们的方式做某件事时,你会惊奇地发现他们对你有多大的帮助。

块注释是用/ *一开始,a在每一行中,和*/结束它。

下面是一个添加了块注释的代码示例:

/* *块注释的例子。* *这条评论和代码是由Geek酒吧写的!manbext登录页这将被编译器忽略。*/ void setup(){//把你的setup代码放在这里,运行一次:Serial.begin(9600);系列。println(“你好设置代码!我运行一次!”);} void loop(){//把你的主代码放在这里,重复运行:println(“你好循环代码!我再说一遍!”);延迟(1000); }

包括

接下来要理解的是include语句。包含是从库或其他草图中引入额外代码的一种方法。这是在setup()函数中通过使用# include

Arduino生态系统中有许多库可以帮助您入门。很多时候,代码已经存在,可以做你想做的事情,而其他人已经写好了。例如,如果您想要控制一个伺服器,就没有理由编写代码来实现这一点,因为存在一个伺服器伺服图书馆你可以简单地包括,然后发送指令。

要在代码中包含服务器库,只需在setup()函数之前添加#include 即可。下面是一个示例草图:

/* *块注释的例子。* *这个草图包括servo.h函数在我们的代码中使用。*/ #include  void setup(){//把你的安装代码放在这里,运行一次:Serial.begin(9600);系列。println(“你好设置代码!我运行一次!”);} void loop(){//把你的主代码放在这里,重复运行:println(“你好循环代码!我再说一遍!”);延迟(1000);}

定义常量

常量只是不属于变量的变量!有时,我们需要在代码的单个位置定义一些东西,这些东西以后可以在代码的多个位置使用。这对于在测试中打开和关闭事物非常方便。或者为可能编写在许多设备上运行的代码进行特定配置。

例如,我们可以根据用户的需要编写一个草图,该草图被设计为使用10个或20个led。所以我们可以在草图开始时创建一个常量来定义有多少个led。另一个例子是定义pin在硬件上做什么。例如,你可以在Uno上定义引脚3,这是你将连接一个LED的地方。在setup()函数之前定义常量如下:

#define LED_COUNT 20 #define LED_PIN 3 void setup(){//把你的设置代码放在这里,运行一次:pinMode(LED_PIN, OUTPUT);//编译器将把LED_PIN替换为3}void loop(){//把你的主代码放在这里,以重复运行:}

记住,与变量不同的是,一旦代码被编译,常量不会也永远不会被改变。

Arduino IDE包含许多开箱即用的常量,您可以在代码中使用这些常量使事情变得更简单。比如定义大头针在哪里是输入把或一个输出销。在本例中,我们使用内置常量output将引脚3定义为输出引脚。

全局变量

我们现在要讲的最后一件事是全局变量.全局变量是可以在Arduino草图中的任何地方工作的变量,在函数内部或外部。大多数变量仅对定义它们的函数是局部的。

应该使用全局变量非常很少!

在这个示例代码中,我们将创建一个全局变量,名为my_global_variable的类型整数.在setup()函数中,我们将它定义为one(尽管有一种更快的方法,稍后您将学习到)。在loop()函数中,我们通过给它加1来不断增加它。

int my_global_variable;void setup(){//把安装代码放在这里,运行一次:Serial.begin(9600);my_global_variable = 1;} void loop(){//把你的主代码放在这里,重复运行:My_global_variable = My_global_variable + 1;}

串行将从1开始计数,直到您停止程序。

下一个步骤

现在,您已经熟悉了Arduino代码结构的基础知识,可以继续下一步,或者返回。