【雕爷学编程】Arduino 手册之变量修饰符 const

本文介绍了Arduino平台,重点讲解了变量的作用域(全局、局部和块级)以及const关键字的使用,强调了常量在编程中的重要性和优化内存的作用。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述
什么是Arduino?
Arduino 是一款开源的电子原型平台,它可以让你用简单的硬件和软件来创建各种创意的项目。无论你是初学者还是专家,Arduino 都能为你提供无限的可能性。你可以用 Arduino 来控制传感器、灯光、马达、机器人、物联网设备等等,只要你能想到的,Arduino 都能帮你实现。

如果你想了解更多关于 Arduino 的信息,你可以访问 Arduino 的官方网站,那里有丰富的资源和教程供你参考。你也可以加入 Arduino 的社区,和来自世界各地的爱好者、学生、设计师和工程师交流心得和经验。此外,你还可以使用 Arduino 的在线编程工具,在云端编写代码并上传到你的开发板上。

Arduino 是一个不断发展和创新的平台,它有着广泛的应用领域和潜力。这里希望本手册能激发你对 Arduino 的兴趣和热情,让你享受 Arduino 带来的创造力和乐趣

在这里插入图片描述

维基百科的定义
Arduino 是一个开源嵌入式硬件平台,用来供用户制作可交互式的嵌入式项目。此外 Arduino 作为一个开源硬件和开源软件的公司,同时兼有项目和用户社群。该公司负责设计和制造Arduino电路板及相关附件。这些产品按照GNU宽通用公共许可证(LGPL)或GNU通用公共许可证(GPL)许可的开源硬件和软件分发的,Arduino 允许任何人制造 Arduino 板和软件分发。 Arduino 板可以以预装的形式商业销售,也可以作为 DIY 套件购买。

Arduino 2005 年时面世,作为意大利伊夫雷亚地区伊夫雷亚互动设计研究所的学生设计,目的是为新手和专业人员提供一种低成本且简单的方法,以建立使用传感器与环境相互作用的装置。初学者和爱好者可用Arduino制造传感器、简单机器人、恒温器和运动检测器等装置。

Arduino 这个名字来自意大利伊夫雷亚的一家酒吧,该项目的一些创始人过去常常会去这家酒吧。 酒吧以伊夫雷亚的 Arduin(Arduin of Ivrea)命名,他是伊夫雷亚边疆伯爵,也是 1002 年至 1014 年期间的意大利国王。

在这里插入图片描述

十一、Arduino变量的作用域 variable scope
在Arduino编程中,变量的作用域指的是变量在程序中可以被访问的范围。变量的作用域决定了它的可见性和生命周期。理解变量作用域对于编写清晰、可维护的代码至关重要。

Arduino变量的作用域有以下几种:
1)全局作用域(Global Scope):在函数之外声明的变量具有全局作用域,可以在整个程序中的任何位置被访问。这些变量在程序的生命周期内都是有效的。全局变量可以被多个函数共享,因此非常适合存储需要在多个函数中使用的数据。

2)局部作用域(Local Scope):在函数内部声明的变量具有局部作用域,只能在声明它们的函数内部被访问。这些变量在函数执行时创建,并在函数执行完毕后被销毁。局部变量通常用于存储临时数据或函数内部使用的数据。

3)块作用域(Block Scope):块作用域指的是由花括号({})包围的代码块内部声明的变量的作用域。这些变量只能在它们所在的块内部被访问,包括函数内部的if语句、for循环等。块作用域变量的生命周期仅限于其所在的块。

在应用场景上,你可以根据变量的作用域来选择合适的变量类型。全局变量适用于需要在多个函数中共享数据的情况,而局部变量则适用于函数内部的临时数据存储。通过正确使用变量的作用域,可以提高程序的可读性、可维护性和性能。

