第2章 Arduino编程.

Slides:



Advertisements
Similar presentations
人機介面 Arduino 簡介 授課教師 開課單位. Arduino 簡介 Arduino 是一塊 Open source 的 Simple i/o 介面板,並 且具有使用類似 java, C 語言的開發環境。 可以快速使用 Arduino 語言 ( 基於 wiring) 與 Flash 或 Processing…
Advertisements

现代电子技术实验 ——综合实验之单片机部分
C语言程序设计 主讲教师 :张群燕 电话:
迴圈 迴圈基本觀念 while迴圈 do 迴圈 for迴圈 巢狀迴圈 迴圈設計注意事項 其他控制指令 迴圈與選擇的組合.
C#程序设计案例教程 第3章 程 序 结 构.
第一章 C语言概述 计算机公共教学部.
编译原理上机实习
第 5 章 流程控制 (一): 條件分支.
第二章 JAVA语言基础.
第三章 控制结构.
Netduino 程式設計教學 國立豐原高中 郭再興.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
CH2 開發環境介紹 最簡單的互動設計 – Arduino一試就上手 孫駿榮、吳明展、盧聰勇.
Class 2 流程控制-選擇敘述與迴圈.
C++Primer 3rd edition 中文版 Chap 5
內容:串列傳輸 實作:Arduino to PC 、 Arduino to Arduino 簡報:廖崇義
动手玩转Arduino (三) 串口输入输出
特雷門琴 (Theremin) 是 tone() 函數的應用, 它只需要一個蜂鳴器, 一個光敏電阻, 以及一個 10K 電阻就可以進行測試了. 實際電路接線如下 :光敏電阻與 10 K 電阻串聯, 光敏電阻一端接 5V, 與電阻串接處接Arduino 的 A0 腳, 電阻另一端接地. 而蜂鳴器則 +
C++程序设计 第二讲 清华大学软件学院.
CH5 數位訊號 最簡單的互動設計 – Arduino一試就上手 孫駿榮、吳明展、盧聰勇.
第3章 C 語言的基本知識.
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
C 程式設計— 控制敘述 台大資訊工程學系 資訊系統訓練班.
Arduino单片机基础 周弋
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第三章 C++中的C 面向对象程序设计(C++).
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
Arduino.
动手玩转Arduino (五) RF数据通信
語法:Variables & Functions 實作:Digital out (Button+LED) 簡報:廖崇義
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
C++语言程序设计 第二章 C++简单程序设计.
Java程序设计 第2章 基本数据类型及操作.
明解C++教學手冊 柴田望洋 博士 著 書號:PG20269
陳維魁 博士 儒林圖書公司 第五章 控制結構 陳維魁 博士 儒林圖書公司.
第三章 C# 基础知识.
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
    使用Arduino量測交流(AC)電壓    林品成 月.
    使用Arduino量測直流(DC)電壓    林品成 月.
6-1 功能簡介 6-4 實驗成果 6-2 電路說明 6-5 延伸應用與練習 6-3 程式設計
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
第二章Java基本程序设计.
C语言概述 第一章.
第1讲 C语言基础 要求: (1) C程序的组成 (2) C语言的标识符是如何定义的。 (3) C语言有哪些基本数据类型?各种基本数
亚博科技 Arduino视频教程 第8讲 蜂鸣器发声实验.
程式結構&語法.
4 條件選擇 4.1 程式基本結構 循序式結構 選擇式結構 重複式結構 4-3
第 二 章 数据类型、运算符与表达式.
亚博科技 Arduino视频教程 第12讲 8乘8点阵.
第二章 Java基本语法 讲师:复凡.
物聯網期末報告 組員: 邱景柏 方嘉慶 陳約翰 洪銘陽
K60入门课程 06 首都师范大学物理系 靳熙芃.
第十四章 若干深入问题和C独有的特性 作业: 函数指针 函数作参数 函数副作用 运算 语句 位段 存储类别 编译预处理
Arduino智慧機器人 觸鬚的觸碰式導航
C++语言程序设计教程 第2章 数据类型与表达式 第2章 数据类型与表达式 制作人:杨进才 沈显君.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 Java语法基础.
知识点0204 夏普红外测距传感器 主讲人:宁波鄞州职业教育中心学校 陈浙 (Arduino功能模块与应用)
第二章 类型、对象、运算符和表达式.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
Do While 迴圈 東海大學物理系‧資訊教育 施奇廷.
第五章 序列埠通訊 並列與序列通訊簡介 認識序列埠 認識字元資料類型 字串資料類型 從序列埠監控視窗觀察變數 從Arduino接收序列資料
单片机应用技术 (C语言版) 第4章 C51程序设计入门
第七章 LED七段顯示器 認識七段顯示器 用陣列儲存七段顯示數字 認識74HC595(序列連接七段顯示器)
第2章 Java语言基础.
基本資料型態 變數與常數 運算子 基本的資料處理 授課:ANT 日期:2014/03/03.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
第二章 Java基础语法 北京传智播客教育
Presentation transcript:

