(完整word版)arduino学习资料

上传人:guoxi****anyue 文档编号:58988672 上传时间:2022-03-01 格式:DOC 页数:51 大小:564KB
收藏 版权申诉 举报 下载
(完整word版)arduino学习资料_第1页
第1页 / 共51页
(完整word版)arduino学习资料_第2页
第2页 / 共51页
(完整word版)arduino学习资料_第3页
第3页 / 共51页
资源描述:

《(完整word版)arduino学习资料》由会员分享,可在线阅读,更多相关《(完整word版)arduino学习资料(51页珍藏版)》请在装配图网上搜索。

1、竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 arduino 学习笔记 arduino学习笔记1 - 什么是arduino ? 要了解arduino就先要了解什么是单片机,arduino平台的基础就是 AVR指令集的单片机。 1、什么是单片机?它与个人计算机有什么不同? 一台能够工作的计算机要有这样几个部份构成:中央处理单元 CPU (进行运算、控制)、随机存储器RAM (数据存储)、存储器ROM (程 序存储)、输入/输出设备I/O (串行口、并行输出口等)。在个人计算 机(PC)上这些部份被分成若干块芯片,安装在一个被称之为主板的 印刷线路板上。而在单片机中,这些

2、部份全部被做到一块集成电路芯 片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上 述部份外,还集成了其它部份如模拟量/数字量转换(A/D)和数字量 /模拟量转换(D/A)等。 2、单片机有什么用? 实际工作中并不是任何需要计算机的场合都要求计算机有很高的性 能,一个控制电冰箱温度的计算机难道要用酷睿处理器吗?应用的关 键是看是否够用,是否有很好的性能价格比。如果一台冰箱都需要用 酷睿处理起来进行温度控制,那价格就是天价了。 单片机通常用于工业生产的控制、生活中与程序和控制有关(如:电 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 子琴、冰箱、智能空调等)的场

3、合。 下图就是一个Atmega328P-PU单片机,基于AVR指令集的8位处理 器,频率20MHz,存储器空间32KB。 什么是Arduino ? Arduino是一个能够用来感应和控制现实物理世界的一套工具。 它由 一个基于单片机并且开放源码的硬件平台, 和一套为Arduino板编写 程序的开发环境组成。 Arduino可以用来开发交互产品,比如它可以读取大量的开关和传感 器信号,并且可以控制各式各样的电灯、电机和其他物理设备。 Arduino项目可以是单独的,也可以在运行时和你电脑中运行的程序 (例如:Flash, Processing,MaxMSP)进行通讯。Arduino 板你可 以选

4、择自己去手动组装或是购买已经组装好的; Arduino开源的IDE 可以免费下载得到。 Arduino的编程语言就像似在对一个类似于物理的计算平台进行相应 的连线,它基竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 于处理多媒体的编程环境。 为什么要使用 Arduino ? 有很多的单片机和单片机平台都适合用做交互式系统的设计。例如: Parallax Basic Stamp, Netmedia BSX-24 , Phidgets, MIT s Handyboard和其它等等提供类似功能的。 所有这些工具,你都不 需要去关心单片机编程繁琐的细节,提供给你的是一套容易使用

5、的工 具包。Arduino同样也简化了同单片机工作的流程,但同其它系统相 比Arduino在很多地方更具有优越性,特别适合老师,学生和一些业 余爱好者们使用: *便宜一和其它平台相比,Arduino板算是相当便宜了。最便 宜的Arduino版本可以自己动手制作,即使是组装好的成品, 其价格也不会超过200元。 跨平台 Arduino软件可以运行在 Windows , Macintosh OSX,和Linux操作系统。大部分其它的单片机系统都只能运行 在 Windows 上。 简易的编程环境初学者很容易就能学会使用Arduino编程 环境,同时它又能竭力为客户提供满意的产品和服务 以人为本 诚信

6、务实 勇于创新 乐于奉献 为高级用户提供足够多的高级应用。对于老 师们来说,一般都能很方便的使用 Process ing编程环境,所以 如果学生学习过使用Processing编程环境的话,那他们在使用 Arduino开发环境的时候就会觉得很相似很熟悉。 *软件开源并可扩展Arduino软件是开源的,对于有经验的 程序员可以对其进行扩展。Arduino编程语言可以通过C+库 进行扩展,如果有人想去了解技术上的细节, 可以跳过Arduino 语言而直接使用AVR C编程语言(因为Arduino语言实际上是 基于AVR C的)。类似的,如果你需要的话,你也可以直接往你 的Arduino程序中添加AV

