跳到主要内容

Arduino 全局变量与局部变量

在Arduino编程中,变量是存储数据的基本单元。根据变量的作用域,我们可以将其分为全局变量局部变量。理解这两种变量的区别及其使用场景,对于编写高效、可维护的代码至关重要。

什么是全局变量与局部变量?

全局变量

全局变量是在程序的最外层(即所有函数之外)声明的变量。它们在整个程序中都可以访问,包括在 setup()loop() 函数中。全局变量的生命周期从程序开始运行到程序结束。

局部变量

局部变量是在函数内部声明的变量。它们只能在声明它们的函数内部访问,并且在函数执行完毕后会被销毁。局部变量的生命周期仅限于函数的执行期间。

全局变量与局部变量的区别

特性全局变量局部变量
作用域整个程序仅在声明它的函数内部
生命周期程序运行期间函数执行期间
内存分配静态内存栈内存
访问权限所有函数均可访问仅在声明它的函数内部可访问

代码示例

全局变量示例

cpp
int globalVar = 10;  // 全局变量

void setup() {
Serial.begin(9600);
Serial.println(globalVar); // 输出: 10
}

void loop() {
globalVar = 20; // 修改全局变量的值
Serial.println(globalVar); // 输出: 20
delay(1000);
}

在这个示例中,globalVar 是一个全局变量,它在 setup()loop() 函数中都可以访问和修改。

局部变量示例

cpp
void setup() {
Serial.begin(9600);
int localVar = 5; // 局部变量
Serial.println(localVar); // 输出: 5
}

void loop() {
// localVar 在这里不可访问
int localVar = 15; // 新的局部变量
Serial.println(localVar); // 输出: 15
delay(1000);
}

在这个示例中,localVar 是一个局部变量,它只能在 setup()loop() 函数内部访问。每次函数执行时,局部变量都会被重新创建。

实际应用场景

全局变量的应用

全局变量通常用于存储需要在多个函数之间共享的数据。例如,在控制LED亮度的项目中,可以使用全局变量来存储当前的亮度值,以便在 setup()loop() 函数中都能访问和修改。

cpp
int brightness = 0;  // 全局变量,存储LED亮度值

void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
analogWrite(LED_BUILTIN, brightness);
brightness = (brightness + 10) % 255; // 逐渐增加亮度
delay(100);
}

局部变量的应用

局部变量通常用于临时存储数据,例如在函数内部进行计算或处理。例如,在计算两个数的平均值时,可以使用局部变量来存储中间结果。

cpp
float calculateAverage(int a, int b) {
float sum = a + b; // 局部变量,存储两个数的和
return sum / 2; // 返回平均值
}

void setup() {
Serial.begin(9600);
float avg = calculateAverage(10, 20); // 调用函数计算平均值
Serial.println(avg); // 输出: 15.00
}

void loop() {
// 空循环
}

总结

  • 全局变量在整个程序中都可以访问,适合存储需要在多个函数之间共享的数据。
  • 局部变量仅在声明它们的函数内部可访问,适合用于临时存储数据或进行局部计算。

正确使用全局变量和局部变量可以提高代码的可读性和可维护性。在实际项目中,应根据变量的作用域和生命周期需求来选择合适的变量类型。

附加资源与练习

练习

  1. 修改上面的全局变量示例,使其在 loop() 函数中每隔1秒将 globalVar 的值增加10,并在串口监视器中输出结果。
  2. 编写一个函数,使用局部变量计算三个数的平均值,并在 setup() 函数中调用该函数并输出结果。

进一步学习

  • 了解Arduino中的静态变量static),它们与局部变量类似,但生命周期与全局变量相同。
  • 探索如何在Arduino中使用数组结构体来存储和操作复杂数据。

通过不断练习和探索,你将更加熟练地掌握Arduino编程中的变量使用技巧。