第2章 Arduino编程

目录 2.1 Arduino开发环境 2.2 Arduino语言概述 2.3 Arduino基本函数

2.1 Arduino开发环境 2.1.1 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 版本,安装过程如下。

2.1.1 IDE安装 (1)从 Arduino 官网下载最新版本 IDE。选择适合 自己计算机系统的安装包,这里以Windows 7 的 64 位 系统安装过程为例。首先运行安装程序。

2.1.1 IDE安装 (2)安装选项,一般保持默认安装。

2.1.1 IDE安装 (3)选择安装位置。

2.1 Arduino开发环境 (4)安装过程。

2.1.1 IDE安装 (5)安装完成。

2.1.1 IDE安装 (6)IDE的主界面。

2.1.2 使用IDE 使用 Arduino IDE,需要将 Arduino 开发板通过 USB 线连接到计算机。这样,计算机会为 Arduino 开发板安 装驱动程序,并分配相应的 COM 端口,如 COM1、 COM2 等。计算机和系统分配的 COM 端口是不一样的。 在菜单栏中打开“工具”“端口”,进行端口设置, 设置为计算机硬件管理中分配的端口;然后,在菜单栏打 开“工具”“开发板”,选择 Arduino 开发板的类型, 如 Uno、DUE、YUN 等各种上面介绍的开发板。这样计 算机就可以与开发板进行通信了。

2.1.2 使用IDE void setup()里面的代码在导通电源时会被执行一次, 而 void loop()里面的代码会不断执行。 由于在一般的 Arduino 开发板上,第 13 脚上都有一 个 LED 灯,所以定义整形变量 led=13,用于函数的控制。 另外,程序中用了一些函数,pinMode()是设置引脚的输 入或者输出;delay()设置延迟的时间,单位为 ms; digitalWrite()是向 led 变量写入相关的值,使得13脚的 LED 灯的电平发生变化——HIGH 或者 LOW。这样 LED 灯就会根据延迟的时间交替地亮灭。

2.2 Arduino语言概述 2.2.1 标识符 标识符是用来标识源程序中某个对象的名字。这些对 象可以是语句、数字类型、函数、 变量、常量和数量等。 标识符长度不要超过32个字符,C 语言对于大小写字 符敏感,所以在编写长程序的时候要注意大小写字符的区 分。

2.2.2 关键字 C语言的关键字共有32个,根据关键字的作用,可将其 分为数据类型关键字、控制语句 关键字、储存类型关键 字和其他关键字等4类。 1.数据类型关键字12个 ① char:声明字符型变量或函数。 ② double:声明双精度变量或函数。 ③ enum:声明枚举类型。 ④ float:声明浮点型变量或函数。

2.2.2 关键字 ⑤ int:声明整型变量或函数。 ⑥ long:声明长整型变量或函数。 ⑦ short:声明短整型变量或函数。 ⑧ signed:声明有符号类型变量或函数。 ⑨ struct:声明结构体变量或函数。 ⑩ union:声明共用体(联合)数据类型。 ⑪unsigned:声明无符号类型变量或函数。 ⑫void:声明函数无返回值或无参数,声明无类型指针。