7、R-C代码。 硬件开源并可扩展 Arduino板基于Atmel的ATMEGA8和 ATMEGA168/328 单片机。Arduino 基于 Creative Commons 许 可协议,所以有经验的电路设计师能够根据需求设计自己的模 块,可以对其扩展或改进。甚至是对于一些相对没有什么经验 的用户,也可以通过制作试验板来理解 Arduino是怎么工作的, 省钱又省事。 Arduino 基于AVR平台,对AVR库进行了二次编译封装,把端口 都打包好了,寄存器啦、地址指针之类的基本不用管。大大降低了软 件开发难度,适宜非专业爱好者使用。 优点和缺点并存, 因为是二次 编译封装, 代码不如直接使用 A

8、VR代码编写精练,代码执行效率与 代码体积都弱于AVR直接编译。 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 性能: Digital I/O 数字输入/输出端口 0 13。 Analog I/O 模拟输入/输出端口 0-5。 支持ICSP下载,支持TX/RX。 输入电压:USB接口供电或者5V-12V外部电源供电。 输出电压:支持3.3V级5V DC输出。 处理器:使用Atmel Atmega168 328 处理器,因其支持者众多, 已有公司开发出来 32位的MCU平台支持arduino。 目前arduino的控制板最新的为 Arduino Uno ,如下图:竭力为

9、客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 国内使用比较多的为 Arduino Duemilanove 2009 ,主要原因是 Uno的usb控制芯片封装方式改变,制造成本上升,其他变化不大, 性价比还是Arduino Duemilanove 2009 比较好。 因其开源特性,生产arduino控制板的厂商众多,同样的 Duemila nove 2009 就有很多种颜色 3 B ? A 5 3 OIGITflL 匸 iz匸 i: ArduinoTr,a Duemilanove * * q 左 厂二 From www.gk- 竭力为客户提供满意的产品和服务 以人为本 诚信务

10、实 勇于创新 乐于奉献 对于一些对电路板大小要求比较严格的地方, ardui no 团队提供了 ardui no Na no ,此板体积做的非常小。如下图: “叮于/ 5 硼 理嫌口 T 脇如口彳 碗湍口 J 朋 - J F * MtM.MMJlM CC 7T ARDuElMD HANG1 I 二 Wfrl p 口帀厳口 p GHP疚地 -鼻位* 口 P 輪出 豳 NNC1 3. 3V辅比 -如泊昌捋口 臨 jimut i 盅口盯 B IU! 避廊UEE揍口 From WWW.QE咅k-wmrksjhopMorn 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 From

11、 wwwrg Nkwo rk shopxo m ardui no板子上基本端口如图描述,对几个比较特殊的端口下面详 细说明下: VIN端口: VIN是in put voltage 的缩写,表示有外部电源时的输 入端口。 AREF:Refere nee voltage for the an alog in puts( 准电压)。使用analogReference() 命令调用 ICSP :也有称为 ISP (In System Programmer) ,就是一种线上 即时烧录,目前比较新的芯片都支持这种烧录模式, 包括大家常听说 的8051系列的芯片,也都慢慢采用这种简便的烧录方式。我们都知 道

12、传统的烧录方式,都是将被烧录的芯片,从线路板上拔起,有的焊 死在线路板上的芯片,还得先把芯片焊接下来才能烧录。为了解决这FTOI USB芯片 模拟输入的基 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 种问题,发明了 ICSP线上即时烧录方式。只需要准备一条 R232 线(连接烧录器),以及一条连接烧录器与烧录芯片针脚的连接线就 可以。电源的+5V,GND,两条负责传输烧录信息的针脚,再加上 一个烧录电压针脚,这样就可以烧录了。 arduino学习笔i己2 通过Arduino编译器查看串口数据 最简单的例子: void setup() 打开串口,设置波特率为9600

13、bps 传感器接到模拟口 5,数值根据自 从串口发送字符串并换Serial.begi n(9600); / void loop() int val; val=a nalogRead(5); 己的需要可变 Serial.pri ntln (val,DEC); 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 delay(IOO); 如果电路安装正确,按照示例代码运行、上传,然后点击编译器的 Serial Mo nitor 按钮,就可以看到从代码定义的输入口(这儿是 模拟口 5 )获取的数据了。 arduino学习笔记3 arduino 语言 Arduino语言是建立在C/C

