物联网之Arduino编程语言、条件语句、循环语句、变量、数组、函数


注释

当编写代码时,注释(comments)非常重要。注释是对代码的解释和说明,且对于其他开发者或者自己日后需要修改代码的时候,都非常有帮助。注释可以提高代码的可读性和可维护性,并且可以帮助自己更好地理解代码。
注释由双斜线//或者斜线星号/*...*/来表示。单行注释以两个斜线开头,多行注释则以斜线星号开头,以星号斜线结尾。

cpp 复制代码
// 这是一个单行注释

/*
这是一个多行注释
它可以跨越多行
*/

注释可以用来解释代码的功能,算法或者实现细节。
1、函数或者方法的用途
2、参数的说明
3、返回值的说明
4、代码实现的说明
5、代码的限制或者假设条件
6、作者信息、创建时间、修改时间

注释应该尽可能的清晰、简洁和明了,同时避免无用的注释,以免给代码带来混淆和干扰。注释应该随着代码一起更新,以确保注释和代码的一致性。


变量

当编写程序时,变量是一个非常基本的概念。一个变量可以存储一个值,这个值可以是数字、字符串、布尔值、对象等。
在Arduino编程语言中,变量需要使用前声明。

cpp 复制代码
数据类型 变量名;

数据类型指定变量可以存储的数据类型。
1、int: 整数类型,占用2个字节,可以表示范围从-3276832767之间的整数。
2、float: 浮点数类型,占用4个字节,可以表示小数。
3、char: 字符类型,占用1个字节,可以表示一个字符。
4、bool: 布尔类型,占用1个字节,只有两个值truefalse

变量名是标识符,命名规则为字母、数字、下划线的组合,第一个字符不能是数字。

cpp 复制代码
// 声明一个名为a的整型变量
int a;
// 声明一个名为b的浮点型变量,并初始化为3.14
float b = 3.14;
// 声明一个名为c的字符型变量,并初始化为字符'A'
char c = 'A';
// 声明一个名为d的布尔型变量,并初始化为true
bool d = true;

变量在程序中可以被赋值或者修改。

cpp 复制代码
// 初始化a为10
int a = 10;
// 修改a的值为20
a = 20;

除上述基本数据类型外,Arduino还支持其他的数据类型,如字符串类型String,数组类型等。在使用变量时,需要根据需求选择合适的数据类型,避免浪费内存。


条件语句

当需要根据某个条件来执行不同的代码时,就需要使用条件语句。在Arduino编程语言中,常见的条件语句有if和switch。


if语句

if语句是最基本的条件语句。

cpp 复制代码
if (condition) {
  // if条件成立时要执行的代码
}

其中,condition是一个条件表达式,如果这个条件表达式的值为真,则执行花括号中的代码块。
如果需要在条件不成立时执行代码,则可以添加else语句。

cpp 复制代码
if (condition) {
	// if条件成立时要执行的代码
} else {
	// if条件不成立时要执行的代码
}

当然,也可以在else语句后面添加一个if语句,从而实现多个条件判断。这个语法结构被称为else if

cpp 复制代码
if (condition1) {
  // if条件1成立时要执行的代码
} else if (condition2) {
  // if条件2成立时要执行的代码
} else {
  // 如果以上条件都不成立,则执行这里的代码
}

switch语句

switch语句也是一种条件语句,通常用于比较一个变量与一系列常量值。

cpp 复制代码
switch (variable) {
  case value1:
    // 如果variable的值等于value1,则执行这里的代码
    break;
  case value2:
    // 如果variable的值等于value2,则执行这里的代码
    break;
  default:
    // 如果variable的值不等于任何一个case的值,则执行这里的代码
    break;
}

在switch语句中,variable是要进行比较的变量,而case是常量值。如果variable的值等于某个case的值,则执行该case对应的代码块,并且在代码块末尾添加break语句,以防止执行其他的case。如果variable的值不等于任何一个case的值,则执行default中的代码块。需要注意的是,在switch语句中,每个case的值必须是常量,且不可重复。
总的来说,if语句和switch语句都是用于控制程序执行流程的条件语句,开发者可以根据具体情况选择使用哪种语句。


循环语句

当需要重复执行一段代码时,就需要用到循环语句。在Arduino中,有两种主要的循环语句for循环和while循环。