2.2.2 关键字 2.控制语句关键字12个 ① 循环语句(5个):for,是一种循环语句;do,循 环语句的循环体;while,循环语句的循环条件;break, 跳出当前循环;continue结束当前循环,开始下一个循环。 ② 条件语句(3个):if,条件语句;else,条件语句 否定分支(与 if 连用);goto,无条件跳转语句。 ③开关语句(3个):switch用于开关语句;case开关 语句分支;default,开关语句 中的“其他”分支。

2.2.2 关键字 ④ 语句(1个):return,子程序返回语句(可以带 参数,也可以不带参数) 3.储存类型关键字4个 ① auto:声明自动变量,一般不使用。 ② extern:声明变量是在其他文件中声明(也可以看 作是引用变量)。 ③ register:声明寄存器变量 ④ static:声明静态变量。

2.2.2 关键字 4.其他关键字4个 ① const:声明只读变量。 ② sizeof:计算机数据类型长度。 ③ typedef:用以给数据类型取别名。 ④ volatile:说明变量在程序执行中可被隐含地改变。

2.2.3 运算符 运算符是告诉编译程序执行特定算术或逻辑操作的符 号。C 语言的运算范围很宽,把除了控制语句和输入∕输 出以外几乎所有的基本操作都作为运算符处理。 运算符主要分为三大类:算术运算符、关系运算符与 逻辑运算符。除此之外,还有一些用于完成特殊任务的运 算符。

2.2.3 运算符 1.赋值运算符 赋值语句的作用是把某个常量、变量或表达式的值赋 给另一个变量。C 语言中,符号为 “=”这里并不是等于 的意思,只是赋值,等于用“==”表示。 注意:赋值语句左边的变量在程序的其他地方必须声 明。

2.2.3 运算符 2.算术运算符 在 C 语言中,有两个单目和五个双目运算符,分别为: +正、-负、*乘法、/除法、%取模、+加法、-减法。 3.逻辑运算符 逻辑运算符是根据表达式的值来返回真值或是假值。 其实,在 C 语言中没有所谓的真值 和假值,只是认为非 0 为真值,0 为假值。 符号功能:&&(逻辑与)||(逻 辑或)、!(逻辑非)。

2.2.3 运算符 4.关系运算符 关系运算符是对两个表达式进行比较,各关系返回一 个真/假值。

2.2 Arduino语言概述 5.自增自减运算符 自增自减运算符是一类特殊的运算符,其中,自增运 算符(++)和自减运算符(--)对 变量的操作结果是增 加1和减少 1。 6.复合赋值运算符

2.2.3 运算符 7.条件运算符 条件运算符(:)是C语言中唯一的一个三目运算符。 它是对第一个表达式作真/假检测, 然后根据结果返回另 外两个表达式中的一个,语法格式如下: <表达式1>? <表达式2>: <表达式3> 8.逗号运算符 在C语言中,多个表达式可以用逗号分开,其中用逗号 分开的表达式的值分别结算,但整个表达式的值是最后一 个表达式的值。

2.2.4 语言控制语句 控制语句用于控制程序的流程,以实现程序的各种结 构方式。它们由特定的语句定义符组成。C语言有9种控制 语句,可分为以下3类。 1.条件判断语句 C语言支持两种选择语句:if语句和switch语句。这些语 句允许你在程序运行时并知道 其状态的情况下,控制程 序的执行过程。首先看一下 if 语句的用法: if(condition)statement1; else statement2;

2.2.4 语言控制语句 (1)if 语句 If 语句的执行过程如下:如果条件为真,就执行 if 的对象 statement1;否则,执行 else 的对象 statement2。 任何时候两条语句都不可能同时执行。 int a,b; if(a<b) a=0; else b=0;