14、+基础上的,其实也就是基础的 C 语言,Arduino语言只不过把AVR单片机(微控制器)相关的 一些参数设置都函数化,不用我们去了解他的底层,让我们不 了解AVR单片机(微控制器)的朋友也能轻松上手。 在与Arduino DIYER接触的这段时间里,发现有些朋友对 Arduino语言还是比较难入手,那么这里我就简单的注释一下 Arduino语言(本人也是半罐子水,有错的地方还请各位指正) 关键字: if if.else for *基础C语言 *竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 switch.case_ while do.while_ * break *

15、continue_ retur n goto 语法符号: - II 运算符:竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 匸 = & -| !. + += -= *= * /= 数据类型: * boolean_布尔类型 * char byte.字节类型 int * unsignedn_ * long unsignedjong_ 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 * float. * double * string * array void 数据类型转换: char(). * byte() int() 4 Iong()_ float

16、()_ 常量: HIGH | LOW 表示数字IO 口的电平、HIGH表示高电平(1), LOW表示低电平(0)o INPUT | OUTPUT表示数字IO 口的方向,INPUT表示输入(高 阻态),OUTPUT 表示输出(AVR能提供5V电压40mA电 流)。 true | false true 表示真(1), false 表示假(0)。 *竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 以上为基础c语言的关键字和符号,有c语言基础的都应该了 解其含义,这里也不作过多的解释。 结构 * void setup ()初始化变量,管脚模式,调用库函数等 * void loo

17、p ()连续执行函数内的语句 功能 数字I/O * pinMode_(pin, mode) 数字IO 口输入输出模式定义函数,pin 表示为013, mode表示为INPUT或OUTPUT。 digitalWrite_(pin, value)数字 IO 口输出电平定义函数,pin 表示为013, value表示为HIGH或LOW。比如定义 HIGH 可以驱动LED。 * int digitalRead_(pin) 数字IO 口读输入电平函数,pin表示为 013, value表示为HIGH或LOW。比如可以读数字传感器。 模拟I/O int analogRead_(pin) 模拟 IO 口读函

18、数,pin 表示为 05 (Arduino Diecimila 为 0 5, Arduino nano 为 0 7)。比如可 以读模拟传感器(10位AD , 05V表示为01023 )。 * *Arduino 语言 *竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 analogWrite_(pin, value) - PWM 数字 IO 口 PWM 输出函数, Arduino数字IO 口标注了 PWM的IO 口可使用该函数,pin表 示3, 5, 6, 9,10, 11 , value表示为0255。比如可用于电机 PWM调速或音乐播放。 扩展I/O * shiftOu

19、t_(dataPin, clockPin, bitOrder, value) SPI 外部 IO 扩 展函数,通常使用带SPI接口的74HC595做8个IO扩展, dataPin为数据口,clockPin为时钟口,bitOrder为数据传输方 向(MSBFIRST 高位在前,LSBFIRST 低位在前),value表 示所要传送的数据(0255),另外还需要一个IO 口做 74HC595的使能控制。 * un sig ned long pulse In (pin, value) 脉冲长度记录函数,返回 时间参数(us), pin表示为013, value为HIGH或LOW。 比如value为H

20、IGH,那么当pin输入为高电平时,开始计时, 当pin输入为低电平时,停止计时,然后返回该时间。 时间函数 * unsigned long millis () 返回时间函数(单位 ms),该函数是 指,当程序运行就开始计时并返回记录的参数,该参数溢出大 概需要50天时间。 * delay (ms) 延时函数(单位ms )。 * delayMicroseconds_(us)延时函数(单位 us)。 数学函数 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 * min (x, y)求最小值 * max (x, y)求最大值 * abs (x) 计算绝对值 * constr

21、ain_(x, a, b)约束函数,下限a,上限b,x必须在ab之 间才能返回。 * map (value, fromLow, fromHigh, toLow, toHigh) 约束函数, value 必须在 fromLow 与 toLow 之间和 fromHigh 与 toHigh 之 间。 * pow (base, exponent) 开方函数,base 的 exponent 次方。 * sq (x) 平方 * sqrt (x) 开根号 三角函数 * sin (rad) * cos (rad) tan (rad) 随机数函数 randomSeed_(seed) 随机数端口定义函数,seed

