arduino入门1

article/2025/9/22 23:25:54

文章目录

编程并不是一间很难的事,你可这样理解:
在编程中,你就像是一个老板arduino就像是你的员工,你可指挥arduino去做你想让它做的事。当然,要做的事得在员工的工作范围之内。
arduino这位员工就是一块电路板,他的所有工作任务的方法都存在他的芯片里,若果你像让做事,你大声喊当让没用。对于arduino这位“没有耳朵”的员工,想命令它工作,就要把安排给他的工作任务和完成的方法写进他的芯片里。
但是还有一个问题:这位员工虽然不是火星来得,但它还是不懂人类的语言,他有自己的语言,那就是arduino语言。这时你可能要发火了,你的员工听不仅听不懂你的口头命令,还不能按照你的描述任务(用你语言)去做事。其实arduino按自己的语言描述的任务工作当然不是因为他是一个高傲的员工,因为arduino语言描述的人武对它来说更详细,在工作中能把任务做的更好。他能一丝不苟的按arduino语言描述要求去做,不会像其他员工那样偷懒。
给arduino下命令,就像安排一道道工作程序,而编写这些程序,就编程了。
要给arduino编程,就要学习arduino语言。那么是否要先精通了arduino语言才能给arduino编程呢?当然不是,那样太费时而且效率极低,可以跟着例子边做边实验边理解每句代码,
arduino语言在编程语言中并不是一种生僻的语言,其建立在C语言/C++语言基础上,语法和C语言类似,但是在类库方面做了一些改变,把相关的参数设置函数化。写arduino语言程序回避其他AVR单片机程序更简便,对于有编程基础的很容易上手。


文章目录

  • 文章目录
  • 程序结构
  • 变量定义
  • 函数和类库
  • 自定义函数
  • 自定义类库


程序结构

程序编译区中的代码就是arduino语言编写的,也是arduino程序最基本的程序结构,其中双斜杠“//”后面代表注释内容,两句英语注释的内容表述如下:

void  setup(){//把代码放在这里,让它只运行一次;
}
void loop(){
//把代码放在这里,让它反复运行;
}

可以把这段程序看作两部分,其中,一个打括号“{}”及其掐免得代码为一个整体,为一个部分。这两部分是使用定义函数的语法来写的,这里暂时可以把大括号前面的内容当做一个部分的开始的符号,大括号里就是这部分要运行的代码放置位置,我们成这部分为
初始化
循环体
下边面代码是一个LED闪烁的程序,在arduino运行时,会先运行一次初始化部分的代码,然后重复地运行循环体部分的代码。也就是说,在编程工程中,可以吧需要运行一次的程序放入初始化部分,把需要循环的代码放入循环体部分。
在这里插入图片描述

01 void setup(){
02  pinMode(13,OUTPUT);
04            //将数字输出口13设置为电平输出模式,
03 }
05 void loop(){
06 digitalwrite(13,HIGH)//将数字输出口13设置为高电平,LED将会亮起
07 delay(1000);           //等待一段时间
08 digitalwite(13,LOW);   //将数字输出口13设置为高电平,LED将会熄灭
09 delay(1000);           //等待一段时间
10}

变量定义

一个程序包含的部分往往不止这些,变量、函数、类库和各种语法结构都是常见的。
代码中对数字输出口‘13’在代码中出现了很多次。在编程中一般会把需要重复使用多次的内容变量来定义,使用的时候在需要的地方用变量名表示,适当使用变量能让程序更简便和灵活。