2.2.4 语言控制语句 (2)switch 语句 C 语言又提供了一个专门用于处 理多分支结构的条件 选择语句,称为 switch 语句,又称开关语句。使用 switch 语句可直接处 理多个分支(当然包括两个分支),其一般 形式如下。

2.2.4 语言控制语句 switch(表达式) { case 常量表达式 1; 语句 1; break; case 常量表达式 2; 语句 2; break; … case 常量表达式 n; 语句 n; default: 语句 n+1; }

2.2.4 语言控制语句 2.循环执行语句 (1)while 语句 while 语句实现“当型”循环,其一般格式如下。 while(termination) { body; } 当布尔表达式(termination)的值为 true 时,循环执行 大括号中的语句,并且初始化部 分和迭代部分是任选的。

2.2.4 语言控制语句 (2)do-while 语句 do-while 语句实现“直到型”循环,其一般格式如下。 do{ body; }while(termination); do-while 语句首先执行循环体,然后计算终止条件: 若结果为 true,则循环执行大括号 中的语句,直到布尔表 达式的结果为 false。

2.2.4 语言控制语句 (3)for 语句 for 语句也用来实现“当型”循环,其一 般格式如下。 for(initialization;termination;iteration){ body; }

2.2.4 语言控制语句 3.转向语句 转向语句包括 break 语句、continue 语句、return 语句 及 goto 语句。此类语句尽量少用, 因为这不利于结构化 程序设计,滥用它会使程序流程无规律、可读性差。

2.2.4 语言控制语句 (1)break 语句 break 语句中断当前循环,和 label 一起使用,中断相 关联的语句。一般格式如下。 break[label]; 上述语句中,可选的 label 参数指定断点处语句的标签。

2.2.4 语言控制语句 (2)continue 语句 continue 语句是跳过循环体中剩余的语句而强制执行下 一次循环,其作用为结束本次循 环,即跳过循环体中下面 尚未执行的语句,接着进行下一次是否执行循环的判定。 格式如下。 While(表达式 1){ 语句组 1 if(表达式 2)continue; 语句组 2}

2.2.4 语言控制语句 (3)return 语句 return 表示从被调函数返回到主调函 数继续执行,返回时可附带一个返回值,由 return 后面的 参数指定。 return 通常是必要的,因为函数调用的时候计算结果通 常是通过返回值带出的,如果函 数执行不需要返回计算 结果,也经常需要返回一个状态码来表示函数执行得顺利 与否(-1 和 0 就是最常用的状态码),主调函数可以通 过返回值判断被调函数的执行情况。

2.2.4 语言控制语句 (4)goto 语句 goto 语句也称为无条件转移语句,其一般格式如下。 goto 语句标号; 其中,语句标号是按标识符规定书写的符号,放在某 一语句行的前面,标号后加冒号(:)。 语句标号起标识语句的作用,与 goto 语句配合使用。 实例如下。 label:i++; loop:while(x<7);

2.2.5 语法结构 1.顺序结构 顺序结构的程序设计是最简单的,只要按照解决问题 的顺序写出相应的语句就行。它的 执行顺序是自上而下, 依次执行。

2.2.5 语法结构 2.选择结构 按照给定的条件有选择地执行程序中的语句。 (1)if 单分支结构 该结构的格式如下。 if(表达式)语句 功能:判断表达式的值,若为 true(真)则执行语句; 若为 false(假),则不执行语句。

2.2.5 语法结构 ① 表达式可以是任意合法的 C++ 表达式,一般为逻辑 表达式或关系表达式,当表达式 为赋值表达式时,可以含 对变量的定义。实例如下。 if(int i =3)语句 //等价于 int i;if(i=3)语句 ② 若表达式的值为数值,则 0 被视为假,一切非 0 被 视为真。 ③ 当表达式的表达式为真,要执行多条语句时,应将 这些语句用花括号括起来以复合语 句的形式出现。