for循环

for循环是一个控制结构,它允许重复执行一系列语句,具体次数由循环次数确定。

cpp 复制代码
for (初始化表达式; 布尔表达式; 更新表达式) {
  // 代码块
}

初始化表达式:在循环开始时执行一次,通常用于初始化计数器。
布尔表达式:在每次迭代开始前计算,如果结果为true,则执行循环体语句,否则退出循环。
更新表达式:在每次迭代结束后执行,通常用于更新计数器。

cpp 复制代码
for (int i = 0; i < 10; i++) {
  Serial.println(i);
}

在例子中,初始化表达式初始化了计数器i为0,布尔表达式检查i是否小于10,更新表达式将i增加1。在每次迭代中,计数器i的值都会被输出。


while循环

while循环是另一种重复执行语句块的方法。它会在条件为true时重复执行代码块。

cpp 复制代码
while (布尔表达式) {
  // 代码块
}

while循环只由一个条件表达式组成,当这个表达式为true时,执行循环体语句。在每次循环执行后,条件表达式都会被重新计算。如果条件表达式为false,则跳过循环体语句,直接执行循环后面的代码。

cpp 复制代码
int i = 0;

while (i < 10) {
  Serial.println(i);
  i++;
}

在例子中,初始化变量i的值为0。while循环的条件表达式检查变量i是否小于10。只要条件为true,循环就会一直执行,每次将变量i的值增加1。在每次循环中,变量i的值都会被输出。
总体来说,for循环适用于知道循环次数的情况,而while循环适用于不知道循环次数的情况。


数组

数组是一种用于存储多个值的数据类型。数组的每个元素都有一个唯一的索引,可以使用这个索引来访问数组中的元素。

cpp 复制代码
type arrayName[arraySize];

其中,type是数组中元素的数据类型,arrayName是数组的名称,arraySize是数组的大小。

cpp 复制代码
int myArray[5];

代码定义一个包含5个整数的数组,可以使用myArray[0]到myArray[4]访问这些元素。
可以在定义数组时初始化数组。

cpp 复制代码
int myArray[5] = {1, 2, 3, 4, 5};

代码定义一个包含5个整数的数组,并将其初始化为1、2、3、4、5。
也可以使用以下方式初始化数组。

cpp 复制代码
int myArray[] = {1, 2, 3, 4, 5};

代码定义一个包含5个整数的数组,并将其初始化为1、2、3、4、5。
可以使用下标访问数组元素,下标从0开始。

cpp 复制代码
int myArray[5] = {1, 2, 3, 4, 5};
// 将x的值设置为数组中下标为2的元素,即3。
int x = myArray[2];

可以使用循环遍历数组中的所有元素。

cpp 复制代码
int myArray[5] = {1, 2, 3, 4, 5};

for (int i = 0; i < 5; i++) {
  // 打印数组中的每个元素
  Serial.println(myArray[i]);
}

Arduino中还支持多维数组。

