如何在 setup() 和 loop() 之间传递信息?#

使用文件级的全局变量可以文件内传递(共享)信息。

setup() 和 loop() 函数被包含在 .ino 的 sketch 文件中,这是两个函数定义,它们将在另一处的 main() 函数内被调用执行。

但是,setup() 只会被调用一次, loop() 会被反复调用,所以只能从 setup() 往 loop() 中传信息;反之,从 loop() 往 setup() 传信息没有意义。

setup()外面对变量赋值为什么报错?#

// sketch.ino
int a;
a = 1;
void setup() {
  // put your setup code here, to run once:
}

void loop() {
  // put your main code here, to run repeatedly:
}

报错:

error: 'a' does not name a type
 a = 1;
 ^

exit status 1

Compilation error: 'a' does not name a type

原因分析

sketch.ino 文件是一个函数定义文件,只能做两件事:

  1. 定义主要函数: setup(), loop(), 这是 arduino 函数的关键函数。当然,也可以定义其它更多子函数。

  2. 定义文件级的变量。

sketch.ino 文件不能写如赋值或其它表达式操作。于是,需要将 a=1 移入函数的内部。

修改方法1:

int a=1;   #创建时赋值

修改方法2:

int a;
void setup() {
  // put your setup code here, to run once:
  a = 1;
}