2.2.5 语法结构 ④ 程序是将整个 if 控制结构看成一条语句处理的。该 语句称为 if 语句,也称为条件语 句。 ⑤ 语句可以是另一个 if 语句或其他控制语句(嵌套)

2.2.5 语法结构 (2)if 双分支结构 该结构的格式如下。 if(表达式)语句 1 else 语句 2 功能:判断表达式的值,若为 true(真)则执行语句 1; 若为 false(假)则执行语句 If-false 语句。

2.2.5 语法结构 ①语句 1 和语句 2 可以是另一个 if 语句或其他控制语句 (嵌套)。此时 else 总是与它前 面最近且未配对的 if 配对。 ② 程序是将整个 if-false 控制结构看成一条语句处理的。 else 是 if 语句中的子句,不能 作为独立的语句单独使 用。 ③ 可以用条件运算符“:”来实现简单的双分支结构。

2.2.5 语法结构 (3)if 多分支结构 该结构的格式如下。 if(表达式 1)语句 1 else if(表达式 2) 语句 2 if(表达式 3) 语句 3 [else 语句 n]

① if 多分支结构实际上是一种规范化的 if 嵌套结构。 在这种结构中,if 语句嵌套在 else 之后,即符合以下格 式。 2.2.5 语法结构 ① if 多分支结构实际上是一种规范化的 if 嵌套结构。 在这种结构中,if 语句嵌套在 else 之后,即符合以下格 式。 if(表达式 1) 语句 1 else if(表达式 2) 语句 2 if(表达式 3) 语句 3 else … [else 语句 n]

2.2.5 语法结构 ② 从逻辑上看,各个表达式条件都应当是相互排斥的, 任意时刻最多有一个条件得以满足,不应出现既满足这个 条件又满足那个条件的情况。

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] }

2.2.5 语法结构 ① 表达式和各个常量表达式的类型一般为整型、字符型、 逻辑型和枚举型。各个常量表 达式的类型要与表达式的类 型相同或相容,所有常量表达式的值必须互不相同。 ② case 子句为若干个(包括 0 个),default 子句最多只能 有一个。从语法上讲,default 子句可以放在任何一个 case 子句的前面,此时还是先判断各个 case 常量表达式的值与 表达式 值的匹配(相等)情况,如果所有常量表达式的值 均不匹配,这才将 default 子句作为程序的 执行入口点。

2.2.5 语法结构 ③ 语句序列由若干条单语句组成,这些单语句可以不 写成复合语句的形式。必要时,case 语句标号后的语句序 列可以省略不写。 ④ 若语句序列中含有 break 语句,则执行到此就立即 跳出 switch 语句体。当所有 case 子句和 default 子句都带 有 break 子句时,它们出现的顺序可以任意。 ⑤ 当需要针对表达式的不同取值范围进行不同处理时, 使用 if 多分支结构比较方便, 因为 switch 语句只能对相 等关系进行测试,而 if 语句却可以用关系表达式对一个较 大范围内 的值进行测试。

2.2.5 语法结构 3.循环结构 (1)while 循环(当型循环) 该结构的格式如下。 while(表达式)语句 ① 表达式就是给定的循环条件,语句构成循环体,在 循环体中一般应用使循环趋于结束 的语句。 ② 先判断表达式,后执行语句。当一开始表达式的值 就为 false 时,程序 1 次也不循环。 ③ While 语句一般用于不知道具体循环次数的情况。

2.2.5 语法结构 (2)do-while 循环(直到型循环) 该结构的格式如下。 do 语句 whlie(表达式); ① 先执行语句,后判断表达式。程序至少要循环 1 次。 ② do-while 与 while 循环的不同之处在于:do-while 循环 的循环体在前,循环条件在后, 因此 do-while 循环时在 任何情况下都至少被执行一次;而 while 循环的循环条件 在前,循环 体在后,当循环条件一开始就不成立时,循环 体一次也不执行。这一点正是在构造循环结构 时决定使用 do-while 语句还是 while 语句的重要依据。