Arduino变量修饰符 const
Arduino变量修饰符const是一种用于声明变量的关键字,它表示该变量的值是常量,即不可改变的。const修饰符的作用是告诉编译器该变量的值在编译时就已经确定,而不是在运行时动态分配。这样可以节省内存空间,提高程序的效率,以及避免意外修改变量的值导致的错误。

const修饰符通常用于以下场景:
1)声明常量:const关键字用于声明一个常量,即一个在程序执行期间不可更改的值。在Arduino中,常量通常用于存储不会改变的参数、固定的配置或者预定义的常量值。

2)内存优化:使用const关键字可以帮助优化内存使用。常量值在编译时就确定了,编译器可以将这些常量值直接嵌入到生成的机器代码中,而不需要为其分配额外的内存空间。

3)类型安全和可读性:通过将变量声明为const,可以提供类型安全性,并防止在程序中意外修改这些变量的值。同时,使用const还可以增加代码的可读性,使得其他开发者能够清楚地了解这些变量的用途和约束。

使用const修饰符时,需要注意以下事项:
1)const修饰符只能用于初始化时就已经赋值的变量,不能用于后期赋值的变量。
2)const修饰符可以用于指针类型的变量,但要注意区分指针本身是否为常量,以及指针所指向的内容是否为常量。例如,const int *p表示指针p可以改变,但p所指向的内容是常量;int * const p表示指针p是常量,但p所指向的内容可以改变;const int * const p表示指针p和p所指向的内容都是常量。
3)const修饰符可以用于函数的参数和返回值,表示传递或返回的数据是常量,不会被函数修改。这样可以提高函数的可靠性和安全性。

以下是Arduino变量修饰符const的几个实际运用程序案例:

案例一:使用const定义数学常数,并计算圆周率

// 定义一个const类型的全局变量PI,表示圆周率
const float PI = 3.14159;

void setup() {
  // 初始化串口通信,并设置波特率为9600
  Serial.begin(9600);
}

void loop() {
  // 定义一个局部变量r,表示圆的半径
  int r = 10;
  // 定义一个局部变量c,表示圆的周长,并使用PI计算
  float c = 2 * PI * r;
  // 在串口监视器上打印圆的周长
  Serial.print("The circumference of the circle is ");
  Serial.println(c);
  // 延迟一秒
  delay(1000);
}

案例二:使用const定义错误信息,并在出错时显示

// 定义一个const类型的全局数组errorMessages,存储错误信息
const char* errorMessages[] = {"Invalid input", "Divide by zero", "Overflow", "Underflow"};

void setup() {
  // 初始化串口通信,并设置波特率为9600
  Serial.begin(9600);
}

void loop() {
  // 定义一个局部变量x,表示被除数,并从串口读取输入
  int x = Serial.parseInt();
  // 定义一个局部变量y,表示除数,并从串口读取输入
  int y = Serial.parseInt();
  // 定义一个局部变量z,表示商,并尝试计算
  int z = 0;
  // 定义一个局部变量errorFlag,表示是否出错,并初始化为false
  bool errorFlag = false;
  // 定义一个局部变量errorCode,表示错误代码,并初始化为0
  int errorCode = 0;
  
  // 如果y为0,则出错,并设置错误代码为1
  if (y == 0) {
    errorFlag = true;
    errorCode = 1;
  }
  
  // 如果没有出错,则尝试计算z,并检查是否溢出或下溢
  if (!errorFlag) {
    z = x / y;
    // 如果z大于最大整数,则出错,并设置错误代码为2
    if (z > INT_MAX) {
      errorFlag = true;
      errorCode = 2;
    }
    // 如果z小于最小整数,则出错,并设置错误代码为3
    if (z < INT_MIN) {
      errorFlag = true;
      errorCode = 3;
    }
  }
  
  // 如果出错,则在串口监视器上显示错误信息,否则显示计算结果
  if (errorFlag) {
    Serial.print("Error: ");
    Serial.println(errorMessages[errorCode]);
  }
  else {
    Serial.print("The result is ");
    Serial.println(z);
  }
  
  // 延迟一秒
  delay(1000);
}

