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

devtools/2024/9/19 21:17:56/ 标签: 嵌入式硬件, 物联网, c++

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,可以参考官方文档或者更高级别的教程。


http://www.ppmy.cn/devtools/114266.html

相关文章

【代码】使用c#实现串口通信的基础模板

一、分享代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;using System.IO.Ports; using…

强制转换数据类型

1.转换为String 强制类型转换 指将一个数据类型强制转换为其它数据类型 类型转换主要指&#xff0c;将其它数据类型转换为 String Number Boolean 将其他数据类型转换为String 方法一&#xff1a; 调用被转换数据类型的toString()方法; 该方法不会影响到原变量&#…

信刻光盘安全隔离与信息交换系统

随着各种数据传输、储存技术、信息技术的快速发展&#xff0c;保护信息安全是重中之重。军工、政府、部队及企事业单位等利用A网与B网开展相关工作已成为不可逆转的趋势。针对于业务需要与保密规范相关要求&#xff0c;涉及重要秘密信息&#xff0c;需做到安全的物理隔离&#…

高中数学:立体几何-平面的定义与公理

文章目录 一、平面定义及画法1、定义2、表示方法 二、公理1、公理12、公理23、公理3 一、平面定义及画法 1、定义 平面是向四周无限延展的。 2、表示方法 我们常用矩形的直观图&#xff0c;即平行四边形表示平面&#xff0e; 我们常用希腊字母α&#xff0c;β&#xff0c…

mqtt 应用场景(gpt4)

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的消息发布/订阅协议&#xff0c;主要设计用于低带宽、不可靠或不稳定的网络环境。它具有高效的带宽利用率和较低的延迟&#xff0c;特别适合物联网&#xff08;IoT&#xff09;等需要远程监控、数…

内存dump文件分析

目录 dumpsneak攻击步骤&#xff1a; dump 打开Volatility工具目录&#xff0c;C:\Users\Administrator\Desktop\应急工具集\volatility 打开运行输入volatility.exe -f 文件 imageinfo&#xff08;花费比较长的时间&#xff0c;对于这个mem文件&#xff0c;可以使用Win2012…

Android AlertDialog圆角背景不生效的问题

一行解决: window?.setBackgroundDrawableResource(android.R.color.transparent) 原文件: /*** Created by Xinghai.Zhao* 自定义选择弹框*/ SuppressLint("InflateParams", "MissingInflatedId") class CustomDialog(context: Context?) : AlertDia…

Mini-Omni:语言模型可以在流中听、说和思考

读论文《Mini-Omni: Language Models Can Hear, Talk While Thinking in Streaming》 目前比较火的一篇论文&#xff0c;分享给大家 论文地址&#xff1a;2408.16725v2 (arxiv.org) 项目地址&#xff1a;https://github.com/gpt-omni/mini-omni 1. 引言 近年来&#xff0c…

【mysql面试题】mysql复习之常见面试题(一)

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

如何在微信小程序中实现WebSocket连接

微信小程序作为一种全新的应用形态&#xff0c;凭借其便捷性、易用性受到了广大用户的喜爱。在实际开发过程中&#xff0c;实时通信功能是很多小程序必备的需求。WebSocket作为一种在单个TCP连接上进行全双工通信的协议&#xff0c;能够实现客户端与服务器之间的实时通信。本文…

Openssl升级

1、下载 openssl openssl官方下载地址&#xff1a;https://www.openssl.org/source/ [rootlocalhost ~]# wget https://github.com/openssl/openssl/archive/OpenSSL_1_1_1d.tar.gz 2、编译安装 [rootlocalhost ~]# ./config --prefix/usr/local/openssl // 指定安装路径 …

如何切换淘宝最新镜像源(npm)【2024版】

在使用 Node.js 和 npm 进行开发时&#xff0c;大家通常会遇到 npm 源速度较慢的问题。特别是当你需要安装大量依赖时&#xff0c;npm 官方源的速度可能不尽如人意。幸运的是&#xff0c;淘宝提供了一个更快速的 npm 镜像源&#xff0c;可以让你更快地下载和安装包。本文将介绍…

保护您的隐私:隐藏 IP 地址的重要性

在当今的数字时代&#xff0c;我们的在线隐私和安全变得比以往任何时候都更加重要。浏览互联网时保护自己的一种方法是隐藏您的 IP 地址。 但是为什么要隐藏您的 IP 地址以及如何有效地做到这一点&#xff1f; 隐藏您的 IP 地址有助于保护您的在线匿名性。您的 IP 地址就像您的…

文心智能体 恐怖类游戏

智能体名称&#xff1a;孤岛惊魂 链接&#xff1a;文心智能体平台AgentBuilder | 想象即现实 (baidu.com)https://agents.baidu.com/center/agent/preview/MFhBvA0K9EXXVdjHCcUumadWmWesKvw2 角色与目标设定 &#x1f9d1;&#x1f3fb; 角色&#xff1a;孤岛惊魂是一位虚拟…

龙芯+FreeRTOS+LVGL实战笔记(新)——08RGB闪烁灯

本专栏是笔者另一个专栏《龙芯+RT-Thread+LVGL实战笔记》的姊妹篇,主要的区别在于实时操作系统的不同,章节的安排和任务的推进保持一致,并对源码做了完善与优化,各位可以先到本人主页下去浏览另一专栏的博客列表(目前已撰写36篇,图1所示),再决定是否订阅。此外,也可以…

前端-CDN的理解及CDN一些使用平台

目录 1.CDN的概念 &#xff08;1&#xff09; 分发服务系统 &#xff08;2&#xff09;均衡负荷系统 &#xff08;3&#xff09;运营管理系统 &#xff08;4&#xff09;缓存系统 &#xff08;5&#xff09;支撑系统 2.CDN的基本工作原理 3.CDN使用缓存资源过程 4.CDN…

【已解决】【Windows】【Linux】大数据开发环境配置

常见的虚拟机软件主要有两款 VMware 和 VirtualBox 。VMware是商付费软件&#xff0c;而VirtualBox是免费软件&#xff0c;对于一般用用的话VirtualBox基本可以应付大多数情况了。 步骤&#xff1a; 安装VirtualBox下载镜像在VirtualBox中导入镜像进行适当参数调整 本机电脑…

TCP客户端编码和解码处理:发送和接收指定编码消息

文章目录 引言基于Netty实现TCP客户端Netty发送GBK编码指令Netty接收GBK编码基于Channel发送指令基于ChannelHandlerContext发送指令:建立连接时发送登陆指令开启日志,查看报文信息基于ChannelInboundHandlerAdapter进行业务逻辑处理原生API实现TCP客户端基于DataOutputStrea…

普罗米修斯监控

目录 概念 部署方法 1. 二进制&#xff08;源码包&#xff09; 2. 部署在k8s集群当中&#xff0c;用pod形式部署 概念 prometheus是开源的系统监控和告警。在k8s分布式的容器化管理系统当中&#xff0c;一般都是搭配prometheus来进行监控。它是服务监控系统&#xff0c;也…

【Java】多线程前置知识 初识Thread

多线程前置知识 & 初识Thread 冯诺依曼体系结构初步认识存储设备CPU指令 操作系统初识操作系统内核态和用户态 进程/任务进程是什么进程的管理进程的调度虚拟内存地址进程间的通信 线程线程的出现线程是什么线程可能出现的问题线程与进程的联系和区别 协程初识Thread类Thre…