2.2.5 语法结构 (3)for 循环(次数循环) 该结构的格式如下。 for([表达式 1];[表达式 2];[表达式 3])语句 ①表达式 1 为 for 循环的初始化部分,一般用来设置循 环控制变量的初始值,当表达式 为一赋值表达式时,可包 含对变量的定义;表达式 2 为 for 循环的条件部分,是用 来判定循 环是否继续进行的依据;表达式 3 为 for 循环的 增量部分,一般用来修改循环控制变量的值。 ② 省略表达式 1 时应在 for 语句之前给循环变量赋初 值;省略表达式 2 时可认为循环的 条件始终为真。

2.2.5 语法结构 4.跳转语句 (1)break 语句(跳出语句) 该语句的格式如下。 break; 跳转语句用在 switch 结构中,break 语句使执行流程 跳出所在 switch 语句。用在循环结 构中,break 语句使 执行流程无条件地跳出本层循环体。

2.2.5 语法结构 ① break 语句经常用于使执行流程跳出死循环。 ② 若 break 语句位于多重循环的内层循环体中,则只 能跳出内层循环(本层循环),而 不能跳出其他外层循环。

2.2.5 语法结构 (2)continue 语句(继续语句) 该语句的格式如下。 continue; 用于在循环结构中,结束本次循环,即跳过循环体中 尚未执行的语句,接着 进行下一次循环判断。

2.2.5 语法结构 (3)goto 语句(转向语句) 该语句有两种格式,具 体如下。 ① 格式一 goto 语句标号; [语句序列] 语句标号:语句

2.2.5 语法结构 ② 格式二 语句标号:语句 [语句序列] goto 语句标号; goto 语句强制中止执行 goto 语句之后的语句,无条 件地跳转到语句标号对应的语句继续 执行

2.3 Arduino 基本函数 2.3.1 I/O 操作函数 1.pinMode(pin,mode) 描述:将制定的针脚配置成输出 或输入。 语法:pinMode(pin,mode)。 参数:pin,要设置模式的针脚;mode,INPUT 或 OUTPUT。

2.3.1 I/O 操作函数 2.digitalWrite(pin,value) 语法:digitaiWrite(pin,value)。 参数:pin,针脚编号(如 1,5,10,A0,A3); value,HIGH 或 LOW。 注意:模拟针脚也可以当作数字引脚使用。

2.3.1 I/O 操作函数 3.int digitalRead(pin) 描述:读取指定针脚的值,HIGH 或 LOW。 语法:digitalRead(pin)。 参数:pin,要读取的针脚号(int)。 返回:HIGH 或 LOW。 注意:如果脚悬空,digitalRead()会返回 HIGH 或 LOW(随机变化),模拟输入脚能当作数字脚使用。

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 无此选项)。

2.3.2 模拟 I/O 操作函数 ③ INTERAL1V1:1.1V 为基准电压(此选项劲针对 Arduino Mega)。 ④ INTERNAL2V56:2.56V 为基准电压(此选项仅针 对 Arduino Mega)。 ⑤ EXTERNAL:以 AREF 引脚(0~5V)的电压作为 基准电压。 注意事项:改变基准电压后,之前从 analogRead()读取 的数据可能不准确。

2.3.2 模拟 I/O 操作函数 2.analongRead() 描述:从指定的模拟引脚读取数值。Arduino 板包含一 个 6 通道(Mini 和 Na有 8 个通道,Mega 有 16 个通道)、 10 位模拟/数字转换器。这标识它将 0~5V 的输入电 压映像到 0~1023 的整数值,即每个读数对应电压值为 5V/1024,每单位 0.0049V(4.6mV)。 输入范围和精度可以通过 analogReference()改变,其大 约需要 100µs(0.0001s)来读取模拟输入,所以最大的阅 读速度是每秒 1000 次。

2.3.2 模拟 I/O 操作函数 语法:analogRead 的整数值。 数值的读取:从输入引脚(大部分板子从 0~5,Mini 和 Nano 从 0~7,Mega 从 0~15)读取数值。 返回:从 0~1023 的整数值。 注意事项:如果模拟输入引脚没有连入电路,由 analogRead()返回的值将根据很多项因素(例如其他模拟 输入引脚,手靠近板子等)产生波动。

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(完美打开)。