22、表示读模拟 口 analogRead(pin)函数。 * long random (max) 随机数函数,返回数据大于等于 0,小于 max。 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 Io ng ran dom (mi n, max) 随机数函数,返回数据大于等于 min,小于 max。 外部中断函数 * attachlnterrupt_(interrupt, , mode) 外部中断只能用到数字 10 口 2和3,interrupt表示中断口初始0或1,表示一个功能 函数,mode : LOW低电平中断,CHANGE有变化就中断, RISING上升沿中断,FA

23、LLING下降沿中断。 * detachInterrupt(interrupt) 中断开关,interrupt=1 开, interrupt=0 关。 中断使能函数 interrupts_()使能中断 nol nterrupts_()禁止中断 串口收发函数竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 Serial.begin_(speed)串口定义波特率函数,speed表示波特 率,如 9600,19200 等。 int Serial.available_()判断缓冲器状态。 int Serial.read_() 读串口并返回收到参数。 Serial.flush_()

24、清空缓冲器。 Serial.print_(data)串口输出数据。 Serial.pri ntln_ (data) 串口输出数据并带回车符。 /*/ 官方库文件 EEPROM. - EEPROM 读写程序库 Ethernet -以太网控制器程序库 LiquidCrystal_ - LCD 控制程序库 Servo -舵机控制程序库 SoftwareSerial_ -任何数字10 口模拟串口程序库 -Stepper -步进电机控制程序库 Wire - TWI/I2C总线程序库 Matrix. - LED矩阵控制程序库 Sprite - LED矩阵图象处理控制程序库 * *Arduino 语言库文件

25、 *竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 非官方库文件 * DateTime_ - a library for keep ing track of the curre nt date and time in software. * Debo unce_ - for read ing no isy digital in puts (e.g. from butt ons) * Firmata. - for com muni cat ing with applicati ons on the computer using a sta ndard serial pro

26、tocol. GLCD - graphics routines for LCD based on the KS0108 or equivale nt chipset. LCD - control LCDs (using 8 data lines) * LCD-4-Bi匕-control LCDs (using 4 data lines) * LedControl_ - for controlling LED matrices or seven-segment displays with a MAX7221 or MAX7219. * LedC on trol_ - an alter nativ

27、e to the Matrix library for driv ing multiple LEDs with Maxim chips. * Messenger. - for processing text-based messages from the computer * Metro - help you time actions at regular intervals * MsTimer2_ - uses the timer 2 in terrupt to trigger an acti on every N millisec on ds. * On eWire. - con trol

28、 devices (from Dallas Semic on ductor) that use 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 the One Wire protocol. PS2Keyboard_ - read characters from a PS2 keyboard. Servo. - provides software support for Servo motors on any pi ns. * Servotimer1_ - provides hardware support for Servo motors on pins 9 and 1

29、0 Simple.Message.System _ - send messages between Ardui no and the computer * SSerial2Mobile_ - send text messages or emails using a cell phone (via AT comma nds over software serial) * TextString_ - handle strings TLC5940. - 16 channel 12 bit PWM controller. X10 - Sending X10 sig nals over AC power

30、 lines /*/ arduino学习笔记4数据类型 有多种类型的变量,如下所述 boolea n 布尔 char 字符 byte 字节 int 整数 unsigned int无符号整数竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 long 长整数 un sig ned long无符号长整数 float 浮点 double 双字节浮点 string 字符串 array 数组 arduino学习笔记5 Arduuino复合运算符 +=,= *= /= Description 扌苗述 Perform a mathematical operati on on a vari

31、able with ano ther con sta nt or variable. The += (et al) operators are just a convenient shortha nd for the expa nded syn tax, listed below. 对一个变量和另一个参数或变量完成一个数学运算。 +=(以及其他) 可以缩短语法长度。 Syntax语法 x += y; II equivale nt to the expressi on x = x + y; =x + y; x -= y; II equivale nt to the expressi on x =

32、 x - y; II等价于x II等价于x 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 =x - y;竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 x *= y; / equivale nt to the expressi on x = x * y; =x * y; x /= y; / equivale nt to the expressi on x = x / y; /等价于x /等价于x =x / y; Parameters 参数 x: any variable type x:任何变量类型 y: any variable type or