01  int n =13;   //定义变量n,将数字口输出口的值‘13’放入变量
02 void setup(){
03  pinmode(n,OUTPUT)//将n的值(既13)数字输出口设置为电平的输出模式,执行一次即可完成设置
04}
05 void loop(){
06 digitalwrite(n,HITG);//将n的值(13)数字输出口设置为电平输出模式,LED会亮起
07 delay(1000);         //等待1毫秒
08 digitalwrite(n,LOW); //将n的值(13);数字输出口设置为低电平,LED会熄灭
09 delay(1000);         //等待1毫秒

代码中定义了一个名为n的变量,并将数字输出口13的值放入了变量中。变量定义的语句各式为:
数据类型 变量名 = 变量值;
或者为:
== 数据类型 变量名;==
此时变量是没有值得,需要在定义变量后再给变量赋值:
变量命=变量值;
例如:
int i =123;
char val = “字符串”
代码中要定义的变量的值是一个整数,所以数据类型用int(整形的意思)。数据类型和变量名之间用空格,变量和变量值之间用“=”,表示赋值的意思,定义字符串和变量时,要把字符串放入半角引号内。变量名要用符号命名规则:

  • 只能是英文子母大写A到Z,小写a到z,数字0~9或者下划线_ 组成;
  • 第一个子母必须是子母或者下划线开头;
  • 不能使用arduino语言关键字来命名变量,以免冲突;
  • 变量名区分大小写。

这是一个简单的变量定义语法,也是标准一行代码,所以后面要用“;”表示结束这行代码。代码中所有语句都是用;结束的,然后与再分别被大括号所包含,,初始化和循环体分别算是一段代码,大括号是其中一段代码的定义符号,所以不要尝试在大括号后面加上;
代码定义了变量以后,所有要用的数字输出口值13的语句都可以用变量n来代替13。程序里用变量代替的值是简单的数字13,如果程序要一个比较长或者复杂的数字呢?如果要用重复使用这个数字上百次呢?改程序中这个值的时候可以想而知会很麻烦。而用变定义后一目了然,变量名会告诉你它就再这里,‘=’符号后面就是你还要改的地方。这就是变量带给编程者的简便和灵活之处。



函数和类库

在前面的代码中,应该可以理解初始化和循环体部分既变量定义的语句了。接下来将介绍代码中的3、8、9、10、11行的结构。
别看这几行代码不一样,没有共同规律,但其实都是函数。可以想想数学中函数的表示方法,数学中一把函数表示为f(x),g(x),当多个函数一起出现时,还可能给函数加下标序号来区分,
在编程中,函数是很常见的,加下标太过麻烦,函数的名称可以和变量的名称一样随意起,以方便记忆,只要符合命名规则就行。

  • 代码pinMode(): 设置某个数字输出口的电平模式;
  • 代码digitalWrite(): 设置某个数字输出口的电平;
  • delay(); 让程序暂停一会,单位为毫秒。

编程中的函数不像数学中常见的地函数只有一个参数,其可以有多个参数,如函数digitalWrite()的语法为:
digital Write(参数pin,参数value)

  • pin:设置一个引脚;
  • value:电平,常见为HIGH 或LOW。

一般把一个函数作为一句代码,把变量、常量或值作为其参数。如代码就是一个arduino与pc串口通信的程序。

01 void setup(){
02 serial.begin(9600)  //设置通信波特率
03}
04 void loop(){
05 serial.printlan(“hello,pc!); //发送“hello,pc!”
06 delay (1000)//等待一段时间
08}

程序中用到了以下函数。

  • Serial类库函数begin(): 设置串口通信的波特率;
  • Serial类库函数println(): 通过串口发送一行字符。

这两个函数和前面的的函数不一样,名字中有“.”符号分割,其中“.”符号后面表示一个函数(也称为“方法”),前面表示一个对象(这里默认的串口对象Serial)。serial对象是由Serial类库创建地,由于这个类库是被arduino默认默认添加的包含的,在编译过程中会自动加入,所以不需要用语句在程序中指定加入那个类库。
对于一个复杂的程序,使用一大堆变量和函数式很常见的。假设现在又一个arduino做的舵机机器人,舵机的角度就是机器人的手臂角度,想通过程序来控制机器人摆动手臂。要控制舵机的角度,需要给舵机一个pwm(脉宽调制)信号,需要如下功能:

  • 提供一个角度,使舵机转动到这个角度;
  • 提供精确微妙使舵机转精确角度;
  • 记录最后一次命令转到的角度。
    如果把这些功能考已有的函数写出来,将会需要很多的变量,在程序中进行很多的运算才能达到的功能。好消息是,arduino IDE 中有一个舵机类库,类库中有实现所需功能的函数:
  • write(): 使舵机转动到0~180之间任意角度;
  • witeMicroseconds(): 用一个微妙单位的数值使舵机转动;
  • read():最近一次调用write()函数的角度。
    有了这个类库,所有的问题迎刃而解。使用这个类库首先需要在前面的程序初始化部分引入这个类库的头文件S
    ervo.h:
    #include <servo.h>
    然后需要用类名Servo创建对象(可以创建多个),如创建一个名为hand、另个名为foot的对象
    servo hand;
    servo foot;
    创建了舵机对象之后就你才能使用舵机类库的函数了,如用函数write()让舵机对象hand转动到60°,让舵机对象foot转动到140°:
    hand.attach(3); //定义链接舵机信号线的控制引脚
    foot.attach(9);
    hand.write(60);
    foot.write(140);
    程序运行后,两个舵机hand和foot分别转动到指定角度。使用类库后,程序更接近人的语句表达格式,代码更简洁。

自定义函数

函数和变量一样,程序编写者可以自定义需要的函数。虽然arduino语言中已经有了基本能解决大部分需要的函数,但对于特殊的实力,可鞥需啊哟用到能到到特定功能的函数。

自定义类库


http://chatgpt.dhexx.cn/article/A5ri0n6Q.shtml

相关文章

Arduino面向对象编程基础

面向对象编程基础 1.基础概论 面向对象三大特征&#xff1a;继承、封装、多态 2.简单的类和对象 案例&#xff1a;创建Led类 案例01&#xff1a;感受构造函数与析构函数的功能 class Led {public :Led(); //构造函数声明&#xff0c;初始化对象&#xff0c;在创建对象的…

Arduino入门教程

Arduino是一款简单易学的开源电子原型平台&#xff0c;包含硬件&#xff08;各种型号的Arduino板&#xff09;和软件&#xff08;Arduino IDE&#xff09;。它通过各种各样的传感器来感知环境&#xff0c;再通过控制灯光、电机和其他的装置来完成很多自动控制任务&#xff0c;在…

Arduino学习篇,基础入门

什么是arduino? 简单来讲arduino就是通过源代码控制开发板的信号输入输出从而实现对一些电子元件的控制&#xff0c;例如LED灯&#xff0c;蜂鸣器&#xff0c;按键 arduino程序 首先来讲arduino程序是基于C语言&#xff0c;而实现类似对于LED灯和蜂鸣器的简单控制只需简单C语…

TCP 四次挥手,可以变成三次挥手吗?

作者&#xff1a;小林coding 计算机八股文网站&#xff1a;https://xiaolincoding.com 大家好&#xff0c;我是小林。 虽然我们在学习 TCP 挥手时&#xff0c;学到的是需要四次来完成 TCP 挥手&#xff0c;但是在一些情况下&#xff0c; TCP 四次挥手是可以变成 TCP 三次挥手的…

TCP的三次握手、四次挥手--非常详细讲解

本篇文章转自 TCP的三次握手(建立连接&#xff09;和四次挥手(关闭连接&#xff09;不过进行了一些编辑。 TCP(Transmission Control Protocol) 传输控制协议 1&#xff64;TCP三次握手和四次挥手的过程图 tcp的6种标志位的分别代表&#xff1a; SYN(synchronous建立联机) ACK…

两张动图-彻底明白TCP的三次握手与四次挥手

背景描述 通过上一篇中网络模型中的IP层的介绍&#xff0c;我们知道网络层&#xff0c;可以实现两个主机之间的通信。但是这并不具体&#xff0c;因为&#xff0c;真正进行通信的实体是在主机中的进程&#xff0c;是一个主机中的一个进程与另外一个主机中的一个进程在交换数据。…

http——三次握手四次挥手

http htttp:TCP三次握手四次挥手&#xff08;TCP连接的释放&#xff09; htttp: 超文本传输协议&#xff08;Hyper Text Transfer Protocol&#xff0c;HTTP&#xff09;是一个简单的请求-响应协议&#xff0c;它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消…

HTTP的三次握手和四次挥手

目录 1. HTTP的三次握手2. HTTP的四次挥手3. HTTPS的三次握手 1. HTTP的三次握手 三次握手&#xff08;Three-way Handshake&#xff09;其实就是指建立一个TCP连接时&#xff0c;需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力…

我终于搞懂了TCP的三次握手和四次挥手(图片案例超详解)

【辰兮要努力】&#xff1a;hello你好我是辰兮&#xff0c;很高兴你能来阅读&#xff0c;昵称是希望自己能不断精进&#xff0c;向着优秀程序员前行&#xff01; 博客来源于项目以及编程中遇到的问题总结&#xff0c;偶尔会有读书分享&#xff0c;我会陆续更新Java前端、后台、…

tcp四次挥手,为什么是四次?

上一篇博客说了三次握手为什么是是三次&#xff08;点这里&#xff09;&#xff0c;那么现在就介绍一下四次挥手。大家都知道TCP是全双工的&#xff0c;再建立连接时的三次握手中的SYN和ACK一起发送&#xff0c;这里就会有疑问&#xff0c;为什么在四次挥手的时候没有将SYN和AC…

TCP三次握手,四次挥手的全过程,为什么需要三次握手,四次挥手

文章目录 前言TCP协议的介绍三次握手四次挥手 前言 主要介绍为什么TCP协议需要三次握手和四次挥手 TCP协议的介绍 传输控制协议&#xff08;TCP&#xff0c;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议. 面向连接&…

TCP四次挥手

第一次挥手&#xff1a; 主动断开方&#xff08;客户端&#xff0c;服务的都可以&#xff09;向对方发送一个FIN结束请求报文&#xff0c;并设置序列号和确认号&#xff0c;随后主动断开方进入FIN_WAIT1状态&#xff0c;这表示主动断开方已经没有业务数据要发给对方了&#xff…

TCP的三次握手与四次挥手详解

文章目录 TCP 协议简述TCP包首部TCP 三次握手建立连接TCP 四次挥手关闭连接常见面试题&#xff1a; TCP 协议简述 TCP 提供面向有连接的通信传输&#xff0c;面向有连接是指在传送数据之前必须先建立连接&#xff0c;数据传送完成后要释放连接。TCP传输的是字节流 无论哪一方…

什么是“三次挥手”和“四次握手”

文章目录 一、为什么要进行三次握手二、握手为什么要三次三、挥手为什么需要三次四、挥手为什么三次不行总结 前言 首先&#xff0c;我们先说什么是”三次握手“和”四次挥手“ 1.我们先来简单介绍一下”三次握手“ &#xff08;1&#xff09;.先来介绍一下里面这些看起来比较…

简述TCP四次挥手

四次挥手主要用到了两个标志位(ACK&FIN): ACK 示意参考:TCP三次握手FIN: 终止数据传输标志位---->当FIN为1的时候代表此数据为终止断开连接的请求 四次挥手流程: 由于TCP连接是双向传输的对等的模式即双工 wiki百科定义: 全双工&#xff08;full-duplex&#xff09;的…

简述四次挥手

什么是四次挥手 由于TCP连接是全双工的,断开一个TCP连接,需要客户端与服务器发送四个包来确认连接的断开 简述四次挥手的过程: 因为TCP是全双工的,因此,每个方向都要单独关闭 当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着 一方向不会再…

三次握手四次挥手

三次握手四次挥手是tcp协议中的&#xff0c;在说三次握手四次挥手先说一下tcp协议和udp协议。 &#xff08;1&#xff09;我们常用的网络通信如浏览网页、软件聊天、看的爱奇艺上的视频都是通过tcp、udp这两种协议来进行数据传输的&#xff1b; &#xff08;2&#xff09;tcp…

TCP三次握手与四次挥手(详解)

TCP三次握手 一&#xff1a;引出 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西&#xff1b;由于TCP不存在连接的概念&#xff0c;只存在请求和响应&#xff0c;请求和响应都是数据包&#xff0c;它们之间都是经过由TCP创建的一个从客户端…

TCP连接的四次挥手全过程

TCP通过四次挥手来释放连接 四次挥手的过程如下&#xff1a; 第一次挥手&#xff1a; 客户端向服务器发送一个 FIN 数据包&#xff08;FIN 1&#xff0c;seq u&#xff09;主动断开连接&#xff0c;报文中会指定一个序列号。告诉服务器&#xff1a;我要跟你断开连接了&am…

http三次握手四次挥手详解

1、 TCP的三次握手和四次挥手实质就是TCP通信的连接和断开。 三次握手&#xff1a;为了对每次发送的数据量进行跟踪与协商&#xff0c;确保数据段的发送和接收同步&#xff0c;根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系&#xff0c;并建立虚连接。 四次挥…