2.3.3 高级 I/O 1.tone() 描述:在一个针脚上产生一个特定频率的方波(50% 占空比)。持续时间可以设定,波形会一直产生直到调用 noTone()函数。该针脚可以连接压电峰鸣器或其他喇叭播 放声音。 注意:如果要在多个针脚是产生不同的音调,则要在 对下一个针脚使用 tone()函数前,先使用 noTone()函数。 语法:tone(pin,frequency)或 tone(pi,frequency,duration)。

2.3.3 高级 I/O 2.noTone() 语法:noTone(pin) 参数:pin,所要停止产生声音的引脚。

2.3.3 高级 I/O 3.ShiftOut() 描述:将数据的一个字节一位一位地移出。从最高有 效位(最左边)或最低有效位(最右边)开始,依次向数 据脚(DataPin)写入每一位,之后时钟脚被拉高或拉低, 指示之前的数据有效。 注意:如果所连接的设备时钟类型为上升沿(Rising Edges),则要确定在调用shiftOut()前时钟针脚为低电平, 如调用 digitalWrite(clockPin,LOW)。 语法:shiftOut(dataPin,clockPin,bitOrder,value)。

2.3.3 高级 I/O 4.shiftIn() 描述:将数据的一个字节一位一位地移入。从最高有 效位(最左边)或最低位有效位(最 右边)开始,对于每个位,先拉高时钟电位,再从数 据传输线中读取一位,再将时钟线拉低。 注意:这是一个软件实现,也可以参考硬件实现的 SPI 链接库,其速度更快,但只对特 定脚有效。 语法:byte incoming=shiftIn(dataPin,clockPi,bitOrder)。

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)。

2.3.4 shiftOut(dataPin,clockPin,bitOrder,val) ③ bitOrder:数据位移顺序选择位,该参数为 byte 类型,有两种类型可选择,分别是高 位先入 MSBFIRST 和低位先入 LSBFIRST。 ④ value:所要输出的数值。

2.3.5 pulseIn(pin,state,timeout) pulseIn 函数用于读取引脚脉冲的时间长度,而脉冲可 以是 HIGH 或 LOW。如果是 HIGH,函数将先等引脚变 为高电平,然后开始计时,一直到变为低电平为止。返回 脉冲持续的时间使用的,单位为 ms。如果超时还没有读 到的话,将返回 0。

2.3.6 时间函数 1.Millis() 描述:返回 Arduino 开发板运行当前程序开始的毫秒 数。这个数字将在约 50 天后溢出(归零)。 返回:返回从运行当前程序开始的毫秒数(无符号长 整数 unsigned long)。

2.3.6 时间函数 2.micros() 描述:返回 Arduino 开发板从运行当前程序开始的微秒数, 这个数字将在约 70 分钟后溢出(归零)。在 16MHz 的 Arduino 开发板上(比如 Duemilanove 和 Nano),这个函数 的分辨率为 4μs(即返回值总是 4 的倍数);在 8MHz 的 Arduino 开发板上(比如 LilyPad),这个函数的分辨率为 8μs。 返回:返回从当前程序开始的微秒数(无符号长整数)。

2.3.6 时间函数 3.delay() 描述:是程序设定的暂停时间(单位毫秒)。 语法:delay(ms)。 参数:ms,暂停的毫秒数(unsigned long)。

2.3.6 时间函数 4.delayMicroseconds() 描述:使程序暂停指定的一段时间(单位 ms)。目前, 能够产生的最大延时准确值是 16383。这可能会在未来的 Arduino 版本中有所改变。对于超过几千 μs 的延时,应该 使用 delay()代替。 语法:delayMicroseconds(us)。 参数:µs,暂停的时间,单位微秒(unsigned int)。

