Download presentation
Presentation is loading. Please wait.
1
第2章 Arduino编程
2
目录 2.1 Arduino开发环境 2.2 Arduino语言概述 2.3 Arduino基本函数
3
2.1 Arduino开发环境 IDE安装 Arduino IDE 是 Arduino 的开放源代码的集成开发环 境,其界面友好,语法简单,并能方便地下载程序,使得 Arduino 的程序开发变得非常便捷。作为一款开放源代码 的软件,Arduino IDE 也是由 Java、Processing、avr-gcc 等开放源码 的软件写成。Arduino IDE 的另一个最大特点是跨平台的 兼容性,其适用于 Windows、Max OS X 以及 Linux。 2011 年 11 月 30 日,Arduino官方正式发布了 Arduino1.0 版本,可以下载不同系统下的压缩包,也可 以在 github 上下载源码重新编译自己的 IDE。到目前为 止,Arduino IDE 已经更新到 1.8 版本,安装过程如下。
4
2.1.1 IDE安装 (1)从 Arduino 官网下载最新版本 IDE。选择适合 自己计算机系统的安装包,这里以Windows 7 的 64 位 系统安装过程为例。首先运行安装程序。
5
2.1.1 IDE安装 (2)安装选项,一般保持默认安装。
6
2.1.1 IDE安装 (3)选择安装位置。
7
2.1 Arduino开发环境 (4)安装过程。
8
2.1.1 IDE安装 (5)安装完成。
9
2.1.1 IDE安装 (6)IDE的主界面。
10
2.1.2 使用IDE 使用 Arduino IDE,需要将 Arduino 开发板通过 USB 线连接到计算机。这样,计算机会为 Arduino 开发板安 装驱动程序,并分配相应的 COM 端口,如 COM1、 COM2 等。计算机和系统分配的 COM 端口是不一样的。 在菜单栏中打开“工具”“端口”,进行端口设置, 设置为计算机硬件管理中分配的端口;然后,在菜单栏打 开“工具”“开发板”,选择 Arduino 开发板的类型, 如 Uno、DUE、YUN 等各种上面介绍的开发板。这样计 算机就可以与开发板进行通信了。
11
2.1.2 使用IDE void setup()里面的代码在导通电源时会被执行一次, 而 void loop()里面的代码会不断执行。 由于在一般的 Arduino 开发板上,第 13 脚上都有一 个 LED 灯,所以定义整形变量 led=13,用于函数的控制。 另外,程序中用了一些函数,pinMode()是设置引脚的输 入或者输出;delay()设置延迟的时间,单位为 ms; digitalWrite()是向 led 变量写入相关的值,使得13脚的 LED 灯的电平发生变化——HIGH 或者 LOW。这样 LED 灯就会根据延迟的时间交替地亮灭。
12
2.2 Arduino语言概述 2.2.1 标识符 标识符是用来标识源程序中某个对象的名字。这些对 象可以是语句、数字类型、函数、 变量、常量和数量等。 标识符长度不要超过32个字符,C 语言对于大小写字 符敏感,所以在编写长程序的时候要注意大小写字符的区 分。
13
2.2.2 关键字 C语言的关键字共有32个,根据关键字的作用,可将其 分为数据类型关键字、控制语句 关键字、储存类型关键 字和其他关键字等4类。 1.数据类型关键字12个 ① char:声明字符型变量或函数。 ② double:声明双精度变量或函数。 ③ enum:声明枚举类型。 ④ float:声明浮点型变量或函数。
14
2.2.2 关键字 ⑤ int:声明整型变量或函数。 ⑥ long:声明长整型变量或函数。 ⑦ short:声明短整型变量或函数。 ⑧ signed:声明有符号类型变量或函数。 ⑨ struct:声明结构体变量或函数。 ⑩ union:声明共用体(联合)数据类型。 ⑪unsigned:声明无符号类型变量或函数。 ⑫void:声明函数无返回值或无参数,声明无类型指针。
15
2.2.2 关键字 2.控制语句关键字12个 ① 循环语句(5个):for,是一种循环语句;do,循 环语句的循环体;while,循环语句的循环条件;break, 跳出当前循环;continue结束当前循环,开始下一个循环。 ② 条件语句(3个):if,条件语句;else,条件语句 否定分支(与 if 连用);goto,无条件跳转语句。 ③开关语句(3个):switch用于开关语句;case开关 语句分支;default,开关语句 中的“其他”分支。
16
2.2.2 关键字 ④ 语句(1个):return,子程序返回语句(可以带 参数,也可以不带参数) 3.储存类型关键字4个 ① auto:声明自动变量,一般不使用。 ② extern:声明变量是在其他文件中声明(也可以看 作是引用变量)。 ③ register:声明寄存器变量 ④ static:声明静态变量。
17
2.2.2 关键字 4.其他关键字4个 ① const:声明只读变量。 ② sizeof:计算机数据类型长度。 ③ typedef:用以给数据类型取别名。 ④ volatile:说明变量在程序执行中可被隐含地改变。
18
2.2.3 运算符 运算符是告诉编译程序执行特定算术或逻辑操作的符 号。C 语言的运算范围很宽,把除了控制语句和输入∕输 出以外几乎所有的基本操作都作为运算符处理。 运算符主要分为三大类:算术运算符、关系运算符与 逻辑运算符。除此之外,还有一些用于完成特殊任务的运 算符。
19
2.2.3 运算符 1.赋值运算符 赋值语句的作用是把某个常量、变量或表达式的值赋 给另一个变量。C 语言中,符号为 “=”这里并不是等于 的意思,只是赋值,等于用“==”表示。 注意:赋值语句左边的变量在程序的其他地方必须声 明。
20
2.2.3 运算符 2.算术运算符 在 C 语言中,有两个单目和五个双目运算符,分别为: +正、-负、*乘法、/除法、%取模、+加法、-减法。 3.逻辑运算符 逻辑运算符是根据表达式的值来返回真值或是假值。 其实,在 C 语言中没有所谓的真值 和假值,只是认为非 0 为真值,0 为假值。 符号功能:&&(逻辑与)||(逻 辑或)、!(逻辑非)。
21
2.2.3 运算符 4.关系运算符 关系运算符是对两个表达式进行比较,各关系返回一 个真/假值。
22
2.2 Arduino语言概述 5.自增自减运算符 自增自减运算符是一类特殊的运算符,其中,自增运 算符(++)和自减运算符(--)对 变量的操作结果是增 加1和减少 1。 6.复合赋值运算符
23
2.2.3 运算符 7.条件运算符 条件运算符(:)是C语言中唯一的一个三目运算符。 它是对第一个表达式作真/假检测, 然后根据结果返回另 外两个表达式中的一个,语法格式如下: <表达式1>? <表达式2>: <表达式3> 8.逗号运算符 在C语言中,多个表达式可以用逗号分开,其中用逗号 分开的表达式的值分别结算,但整个表达式的值是最后一 个表达式的值。
24
2.2.4 语言控制语句 控制语句用于控制程序的流程,以实现程序的各种结 构方式。它们由特定的语句定义符组成。C语言有9种控制 语句,可分为以下3类。 1.条件判断语句 C语言支持两种选择语句:if语句和switch语句。这些语 句允许你在程序运行时并知道 其状态的情况下,控制程 序的执行过程。首先看一下 if 语句的用法: if(condition)statement1; else statement2;
25
2.2.4 语言控制语句 (1)if 语句 If 语句的执行过程如下:如果条件为真,就执行 if 的对象 statement1;否则,执行 else 的对象 statement2。 任何时候两条语句都不可能同时执行。 int a,b; if(a<b) a=0; else b=0;
26
2.2.4 语言控制语句 (2)switch 语句 C 语言又提供了一个专门用于处 理多分支结构的条件 选择语句,称为 switch 语句,又称开关语句。使用 switch 语句可直接处 理多个分支(当然包括两个分支),其一般 形式如下。
27
2.2.4 语言控制语句 switch(表达式) { case 常量表达式 1; 语句 1; break; case 常量表达式 2; 语句 2; break; … case 常量表达式 n; 语句 n; default: 语句 n+1; }
28
2.2.4 语言控制语句 2.循环执行语句 (1)while 语句 while 语句实现“当型”循环,其一般格式如下。 while(termination) { body; } 当布尔表达式(termination)的值为 true 时,循环执行 大括号中的语句,并且初始化部 分和迭代部分是任选的。
29
2.2.4 语言控制语句 (2)do-while 语句 do-while 语句实现“直到型”循环,其一般格式如下。 do{ body; }while(termination); do-while 语句首先执行循环体,然后计算终止条件: 若结果为 true,则循环执行大括号 中的语句,直到布尔表 达式的结果为 false。
30
2.2.4 语言控制语句 (3)for 语句 for 语句也用来实现“当型”循环,其一 般格式如下。 for(initialization;termination;iteration){ body; }
31
2.2.4 语言控制语句 3.转向语句 转向语句包括 break 语句、continue 语句、return 语句 及 goto 语句。此类语句尽量少用, 因为这不利于结构化 程序设计,滥用它会使程序流程无规律、可读性差。
32
2.2.4 语言控制语句 (1)break 语句 break 语句中断当前循环,和 label 一起使用,中断相 关联的语句。一般格式如下。 break[label]; 上述语句中,可选的 label 参数指定断点处语句的标签。
33
2.2.4 语言控制语句 (2)continue 语句 continue 语句是跳过循环体中剩余的语句而强制执行下 一次循环,其作用为结束本次循 环,即跳过循环体中下面 尚未执行的语句,接着进行下一次是否执行循环的判定。 格式如下。 While(表达式 1){ 语句组 1 if(表达式 2)continue; 语句组 2}
34
2.2.4 语言控制语句 (3)return 语句 return 表示从被调函数返回到主调函 数继续执行,返回时可附带一个返回值,由 return 后面的 参数指定。 return 通常是必要的,因为函数调用的时候计算结果通 常是通过返回值带出的,如果函 数执行不需要返回计算 结果,也经常需要返回一个状态码来表示函数执行得顺利 与否(-1 和 0 就是最常用的状态码),主调函数可以通 过返回值判断被调函数的执行情况。
35
2.2.4 语言控制语句 (4)goto 语句 goto 语句也称为无条件转移语句,其一般格式如下。 goto 语句标号; 其中,语句标号是按标识符规定书写的符号,放在某 一语句行的前面,标号后加冒号(:)。 语句标号起标识语句的作用,与 goto 语句配合使用。 实例如下。 label:i++; loop:while(x<7);
36
2.2.5 语法结构 1.顺序结构 顺序结构的程序设计是最简单的,只要按照解决问题 的顺序写出相应的语句就行。它的 执行顺序是自上而下, 依次执行。
37
2.2.5 语法结构 2.选择结构 按照给定的条件有选择地执行程序中的语句。 (1)if 单分支结构 该结构的格式如下。 if(表达式)语句 功能:判断表达式的值,若为 true(真)则执行语句; 若为 false(假),则不执行语句。
38
2.2.5 语法结构 ① 表达式可以是任意合法的 C++ 表达式,一般为逻辑 表达式或关系表达式,当表达式 为赋值表达式时,可以含 对变量的定义。实例如下。 if(int i =3)语句 //等价于 int i;if(i=3)语句 ② 若表达式的值为数值,则 0 被视为假,一切非 0 被 视为真。 ③ 当表达式的表达式为真,要执行多条语句时,应将 这些语句用花括号括起来以复合语 句的形式出现。
39
2.2.5 语法结构 ④ 程序是将整个 if 控制结构看成一条语句处理的。该 语句称为 if 语句,也称为条件语 句。 ⑤ 语句可以是另一个 if 语句或其他控制语句(嵌套)
40
2.2.5 语法结构 (2)if 双分支结构 该结构的格式如下。 if(表达式)语句 1 else 语句 2 功能:判断表达式的值,若为 true(真)则执行语句 1; 若为 false(假)则执行语句 If-false 语句。
41
2.2.5 语法结构 ①语句 1 和语句 2 可以是另一个 if 语句或其他控制语句 (嵌套)。此时 else 总是与它前 面最近且未配对的 if 配对。 ② 程序是将整个 if-false 控制结构看成一条语句处理的。 else 是 if 语句中的子句,不能 作为独立的语句单独使 用。 ③ 可以用条件运算符“:”来实现简单的双分支结构。
42
2.2.5 语法结构 (3)if 多分支结构 该结构的格式如下。 if(表达式 1)语句 1 else if(表达式 2) 语句 2 if(表达式 3) 语句 3 [else 语句 n]
43
① if 多分支结构实际上是一种规范化的 if 嵌套结构。 在这种结构中,if 语句嵌套在 else 之后,即符合以下格 式。
2.2.5 语法结构 ① if 多分支结构实际上是一种规范化的 if 嵌套结构。 在这种结构中,if 语句嵌套在 else 之后,即符合以下格 式。 if(表达式 1) 语句 1 else if(表达式 2) 语句 2 if(表达式 3) 语句 3 else … [else 语句 n]
44
2.2.5 语法结构 ② 从逻辑上看,各个表达式条件都应当是相互排斥的, 任意时刻最多有一个条件得以满足,不应出现既满足这个 条件又满足那个条件的情况。
45
2.2.5 语法结构 (4)switch 多分支结构 该结构的格式如下。 switch(表达式) { case 常量表达式 1:[语句序列 1] case 常量表达式 2:[语句序列 2] case 常量表达式 3:[语句序列 3] case 常量表达式 4:[语句序列 4] case 常量表达式 5:[语句序列 5] case 常量表达式 6:[语句序列 6] ... [default:语句序列 n] }
46
2.2.5 语法结构 ① 表达式和各个常量表达式的类型一般为整型、字符型、 逻辑型和枚举型。各个常量表 达式的类型要与表达式的类 型相同或相容,所有常量表达式的值必须互不相同。 ② case 子句为若干个(包括 0 个),default 子句最多只能 有一个。从语法上讲,default 子句可以放在任何一个 case 子句的前面,此时还是先判断各个 case 常量表达式的值与 表达式 值的匹配(相等)情况,如果所有常量表达式的值 均不匹配,这才将 default 子句作为程序的 执行入口点。
47
2.2.5 语法结构 ③ 语句序列由若干条单语句组成,这些单语句可以不 写成复合语句的形式。必要时,case 语句标号后的语句序 列可以省略不写。 ④ 若语句序列中含有 break 语句,则执行到此就立即 跳出 switch 语句体。当所有 case 子句和 default 子句都带 有 break 子句时,它们出现的顺序可以任意。 ⑤ 当需要针对表达式的不同取值范围进行不同处理时, 使用 if 多分支结构比较方便, 因为 switch 语句只能对相 等关系进行测试,而 if 语句却可以用关系表达式对一个较 大范围内 的值进行测试。
48
2.2.5 语法结构 3.循环结构 (1)while 循环(当型循环) 该结构的格式如下。 while(表达式)语句 ① 表达式就是给定的循环条件,语句构成循环体,在 循环体中一般应用使循环趋于结束 的语句。 ② 先判断表达式,后执行语句。当一开始表达式的值 就为 false 时,程序 1 次也不循环。 ③ While 语句一般用于不知道具体循环次数的情况。
49
2.2.5 语法结构 (2)do-while 循环(直到型循环) 该结构的格式如下。 do 语句 whlie(表达式); ① 先执行语句,后判断表达式。程序至少要循环 1 次。 ② do-while 与 while 循环的不同之处在于:do-while 循环 的循环体在前,循环条件在后, 因此 do-while 循环时在 任何情况下都至少被执行一次;而 while 循环的循环条件 在前,循环 体在后,当循环条件一开始就不成立时,循环 体一次也不执行。这一点正是在构造循环结构 时决定使用 do-while 语句还是 while 语句的重要依据。
50
2.2.5 语法结构 (3)for 循环(次数循环) 该结构的格式如下。 for([表达式 1];[表达式 2];[表达式 3])语句 ①表达式 1 为 for 循环的初始化部分,一般用来设置循 环控制变量的初始值,当表达式 为一赋值表达式时,可包 含对变量的定义;表达式 2 为 for 循环的条件部分,是用 来判定循 环是否继续进行的依据;表达式 3 为 for 循环的 增量部分,一般用来修改循环控制变量的值。 ② 省略表达式 1 时应在 for 语句之前给循环变量赋初 值;省略表达式 2 时可认为循环的 条件始终为真。
51
2.2.5 语法结构 4.跳转语句 (1)break 语句(跳出语句) 该语句的格式如下。 break; 跳转语句用在 switch 结构中,break 语句使执行流程 跳出所在 switch 语句。用在循环结 构中,break 语句使 执行流程无条件地跳出本层循环体。
52
2.2.5 语法结构 ① break 语句经常用于使执行流程跳出死循环。 ② 若 break 语句位于多重循环的内层循环体中,则只 能跳出内层循环(本层循环),而 不能跳出其他外层循环。
53
2.2.5 语法结构 (2)continue 语句(继续语句) 该语句的格式如下。 continue; 用于在循环结构中,结束本次循环,即跳过循环体中 尚未执行的语句,接着 进行下一次循环判断。
54
2.2.5 语法结构 (3)goto 语句(转向语句) 该语句有两种格式,具 体如下。 ① 格式一 goto 语句标号; [语句序列] 语句标号:语句
55
2.2.5 语法结构 ② 格式二 语句标号:语句 [语句序列] goto 语句标号; goto 语句强制中止执行 goto 语句之后的语句,无条 件地跳转到语句标号对应的语句继续 执行
56
2.3 Arduino 基本函数 I/O 操作函数 1.pinMode(pin,mode) 描述:将制定的针脚配置成输出 或输入。 语法:pinMode(pin,mode)。 参数:pin,要设置模式的针脚;mode,INPUT 或 OUTPUT。
57
I/O 操作函数 2.digitalWrite(pin,value) 语法:digitaiWrite(pin,value)。 参数:pin,针脚编号(如 1,5,10,A0,A3); value,HIGH 或 LOW。 注意:模拟针脚也可以当作数字引脚使用。
58
I/O 操作函数 3.int digitalRead(pin) 描述:读取指定针脚的值,HIGH 或 LOW。 语法:digitalRead(pin)。 参数:pin,要读取的针脚号(int)。 返回:HIGH 或 LOW。 注意:如果脚悬空,digitalRead()会返回 HIGH 或 LOW(随机变化),模拟输入脚能当作数字脚使用。
59
2.3.2 模拟 I/O 操作函数 1.analogReference(type) 描述:设定用于模拟输入的基准电压(输入范围的最 大值)。type 可以取如下值。 ① DEFAULT:默认值 5V(Arduino 板为 5V)或 3V (Arduino 板为 3.3V)为基准电压。 ② INTERNAL:在 Atmega168 和 Atmega328 上以 1.1V 为基准电压,在 Atmega8 上以 2.56V 为基准电压(Arduino Mega 无此选项)。
60
2.3.2 模拟 I/O 操作函数 ③ INTERAL1V1:1.1V 为基准电压(此选项劲针对 Arduino Mega)。 ④ INTERNAL2V56:2.56V 为基准电压(此选项仅针 对 Arduino Mega)。 ⑤ EXTERNAL:以 AREF 引脚(0~5V)的电压作为 基准电压。 注意事项:改变基准电压后,之前从 analogRead()读取 的数据可能不准确。
61
2.3.2 模拟 I/O 操作函数 2.analongRead() 描述:从指定的模拟引脚读取数值。Arduino 板包含一 个 6 通道(Mini 和 Na有 8 个通道,Mega 有 16 个通道)、 10 位模拟/数字转换器。这标识它将 0~5V 的输入电 压映像到 0~1023 的整数值,即每个读数对应电压值为 5V/1024,每单位 V(4.6mV)。 输入范围和精度可以通过 analogReference()改变,其大 约需要 100µs(0.0001s)来读取模拟输入,所以最大的阅 读速度是每秒 1000 次。
62
2.3.2 模拟 I/O 操作函数 语法:analogRead 的整数值。 数值的读取:从输入引脚(大部分板子从 0~5,Mini 和 Nano 从 0~7,Mega 从 0~15)读取数值。 返回:从 0~1023 的整数值。 注意事项:如果模拟输入引脚没有连入电路,由 analogRead()返回的值将根据很多项因素(例如其他模拟 输入引脚,手靠近板子等)产生波动。
63
2.3.2 模拟 I/O 操作函数 3.analogWrite() 描述:从一个针脚输出模拟值(脉冲宽度调整,Pulse Width Modulation,PWM),让 LED以不同的亮度点亮或 驱动电机以不同速度旋转。analogWrite()输出结束后,该 针脚将产生一个稳定的特定占空比的 PWM。PWM 输出 持续到下次调用 analogWrite(),或在同一针脚调用 digitalRead()或 digitalWrite()。 语法:analogWrite(pin,value)。 参数:pin,用于输入的针脚;value,占空比,取值范 围为 0(完美关闭)~255(完美打开)。
64
2.3.3 高级 I/O 1.tone() 描述:在一个针脚上产生一个特定频率的方波(50% 占空比)。持续时间可以设定,波形会一直产生直到调用 noTone()函数。该针脚可以连接压电峰鸣器或其他喇叭播 放声音。 注意:如果要在多个针脚是产生不同的音调,则要在 对下一个针脚使用 tone()函数前,先使用 noTone()函数。 语法:tone(pin,frequency)或 tone(pi,frequency,duration)。
65
2.3.3 高级 I/O 2.noTone() 语法:noTone(pin) 参数:pin,所要停止产生声音的引脚。
66
2.3.3 高级 I/O 3.ShiftOut() 描述:将数据的一个字节一位一位地移出。从最高有 效位(最左边)或最低有效位(最右边)开始,依次向数 据脚(DataPin)写入每一位,之后时钟脚被拉高或拉低, 指示之前的数据有效。 注意:如果所连接的设备时钟类型为上升沿(Rising Edges),则要确定在调用shiftOut()前时钟针脚为低电平, 如调用 digitalWrite(clockPin,LOW)。 语法:shiftOut(dataPin,clockPin,bitOrder,value)。
67
2.3.3 高级 I/O 4.shiftIn() 描述:将数据的一个字节一位一位地移入。从最高有 效位(最左边)或最低位有效位(最 右边)开始,对于每个位,先拉高时钟电位,再从数 据传输线中读取一位,再将时钟线拉低。 注意:这是一个软件实现,也可以参考硬件实现的 SPI 链接库,其速度更快,但只对特 定脚有效。 语法:byte incoming=shiftIn(dataPin,clockPi,bitOrder)。
68
2.3.3 高级 I/O 5.pulseIn() 描述:读取一个针脚的脉冲(HIGH 或 LOW)。 语法:pulseIn(pin,value)或 pulseIn(pin,value,timeout)。 参数:pin,要进行脉冲计时的针脚号(int);value, 要读取的脉冲类型,H 或 LOW(int);timeout(可选), 指定脉冲计数的等待时间返回 0(unsigned long)。
69
2.3.4 shiftOut(dataPin,clockPin,bitOrder,val)
③ bitOrder:数据位移顺序选择位,该参数为 byte 类型,有两种类型可选择,分别是高 位先入 MSBFIRST 和低位先入 LSBFIRST。 ④ value:所要输出的数值。
70
2.3.5 pulseIn(pin,state,timeout)
pulseIn 函数用于读取引脚脉冲的时间长度,而脉冲可 以是 HIGH 或 LOW。如果是 HIGH,函数将先等引脚变 为高电平,然后开始计时,一直到变为低电平为止。返回 脉冲持续的时间使用的,单位为 ms。如果超时还没有读 到的话,将返回 0。
71
2.3.6 时间函数 1.Millis() 描述:返回 Arduino 开发板运行当前程序开始的毫秒 数。这个数字将在约 50 天后溢出(归零)。 返回:返回从运行当前程序开始的毫秒数(无符号长 整数 unsigned long)。
72
2.3.6 时间函数 2.micros() 描述:返回 Arduino 开发板从运行当前程序开始的微秒数, 这个数字将在约 70 分钟后溢出(归零)。在 16MHz 的 Arduino 开发板上(比如 Duemilanove 和 Nano),这个函数 的分辨率为 4μs(即返回值总是 4 的倍数);在 8MHz 的 Arduino 开发板上(比如 LilyPad),这个函数的分辨率为 8μs。 返回:返回从当前程序开始的微秒数(无符号长整数)。
73
2.3.6 时间函数 3.delay() 描述:是程序设定的暂停时间(单位毫秒)。 语法:delay(ms)。 参数:ms,暂停的毫秒数(unsigned long)。
74
2.3.6 时间函数 4.delayMicroseconds() 描述:使程序暂停指定的一段时间(单位 ms)。目前, 能够产生的最大延时准确值是 16383。这可能会在未来的 Arduino 版本中有所改变。对于超过几千 μs 的延时,应该 使用 delay()代替。 语法:delayMicroseconds(us)。 参数:µs,暂停的时间,单位微秒(unsigned int)。
75
2.3.7 中断函数 1.外部中断函数 (1)attachInterrupt(interrupt,function,mode) 描述:当发生外部中断时,调用一个指定的函数。这 会用新的函数取代之前指定给中断的函数。大多数的 Arduino 板有两个外部中断:0 号中断(引脚 2)和 1 号中 断(引脚 3)。部分不同类型 Arduino 板的中断及引脚关 系,表中的 int 是 interrupt 的缩写,而不是代表整数的 int。 Arduino Due 有更强大的中断能力,其允许在所有的引脚 上触发中断程序,可以直接使用attachInterrupt 指定引脚号 码。
76
2.3.7 中断函数 语法:attachInterrupt(interrupt,function,mode)、 attachInterrupt(pin,function,mode) 。 参数:interrupt,中断的编号;pin,引脚号码(Due 专 用);function,中断发生时调用的函数,此函数必须不带 参数和不返回任何值;mode,定义何种情况发生中断,以 下四个常数为 mode 的有效值。 ① LOW:当引脚为低电位时,触发中断。 ② CHANGE:当引脚电位发生改变时,触发中断。 ③ RISING:当引脚由低电位变为高电位时,触发中断。 ④ FALLING:当引脚由高电位变为低电位时,触发中断。
77
2.3.7 中断函数 2.中断使能函数 (1)interrupts(中断) 描述:重新启用中断(使用 noInterrupts()命令后将被 禁用)。中断允许一些要任务在后台运行。禁用中断后一 些函数可能无法工作,传入信息可能会被忽略。中断会稍 微打乱代码的时间,可以在程序关键部分禁用中断。
78
2.3.7 中断函数 (2)noInterrupts() 描述:禁止中断。中断允许后在后台运行一些重要任 务,默认使能中断。禁止中断时部分函数会无法工作,通 信中接收到的信息也可能会丢失,中断会影响计时代码, 在某些特定的代码中也会失效。
79
2.3.8 串口收发函数 1.Serial.begin(speed) 描述:将串行数据传输速率设置为 bit/s(波特)。与 计算机进行通信时,可以使用这些波特率:300、1200、 2400、4800、9600、14400、19200、28800、38400、 或 。当然,也可以指定其他波特率,例如, 针脚 0、1 和一个组件进行通信,它需要一个特定的波特 率。 语法: Serial.begin(speed) 仅适用于 Arduino Mega 、 Seriall 。 begin ( speed )、Serial2.begin(speed) 、 Serial3.begin(speed) 、 Serial.begin(speed,config) 、 Serial2.begin(speed,config)、Serial3.begin(speed,config)。
80
2.3.8 串口收发函数 2.int Serial.available() 描述:从串口读取有效的字节数(字符)。这是已经 传输到并存储在串行接收缓冲区(能够存储 64 个字节) 的数据。Available()继承了 Stream 类。 语法:Serial.available()。此外,仅适用于 Arduimo Mage 的还有 3 个,分别是Serial1.available()、 Serial2.available()和 Serial3.available()。
81
2.3.8 串口收发函数 3.int Serial.read() 描述:读取传入的串口的数据,read()继承自 Stream 类。 语法:Serial.read()。此外,仅适用于 Arduimo Mage 的 还有 3 个,分别为 Serial1.read()、Serial2.read()和 Serial3.read()。 返回:传入串口数据的第一个字节(或‐1,如果没有 可用的数据,int)。
82
2.3.8 串口收发函数 4.Serial.flush() 描述:等待超出的串行数据完成传输(在 1.0 及以上的 版本中,flush()语句的功能不再是丢弃所有进入缓存器的 串行数据)。flush()继承自 Stream 类。 语法:Serial.flush()。此外,仅适用于 Arduino Mega 的 有 3 个,分别为 Serial1.flush()、Serial2.flush()和 Serial3.flush()。
83
2.3.8 串口收发函数 5.Serial.print(data) 描述:以 ASCII 文本形式打印数据到串口输出。此命 令可以采取多种形式。 若要发送一个字节,则使用 Serial.write()。 语法:Serial.println(val) 或 Serial.print(val,格式)。 参数:val,打印输出的值,可以为所有数据类型;格 式,指定进制(整数数据类型)或小数位数(浮点类型)。 返回:字节 print()将返回写入的字节数,但是否使 用(或读出)是可以设定的。
84
6.Serial.println(data)
2.3.8 串口收发函数 6.Serial.println(data) 描述:打印数据到串行端口,输出人们可识别的 ASCII 码文本并 回车(ASCII13,或”\r”)及换行(ASCII10,或”\n”)。此命令采 用的形式与 Serial.print()相同。 语法:Serial.println(val)或 Serial.println(val,format)。 参数:val,打印的内容,可以为所有数据类型;format,指定基 数(整数数据类型)或小数位数(浮点类型)。 返回:字节(byte),printfln()将返回写入的字节数,但可以选择 是否使用它。
Similar presentations