cpp 复制代码
int myArray[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

代码定义一个3行3列的二维数组。

cpp 复制代码
1 2 3
4 5 6
7 8 9

可以使用两个下标来访问数组中的元素。

cpp 复制代码
int myArray[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
// 将x的值设置为数组中第2行第3列的元素,即6。
int x = myArray[1][2];

函数

函数基本介绍

当程序中需要执行某个特定任务时,函数非常有用。函数可以包含一些代码块,这些代码块可以在程序的其他地方多次调用。在Arduino编程语言中,函数包含一个函数头和一个函数体。函数头包含函数名称和参数列表,函数体包含一些要执行的代码。

cpp 复制代码
// 函数头
int add(int a, int b) {
  //函数体
  int sum = a + b;
  
  return sum;
}

函数的名称是add,它有两个参数,分别是a和b,函数体包含a和b相加的操作,最后通过return返回结果。
在程序中调用函数。

cpp 复制代码
int x = 3;
int y = 5;
// 调用函数
int z = add(x, y);

在示例中,将x和y作为参数传递给add函数,该函数返回它们的和,最后将结果存储在z变量中。
函数的参数也可以是其他类型的数据,例如字符串、浮点数等等。在Arduino编程语言中,函数也可以没有参数,也可以没有返回值。

cpp 复制代码
// 函数头
void sayHello() {
// 函数体
  Serial.println("Hello World!");
}

函数的名称是sayHello,它没有参数和返回值。函数体包含一条输出语句,它将字符串"Hello World!"输出到串行监视器中。
函数的使用可以让代码更加清晰、易读和易于维护。通过将代码块封装到函数中,可以使代码更加模块化,也可以避免在多个地方重复编写相同的代码。在编写代码时,应该尽可能地使用函数,以便使代码更加可读、易于维护和可扩展。


常用函数介绍

使用Arduino进行编程时,有许多内置函数可用。这些函数可以更轻松地编写程序,处理输入和输出,控制逻辑流和实现其他功能。


01、pinMode(pin, mode): 用于配置数字引脚的输入或输出模式。pin是数字引脚的编号,mode是要设置的模式(输入或输出)。
02、digitalWrite(pin, value): 用于在数字引脚上写入数字值(HIGH或LOW)。pin是数字引脚的编号,value是要写入的值。
03、digitalRead(pin): 用于读取数字引脚上的数字值(HIGH或LOW)。pin是数字引脚的编号。
04、analogRead(pin): 用于读取模拟引脚上的模拟值(0-1023)。pin是模拟引脚的编号。
05、analogWrite(pin, value): 用于在支持PWM输出的数字引脚上输出模拟值(0-255)。pin是数字引脚的编号,value是要输出的值。
06、delay(ms): 用于在程序中创建暂停(延迟)时间。ms是要延迟的毫秒数。
07、millis(): 返回自启动以来的毫秒数,可以用于时间跟踪和计时器。
08、Serial.begin(baud): 用于初始化串口通信,其中baud是波特率。
09、Serial.print(data): 用于将数据打印到串口监视器。data可以是数字,字符串或其他数据类型。
10、Serial.available(): 用于检查是否有数据可以从串口读取。


这些函数只是Arduino可用的众多函数中的一部分。熟悉这些常用函数可以帮助我们更轻松地编写程序,并为实现特定功能提供了有用的工具。
下面是一个简单的实例代码,演示如何控制一个LED灯的亮灭。

cpp 复制代码
// 设置LED引脚
int led_pin = 2;

void setup() {
  // 设定引脚为输出模式
  pinMode(led_pin, OUTPUT);
}

void loop() {
  // 点亮LED
  digitalWrite(led_pin, HIGH);
  // 等待一段时间
  delay(1000);
  // 关闭LED
  digitalWrite(led_pin, LOW);
  // 等待一段时间
  delay(1000);
}

代码段中,首先定义一个整型变量led_pin,表示连接LED灯的引脚。在setup()函数中,我们将该引脚设定为输出模式,然后在loop()函数中交替点亮和关闭LED灯,并在两次操作之间等待1秒钟的时间。


总结

本文介绍Arduino的基本概念和编程语言,并演示如何通过Arduino板上的数字和模拟引脚来控制硬件设备。对于初学者而言,理解这些基础知识是开始进行更高级项目的基础。如果想进一步深入了解Arduino,可以参考官方文档或者更高级别的教程。

相关推荐
m0_6312704032 分钟前
标准C++(二)
开发语言·c++·算法
沫刃起35 分钟前
Codeforces Round 972 (Div. 2) C. Lazy Narek
数据结构·c++·算法
GZM8888882 小时前
配置VS Code以进行C/C++编程:深入探讨与实操指南
c++
martian6652 小时前
学懂C++(六十):C++ 11、C++ 14、C++ 17、C++ 20新特性大总结(万字详解大全)
开发语言·c++·c++20
小灰灰爱代码3 小时前
C++——判断year是不是闰年。
数据结构·c++·算法
小灰灰爱代码3 小时前
C++——求3个数中最大的数(分别考虑整数、双精度数、长整数数的情况),用函数重载方法。
数据结构·c++·算法
爱coding的橙子4 小时前
CCF-CSP认证考试准备第十七天
数据结构·c++·算法
程序猿阿伟5 小时前
《C++移动语义:解锁复杂数据结构的高效之道》
数据结构·c++·html
594h26 小时前
PAT 甲级 1002题
数据结构·c++·算法
梅双单片机7 小时前
【源代码+仿真+原理图+技术文档+演示录屏+软件】基于单片机的厨房监控系统的设计与实现
单片机·嵌入式硬件