2.3.7 中断函数 1.外部中断函数 (1)attachInterrupt(interrupt,function,mode) 描述:当发生外部中断时,调用一个指定的函数。这 会用新的函数取代之前指定给中断的函数。大多数的 Arduino 板有两个外部中断:0 号中断(引脚 2)和 1 号中 断(引脚 3)。部分不同类型 Arduino 板的中断及引脚关 系,表中的 int 是 interrupt 的缩写,而不是代表整数的 int。 Arduino Due 有更强大的中断能力,其允许在所有的引脚 上触发中断程序,可以直接使用attachInterrupt 指定引脚号 码。

2.3.7 中断函数 语法:attachInterrupt(interrupt,function,mode)、 attachInterrupt(pin,function,mode) 。 参数:interrupt,中断的编号;pin,引脚号码(Due 专 用);function,中断发生时调用的函数,此函数必须不带 参数和不返回任何值;mode,定义何种情况发生中断,以 下四个常数为 mode 的有效值。 ① LOW:当引脚为低电位时,触发中断。 ② CHANGE:当引脚电位发生改变时,触发中断。 ③ RISING:当引脚由低电位变为高电位时,触发中断。 ④ FALLING:当引脚由高电位变为低电位时,触发中断。

2.3.7 中断函数 2.中断使能函数 (1)interrupts(中断) 描述:重新启用中断(使用 noInterrupts()命令后将被 禁用)。中断允许一些要任务在后台运行。禁用中断后一 些函数可能无法工作,传入信息可能会被忽略。中断会稍 微打乱代码的时间,可以在程序关键部分禁用中断。

2.3.7 中断函数 (2)noInterrupts() 描述:禁止中断。中断允许后在后台运行一些重要任 务,默认使能中断。禁止中断时部分函数会无法工作,通 信中接收到的信息也可能会丢失,中断会影响计时代码, 在某些特定的代码中也会失效。

2.3.8 串口收发函数 1.Serial.begin(speed) 描述:将串行数据传输速率设置为 bit/s(波特)。与 计算机进行通信时,可以使用这些波特率:300、1200、 2400、4800、9600、14400、19200、28800、38400、 57600 或 115200。当然,也可以指定其他波特率,例如, 针脚 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)。

2.3.8 串口收发函数 2.int Serial.available() 描述:从串口读取有效的字节数(字符)。这是已经 传输到并存储在串行接收缓冲区(能够存储 64 个字节) 的数据。Available()继承了 Stream 类。 语法:Serial.available()。此外,仅适用于 Arduimo Mage 的还有 3 个,分别是Serial1.available()、 Serial2.available()和 Serial3.available()。

2.3.8 串口收发函数 3.int Serial.read() 描述:读取传入的串口的数据,read()继承自 Stream 类。 语法:Serial.read()。此外,仅适用于 Arduimo Mage 的 还有 3 个,分别为 Serial1.read()、Serial2.read()和 Serial3.read()。 返回:传入串口数据的第一个字节(或‐1,如果没有 可用的数据,int)。

2.3.8 串口收发函数 4.Serial.flush() 描述:等待超出的串行数据完成传输(在 1.0 及以上的 版本中,flush()语句的功能不再是丢弃所有进入缓存器的 串行数据)。flush()继承自 Stream 类。 语法:Serial.flush()。此外,仅适用于 Arduino Mega 的 有 3 个,分别为 Serial1.flush()、Serial2.flush()和 Serial3.flush()。

2.3.8 串口收发函数 5.Serial.print(data) 描述:以 ASCII 文本形式打印数据到串口输出。此命 令可以采取多种形式。 若要发送一个字节,则使用 Serial.write()。 语法:Serial.println(val) 或 Serial.print(val,格式)。 参数:val,打印输出的值,可以为所有数据类型;格 式,指定进制(整数数据类型)或小数位数(浮点类型)。 返回:字节 print()将返回写入的字节数,但是否使 用(或读出)是可以设定的。

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()将返回写入的字节数,但可以选择 是否使用它。