33、 con sta nt y:任何变量类型或常数 Examples 范例 x = 2; x += 4; x -= 3; x *= 10; x /= 2; / x now contains 6 / x now contains 3 / x now contains 30 / x now contains 15 / x现在为6 / x现在为3 / x现在为30 / x现在为15 Syntax语法 x+; /in creme nt x by one and retur ns the old value of x /将x的值加1并返回原来的x的值。 +x; /in creme nt x by one a

34、nd retur ns the new value of x /将x的值加1并返回现在 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 的x的值。 x- ; II decreme nt x by one and returns the old value of x II 将 x的值减1并返回原来的x的值。 -x ; / decreme nt x by one and retur ns the new value of x II 将x的值减1并返回现在的x的值。 Parameters 参数 x: an in teger or long (possibly un sig n

35、ed) x: 个整数或长整数(可以无符号) Returns 返回 The origi nal or n ewly in creme nted I decreme nted value of the variable. 返回变量原始值或增加/ 消耗后的新值 Examples 范例 x = 2; y = +x; II x now contains 3, y contains 3 y = x-; II x contains 2 aga in, y still contains 3 仍然为2,y将为3 arduino学习笔记6 Arduino 基础 在学语言之间,还要做的一个功课就是要明白程序的构架,

36、 这个也同 样简单,大体可分为几个部分。 II x现在为3, II x现在 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 1、 声明变量及接口名称(int val;int ledPin=13; )。 2、 setup() - 函数在程序开始时使用,可以初始化变量、接口模式、 启用库等(例如:pinMode(ledPin,OUTUPT);)。 3、 loop () - 在setup()函数之后,即初始化之后,loop()让你 的程序循环地被执行。使用它来运转 Arduino。 接下来就开始学习一下几个基本函数。 1、 pinMode(接口名称OUTPUT或INPUT)#

37、接口定义为输入或输 出接口,用在setup()函数里。 2、 digitalWrite( 接口名称,HIGH或LOW)将数字接口值至高或 低。 3、 digitalRead (接口名称)一一读出数字接口的值。 4、 analogWrite(接口名称,数值)一一给一个接口写入模拟值(PWM 波)。对于 ATmega168芯片的Arduino (包括Mini或BT),该函数 可以工作于3, 5, 6, 9, 10和11号接口。 老的ATmega8芯片的USB 和serial Ardui no 仅仅支持9, 10 和11号接口。 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献

38、 5、 analogRead(接口名称) - 从指定的模拟接口读取值, Arduino 对该模拟值进行10-bit的数字转换,这个方法将输入的 0-5电压值 转换为0到1023间的整数值。 6、 delay() 延时一段时间,delay(1000)为一秒。 7、 Serial.begin(波特率)设置串行每秒传输数据的速率(波特 率)。在同计算机通讯时,使用下面这些值:300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 或 115200。你也可以 在任何时候使用其它的值,比如,与0号或1号插口通信就要求特殊 的波特率。用