案例三:使用const定义映射表,并根据输入输出对应的值

// 定义一个const类型的全局数组mapTable,存储映射表
const int mapTable[] = {0, 1, 2, 4, 8, 16, 32, 64, 128, 256};

void setup() {
  // 初始化串口通信,并设置波特率为9600
  Serial.begin(9600);
}

void loop() {
  // 定义一个局部变量x,表示输入的索引,并从串口读取输入
  int x = Serial.parseInt();
  // 定义一个局部变量y,表示输出的值,并初始化为0
  int y = 0;
  
  // 如果x在映射表的范围内,则根据映射表赋值给y,否则赋值为-1
  if (x >= 0 && x < sizeof(mapTable) / sizeof(int)) {
    y = mapTable[x];
  }
  else {
    y = -1;
  }
  
  // 在串口监视器上打印输出的值
  Serial.print("The output is ");
  Serial.println(y);
  
  // 延迟一秒
  delay(1000);
}

案例四:存储常量参数:

const int SENSOR_PIN = A0;  // 声明一个常量表示传感器引脚

void setup() {
  pinMode(SENSOR_PIN, INPUT);
  // ...
}

void loop() {
  int sensorValue = analogRead(SENSOR_PIN);
  // 对传感器值进行处理
  // ...
  // ...
}

这个案例中,我们将传感器引脚的值声明为一个const常量SENSOR_PIN。通过使用const修饰符,可以确保传感器引脚的值在程序执行期间不会被修改,并且可以在代码中重复使用该常量值。

案例五:配置参数设置:

const int LED_PIN = 9;  // LED引脚
const int DELAY_TIME = 1000;  // 延时时间

void setup() {
  pinMode(LED_PIN, OUTPUT);
  // ...
}

void loop() {
  digitalWrite(LED_PIN, HIGH);
  delay(DELAY_TIME);
  digitalWrite(LED_PIN, LOW);
  delay(DELAY_TIME);
}

在这个案例中,我们使用const关键字声明了LED引脚和延时时间的常量。这些常量表示LED的连接引脚和LED亮灭的延时时间。通过将这些参数声明为常量,可以方便地进行配置和修改,同时提高代码的可读性。

案例六:字符串常量:

const char GREETING[] = "Hello, Arduino!";  // 字符串常量

void setup() {
  Serial.begin(9600);
  // ...
}

void loop() {
  Serial.println(GREETING);
  // ...
}

在这个案例中,我们使用const关键字声明了一个字符串常量GREETING。通过将字符串声明为常量,可以确保字符串的内容不会被修改。在这个示例中,我们将字符串常量发送到串口,以便在串口监视器上显示出来。

这些案例展示了在Arduino中使用const变量修饰符的实际应用场景。通过使用const关键字,可以声明常量参数、配置参数和字符串常量,从而提高代码的可读性、可维护性,并帮助优化内在Arduino中,const是一个变量修饰符,用于声明常量。

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
雕爷学编程Arduino动手做寻迹的实验可以使用TCRT5000红外反射光电开关寻迹传感器模块。这个传感器模块可以通过检测周围的光反射来进行寻迹操作。你可以将这个模块连接到mBot的主控板mCore V1.5的RJ25接口上,因为mBot的主控板兼容Arduino系统,所以你可以使用Arduino编程语言来控制mBot进行寻迹操作。请参考【Arduino】168种传感器模块系列实验中的实验六十六,该实验详细介绍了如何使用TCRT5000红外反射光电开关寻迹传感器模块进行寻迹。祝你成功完成实验!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【雕爷学编程Arduino动手做(194)---makeblock mbot 主控板2](https://blog.csdn.net/weixin_41659040/article/details/132141677)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [【雕爷学编程Arduino动手做(65)---红外寻迹传感器](https://blog.csdn.net/weixin_41659040/article/details/106604080)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值