当前位置: 首页 > news >正文

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

MENU

  • 注释
  • 变量
  • 条件语句
    • if语句
    • switch语句
  • 循环语句
    • for循环
    • while循环
  • 数组
  • 函数
    • 函数基本介绍
    • 常用函数介绍
  • 总结


注释

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

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

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

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


变量

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

数据类型 变量名;

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

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

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

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

// 初始化a为10
int a = 10;
// 修改a的值为20
a = 20;

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


条件语句

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


if语句

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

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

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

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

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

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

switch语句

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

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循环是一个控制结构,它允许重复执行一系列语句,具体次数由循环次数确定。

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

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

for (int i = 0; i < 10; i++) {Serial.println(i);
}

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


while循环

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

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

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

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

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


数组

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

type arrayName[arraySize];

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

int myArray[5];

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

int myArray[5] = {1, 2, 3, 4, 5};

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

int myArray[] = {1, 2, 3, 4, 5};

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

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

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

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

Arduino中还支持多维数组。

int myArray[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

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

1 2 3
4 5 6
7 8 9

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

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

函数

函数基本介绍

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

// 函数头
int add(int a, int b) {//函数体int sum = a + b;return sum;
}

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

int x = 3;
int y = 5;
// 调用函数
int z = add(x, y);

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

// 函数头
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灯的亮灭。

// 设置LED引脚
int led_pin = 2;void setup() {// 设定引脚为输出模式pinMode(led_pin, OUTPUT);
}void loop() {// 点亮LEDdigitalWrite(led_pin, HIGH);// 等待一段时间delay(1000);// 关闭LEDdigitalWrite(led_pin, LOW);// 等待一段时间delay(1000);
}

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


总结

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • IP协议及相关特性
  • WMS仓储系统的真正价值:从混乱到有序,亿发WMS如何重塑仓库管理
  • 算法:双指针题目练习
  • while循环及简单案例
  • Dubbo与SpringCloud的区别和优缺点
  • 1.熟悉接口测试(Postman工具)
  • 在Windows 7上安装Redis
  • 图说GPT网络结构(参数量与计算量估计)
  • Android Framework(六)WMS-窗口显示流程——窗口内容绘制与显示
  • 更换代理IP技术有哪些?
  • 如何在多台Linux虚拟机上安装和配置Kafka集群
  • 【FastAPI】服务器使用SSE实现客户端之间的广播和点对点功能
  • C#命令行参数解析库System.CommandLine介绍
  • vue3+ant design vue 中弹窗自定义按钮设置及以冒号为基准布局
  • 关于文件操作
  • 【笔记】你不知道的JS读书笔记——Promise
  • SpringCloud集成分布式事务LCN (一)
  • vue2.0项目引入element-ui
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • - 概述 - 《设计模式(极简c++版)》
  • 关于extract.autodesk.io的一些说明
  • 将回调地狱按在地上摩擦的Promise
  • 开源地图数据可视化库——mapnik
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 设计模式 开闭原则
  • 携程小程序初体验
  • 一些css基础学习笔记
  • 7行Python代码的人脸识别
  • 阿里云API、SDK和CLI应用实践方案
  • 阿里云服务器如何修改远程端口?
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​插件化DPI在商用WIFI中的价值
  • $ git push -u origin master 推送到远程库出错
  • (1)Jupyter Notebook 下载及安装
  • (1)虚拟机的安装与使用,linux系统安装
  • (C语言)fread与fwrite详解
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (编译到47%失败)to be deleted
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (四)opengl函数加载和错误处理
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • .gitattributes 文件
  • .net操作Excel出错解决
  • .NET连接数据库方式
  • [240727] Qt Creator 14 发布 | AMD 推迟 Ryzen 9000芯片发布
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [Android]创建TabBar
  • [BT]BUUCTF刷题第9天(3.27)
  • [C++]入门基础(1)
  • [CF407E]k-d-sequence
  • [FFmpeg学习]从视频中获取图片
  • [go] 策略模式