39、在setup()函数里 & Serial.read() -读取持续输入的数据。 9、Serial.print( 数据,数据的进制) - 从串行端口输出数据。 Serial.print( 数据)默认为十进制等于 Serial.print( 数据,DEC。 10、Serial.println( 数据,数据的进制) - 从串行端口输出数据, 跟随一个回车和一个换行符。这个函数所取得的值与Serial.print() 一样。 以上几个函数是常用基本函数,还有很多以后会慢慢学习 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 arduino学习笔记7函数 输入输出函数 Ardui

40、no内含了一些处理输出与输入的切换功能,相信已经从书中程 式范例略知一二。 pinM ode(p in, mode) 将数位脚位(digital pin) 指定为输入或输出。 范例: pin Mode (7, INPUT); / 将脚位7设定为输入模式 digitalWrite(pin, value) 将数位脚位指定为开或关。脚位必须先透过pinMode明示为输入或输 出模式digitalWrite 才能生效。 范例: digitalWrite(8,HIGH); / 将脚位8设定输出高电位 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 int digitalRead(

41、p in) 将输入脚位的值读出,当感测到脚位处于高电位时时回传 HIGH否 则回传LOW/ 范例: val = digitalRead(7); / 读出脚位7的值并指定给val int an alogRead(p in) 读出类比脚位的电压并回传一个 0到1023的数值表示相对应的0到 5的电压值。 范例: val = analogRead(O); / 读出类比脚位0的值并指定给val变数 an alogWrite(p in, value) 改变PWM脚位的输出电压值,脚位通常会在 3、5、6、9、10与11。 Value变数范围0-255,例如:输出电压2.5伏特(V),该值大约是 12 8

42、。 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 范例: analogWrite(9,128); / 输出电压约 2.5 伏特(V) un sig ned long pulse ln(pin, value) 设定读取脚位状态的持续时间,例如使用红外线、加速度感测器测得 某一项数值时,在时间单位内不会改变状态。 范例: time = pulsein(7,HIGH); / 设定脚位7的状态在时间单位内保持 为 HIGH shiftOut(dataPin, clockPin, bitOrder, value) 把资料传给用来延伸数位输出的暂存器,函式使用一个脚位表示资 料、

43、一个脚位表示时脉。bitOrder用来表示位元间移动的方式 (LSBFIRST最低有效位元或是 MSBFIRS最高有效位元),最后value 会以byte形式输出。此函式通常使用在延伸数位的输出。 范例: 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 shiftOut(dataPin, clockPin, LSBFIRST, 255); 时间函数 控制与计算晶片执行期间的时间 un sig ned long millis() 回传晶片开始执行到目前的毫秒 范例: duration 二 millis()-lastTime; / 表示自lastTime至当下的时 间 de

44、lay(ms) 暂停晶片执行多少毫秒 范例: delay(500); / 暂停半秒(500毫秒) 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 delay Microsec on ds(us) 暂停晶片执行多少微秒 范例: delayMicroseco nds(1000); / 暂停 1 豪秒 数学函式 三角函数以及基本的数学运算 min(x, y) 回传两数之间较小者 范例: val = min(10,20); / max(x, y) 回传10 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 回传两数之间较大者 范例: val = max(1

45、0,20); / 回传 20 abs(x) 回传该数的绝对值,可以将负数转正数。 范例: val = abs(-5); II 回传 5 con stra in(x, a, b) 判断x变数位于a与b之间的状态。x若小于a回传a;介于a与b 之间回传x本身;大于b回传b 范例: val = constrain(analogRead(O), 0, 255); II map(value, fromLow, fromHigh, toLow, toHigh)忽略大于255的数 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 将value变数依照fromLow与fromHigh范围

46、,对等转换至toLow与 toHigh范围。时常使用于读取类比讯号,转换至程式所需要的范围 值。 例如: val = map(analogRead(0),0,1023,100, 200); / 取到的讯号对等转换至100 - 200之间的数值。 double pow(base, exp onent) 回传一个数(base)的指数(exponent)值 范例: double sqrt(x)将analog0所读 double x = pow(y, 32); / 设定x为y的32次方 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 回传double型态的取平方根值。 范例:

47、double a = sqrt(1138); / 回传1138平方根的近似值 33.73425674438 double sin( rad) 回传角度(radians )的三角函数sine值。 范例: double sine = sin(2); II 近似值 0.90929737091 double cos(rad) 回传角度(radians )的三角函数cosine值。 范例: double cosi ne = cos(2); / 近似值-0.41614685058 double tan( rad) 回传角度(radians )的三角函数tangent值。 竭力为客户提供满意的产品和服务 以

48、人为本 诚信务实 勇于创新 乐于奉献 范例: double tan ge nt = tan (2); / 近似值-2.18503975868 乱数函式 产生乱数 ran domSeed(seed) 事实上在Arduino里的乱数是可以被预知的。所以如果需要一个真正 的乱数,可以呼叫此函式重新设定产生乱数种子。 你可以使用乱数当 作乱数的种子,以确保数字以随机的方式出现,通常会使用类比输入 当作乱数种子,藉此可以产生与环境有关的乱数(例如:无线电波、 宇宙雷射线、电话和萤光灯发出的电磁波等)。 范例: ran domSeed(a nalogRead(5); / 使用类比输入当作乱数种子 long

49、 ran dom(max) 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 long ran dom (min, max) 回传指定区间的乱数,型态为long。如果没有指定最小值,预设为0 范例: long randnum 二 random(0, 100); / 回传 0-99 之间的数字 long randnum 二 random(11); / 回传 0 -10 之间的数字 序列通讯 你可以在第五章看见一些使用序列埠与电脑交换讯息的范例, 以下是 函式解释。 Serial.begi n( speed) 你可以指定Arduino从电脑交换讯息的速率,通常我们使用9600

50、 bps。 当然也可以使用其他的速度,但是通常不会超过 115,200 bps (每秒 位元组)。 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 范例: Serial.begi n(9600); Serial.pri nt(data) Serial.print(data, encoding) 经序列埠传送资料,提供编码方式的选项。如果没有指定,预设以一 般文字传送。 范例: Serial.print(75); II 列印出75 Serial.pri nt(75, DEC); / 列印出 75 Serial.pri nt(75, HEX); / 4B (75 的十六进位

51、) Serial.pri nt(75, OCT); / 113 (75 in 的八进位) Serial.pri nt(75, BIN); / 1001011 (75 的二进位) 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 Serial.print(75, BYTE); II K(以 byte 进行传送,显示以 ASCII 编码方式) Serial.pri ntl n( data) Serial.println(data, encoding) 与Serial.print() 相同,但会在资料尾端加上换行字元()。意思 如同你在键盘上打了一些资料后按下 Enter。 范

52、例: Serial.println(75); / 列印出75 Serial.println(75, DEC); / 列印出75 Serial.println(75, HEX); / 4B Serial.println(75, OCT); / 113 Serial.println(75, BIN); / 1001011 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 Serial.println(75, BYTE); / K int Serial.available() 回传有多少位元组(bytes )的资料尚未被read()函式读取,如果回 传值是0代表所有序列埠上资料

53、都已经被read()函式读取。竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 范例: int count = Serial.available(); int Serial.read() 读取Ibyte的序列资料 范例: int data = Serial.read(); Serial.flush() 有时候因为资料速度太快,超过程式处理资料的速度, 函式清除缓冲区内的资料。经过此函式可以确保缓冲区 资料都是最新的。 你可以使用此 (buffer)内的 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 范例: Serial.flush(); ardu

54、ino学习笔记8数字输入 在数字电路中开关(switch )是一种基本的输入形式,它的作用是保 持电路的连接或者断开。Arduino从数字I/O管脚上只能读出高电平 (5V)或者低电平(0V),因此我们首先面临到的一个问题就是如 何将开关的开/断状态转变成Arduino能够读取的高/低电平。 解决的 办法是通过上/下拉电阻,按照电路的不同通常又可以分为正逻辑 (Positive Logic )和负逻辑(In verted Logic )两种。 在正逻辑电路中,开关一端接电源,另一端则通过一个 10K的下拉 电阻接地,输入信号从开关和电阻间引出。当开关断开的时候,输入 信号被电阻 拉”向地,形成

55、低电平(0V);当开关接通的时候,输入 信号直接与电源相连,形成高电平。对于经常用到的按压式开关来讲, 就是按下为高,抬起为低。 在负逻辑电路中,开关一端接地,另一端则通过一个 10K的上拉电 阻接电源,输入信号同样也是从开关和电阻间引出。当开关断开时, 输入信号被竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 电阻 拉”向电源,形成高电平(5V);当开关接通的时候, 输入信号直接与地相连,形成低电平。对于经常用到的按压式开关来 讲,就是按下为低,抬起为高。 5V N * 匚 INPUT; ?10K 为了验证Arduino数字I/O的输入功能,我们可以将开关接在Ardu

56、ino 的任意一个数字I/O管脚上(13除外),并通过读取它的接通或者 断开状态,来控制其它数字I/O管脚的高低。本实验采用的原理图如 下所示,其中开关接在数字I/O的7号管脚上,被控的发光二极管接 在数字I/O的13号管脚上:竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 相应的代码为: int ledPin = 13; int switchP in = 7; LED CO lh 9 S 寸 E z r-i C-J C-J 5V 10K 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 int value = 0; void setup() pi

57、nM ode(ledPi n, OUTPUT); pinM ode(switchPi n, INPUT); void loop() value = digitalRead(switchPi n); if (HIGH = value) / turn LED off digitalWrite(ledP in 丄OW); else / turn LED on digitalWrite(ledPin, HIGH); 由于采用的是负逻辑电路, 开关按下时用digitalRead()函数读取到的 值为LOW,此时再用digitalWrite()函数将发光二极管所在的管脚置 为高,点亮发光二极管。同理,当开

58、关抬起时,发光二极管将被熄灭, 这样我们就实现了用开关来控制发光二极管的功能。 arduino学习笔记9 Arduino的数字输出 Arduino的数字I/O被分成两个部分,其中每个部分都包含有 6个可 用的I/O管竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 脚,即管脚2到管脚7和管脚8到管脚13。除了管脚13 上接了一个1K的电阻之外,其他各个管脚都直接连接到ATmega上。竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 我们可以利用一个6位的数子跑马灯,来对Arduino数子I/O的输出 功能进行验证,以下是相应的原理图: R6 R5 艮

59、4 R3 R2 R1 IK T1K 11K pK TKJK Ardurno s 寸 cn d i 口 电路中在每个I/O管脚上加的那个1K电阻被称为限流电阻,由于发 光二极管在电路中没有等效电阻值,使用限流电阻可以使元件上通过 的电流不至于过大,能够起到保护的作用。 该工程对应的代码为: int BASE = 2; int NUM = 6; L-. C-3 -I IIIeN GCI =s 2 2 EQ 寸Q 呂 LED6 .EDS .ED4 .ED3 -ED2 正 D1 9 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 int in dex = 0; void set

60、up() for (int i = BASE; i BASE + NUM; i +) pi nM ode(i, OUTPUT); void loop() for (int i = BASE; i BASE + NUM; i +) digitalWrite(i, LOW); digitalWrite(BASE + in dex, HIGH); in dex = (in dex + 1) % NUM; delay(IOO); 下载并运行该工程,连接在Arduino数字I/O管脚2到管脚7上的发 光二极管会依次点亮0.1秒,然后再熄灭:竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐

61、于奉献 这个实验可以用来验证数字I/O输出的正确性。Arduino上一共有十 二个数字I/O管脚,我们可以用同样的办法验证其他六个管脚的正确 性,而这只需要对上述工程的第一行做相应的修改就可以了: int BASE = 8; arduino学习笔记10 Arduino的串口输入 串行通信是在实现在PC机与微控制器进行交互的最简单的办法。 之 前的PC机上一般都配有标准的 RS-232或者RS-422接口来实现串 行通信,但现在这种情况已经发生了一些改变,大家更倾向于使用 USB这样一种更快速但同时也更加复杂的方式来实现串行通信。尽 管在有些计算机上现在已经找不到 RS-232或者RS-422接

62、口了, 但 我们仍可以通过USB/串口或者PCMCIA/串口这样的转换器, 在这 些设备上得到传统的串口。 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 通过串口连接的Arduino在交互式设计中能够为PC机提供一种全新 的交互方式,比如用PC机控制一些之前看来非常复杂的事情,像声 音和视频等。很多场合中都要求 Arduino能够通过串口接收来自于 PC机的命令,并完成相应的功能,这可以通过 Arduino语言中提供 的Serial.read()函数来实现。 在这一实验中我们同样不需要任何额外的电路, 而只需要用串口线将 Arduino和PC机连起来就可以了,相应的

63、Arduino工程代码为: int ledPin = 13; int val; void setup() pi nM ode(ledPi n, OUTPUT); Serial.begi n(9600); void loop() val = Serial.read(); if (-1 != val) if (H = val) digitalWrite(ledPin, HIGH); delay(500); 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 digitalWrite(ledPi n, LOW); 把工程下载到Arduino模块中之后,在Arduino集成开发环境

64、中打开 串口监视器并将波特率设置为 9600,然后向Arduino模块发送字符 H,如下图所示: 该工程运行起来之后会不断调用 Serial.read()函数从串口获得数据。 竭力为客户提供满意的产品和服务 以人为本 诚信务实 勇于创新 乐于奉献 Arduino语言提供的这个函数是不阻塞的,也就是说不论串口上是否 真的有数据到达,该函数都会立即返回。 Serial.read()函数每次只读 取一个字节的数据,当串口上有数据到达的时候,该函数的返回值为 到达的数 据中第一个字符的ASCII码;当串口上没有数据到达的时 候,该函数的返回值则为-1。 Arduino语言的参考手册中没 有对Serial.read()函数做过多的说明, 我的一个疑问是如果PC机一次发送的数据太多,Arduino是否提供 相应的串口缓存功能来保证数据不会丢失? Arduino语言中提供的另 外一个函数Serial.available()或许能够帮助我们用实验来进行验证: int ledPin = 13; int val; void setup() pinM ode(ledPi n, OUTPUT); Serial.begi n(9600); void loop() val = Serial.read(); if (-1 != val)

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!