arduino学习资料

上传人:沈*** 文档编号:102072025 上传时间:2022-06-06 格式:DOC 页数:183 大小:7.50MB
收藏 版权申诉 举报 下载
arduino学习资料_第1页
第1页 / 共183页
arduino学习资料_第2页
第2页 / 共183页
arduino学习资料_第3页
第3页 / 共183页
资源描述:

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

1、-arduino学习笔记arduino学习笔记1 - 什么是arduino?要了解arduino就先要了解什么是单片机,arduino平台的根底就是AVR指令集的单片机。1、什么是单片机?它与个人计算机有什么不同?一台能够工作的计算机要有这样几个部份构成:中央处理单元CPU进展运算、控制、随机存储器RAM数据存储、存储器ROM程序存储、输入/输出设备I/O串行口、并行输出口等。在个人计算机PC上这些部份被分成假设干块芯片,安装在一个被称之为主板的印刷线路板上。而在单片机中,这些部份全部被做到一块集成电路芯片中了,所以就称为单片单芯片机,而且有一些单片机中除了上述部份外,还集成了其它部份如模拟量

2、/数字量转换A/D和数字量/模拟量转换D/A等。2、单片机有什么用?实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能,一个控制电冰箱温度的计算机难道要用酷睿处理器吗?应用的关键是看是否够用,是否有很好的性能价格比。如果一台冰箱都需要用酷睿处理起来进展温度控制,那价格就是天价了。单片机通常用于工业生产的控制、生活中与程序和控制有关如:电子琴、冰箱、智能空调等的场合。下列图就是一个Atmega328P-PU单片机,基于AVR指令集的8位处理器,频率20MHz,存储器空间32KB。什么是Arduino?Arduino是一个能够用来感应和控制现实物理世界的一套工具。 它由一个基于单片机并且

3、开放源码的硬件平台,和一套为Arduino板编写程序 的开发环境组成。Arduino可以用来开发交互产品,比方它可以读取大量的开关和传感器信号,并且可以控制各式各样的电灯、电机和其他物理设备。Arduino工程可以是单独的,也可以在运行时和你电脑中运行的程序例如:Flash,Processing,Ma*MSP进展通讯。Arduino板你可以选择自己去手动组装或是购置已经组装好的;Arduino开源的IDE可以免费下载得到。Arduino的编程语言就像似在对一个类似于物理的计算平台进展相应的连线,它基于处理多媒体的编程环境。为什么要使用Arduino?有很多的单片机和单片机平台都适合用做交互式系

4、统的设计。例如:Paralla* Basic Stamp, Netmedias B*-24,Phidgets,MITs Handyboard 和其它等等提供类似功能的。 所有这些工具,你都不需要去关心单片机编程繁琐的细节,提供应你的是一套容易使用的工具包。 Arduino同样也简化了同单片机工作的流程,但同其它系统相比Arduino在很多地方更具有优越性,特别适合教师,学生和一些业余爱好者们使用: 廉价 和其它平台相比,Arduino板算是相当廉价了。最廉价的Arduino版本可以自己动手制作,即使是组装好的成品,其价格也不会超过200元。 跨平台 Arduino软件可以运行在Windows,

5、Macintosh OS*,和Linu*操作系统。大局部其它的单片机系统都只能运行在Windows上。 简易的编程环境 初学者很容易就能学会使用Arduino编程环境,同时它又能为高级用户提供足够多的高级应用。对于教师们来说,一般都能很方便的使用Processing 编程环境,所以如果学生学习过使用Processing 编程环境的话,那他们在使用Arduino开发环境的时候就会觉得很相似很熟悉。 软件开源并可扩展 Arduino软件是开源的,对于有经历的程序员可以对其进展扩展。Arduino编程语言可以通过C+库进展扩展,如果有人想去了解技术上的细节,可以跳过Arduino语言而直接使用AVR

6、 C 编程语言因为Arduino语言实际上是基于AVR C的。类似的,如果你需要的话,你也可以直接往你的Arduino程序中添加AVR-C 代码。 硬件开源并可扩展 Arduino板基于 Atmel 的ATMEGA8 和ATMEGA168/328 单片机。Arduino基于Creative mons 许可协议,所以有经历的电路设计师能够根据需求设计自己的模块,可以对其扩展或改良。甚至是对于一些相对没有什么经历的用户,也可以通过制作试验板来理解Arduino是怎么工作的,省钱又省事。 Arduino基于AVR平台,对AVR库进展了二次编译封装,把端口都打包好了,存放器啦、地址指针之类的根本不用管

7、。大大降低了软件开发难度,适宜非专业爱好者使用。优点和缺点并存,因为是二次编译封装,代码不如直接使用AVR代码编写精练,代码执行效率与代码体积都弱于AVR直接编译。性能:Digital I/O 数字输入/输出端口013。Analog I/O 模拟输入/输出端口0-5。支持ICSP下载,支持T*/R*。输入电压:USB接口供电或者5V-12V外部电源供电。输出电压:支持3.3V级5V DC输出。处理器:使用Atmel Atmega168 328处理器,因其支持者众多,已有公司开发出来32位的MCU平台支持arduino。目前arduino的控制板最新的为Arduino Uno,如下列图:国使用比

8、拟多的为Arduino Duemilanove 2009,主要原因是Uno的usb控制芯片封装方式改变,制造本钱上升,其他变化不大,性价比还是Arduino Duemilanove 2009比拟好。因其开源特性,生产arduino控制板的厂商众多,同样的Duemilanove 2009就有很多种颜色。对于一些对电路板大小要求比拟严格的地方,arduino团队提供了arduino Nano,此板体积做的非常小。如下列图:arduino板子上根本端口如图描述,对几个比拟特殊的端口下面详细说明下:VIN端口:VIN是input voltage的缩写,表示有外部电源时的输入端口。AREF:Refere

9、nce voltage for the analog inputs(模拟输入的基准电压。使用analogReference()命令调用。ICSP:也有称为ISPIn System Programmer),就是一种线上即时烧录,目前比拟新的芯片都支持这种烧录模式,包括大家常听说的8051系列的芯片,也都慢慢采用这种简便的烧录方式。我们都知道传统的烧录方式,都是将被烧录的芯片,从线路板上拔起,有的焊死在线路板上的芯片,还得先把芯片焊接下来才能烧录。为了解决这种问题,创造了ICSP线上即时烧录方式。只需要准备一条R232线连接烧录器,以及一条连接烧录器与烧录芯片针脚的连接线就可以。电源的+5V,GN

10、D,两条负责传输烧录信息的针脚,再加上一个烧录电压针脚,这样就可以烧录了。arduino学习笔记2通过Arduino编译器查看串口数据最简单的例子:void setup()Serial.begin(9600); / 翻开串口,设置波特率为9600 bpsvoid loop() int val; val=analogRead(5);/传感器接到模拟口5,数值根据自己的需要可变 Serial.println(val,DEC);/从串口发送字符串并换行 delay(100);如果电路安装正确,按照例如代码运行、上传,然后点击编译器的Serial Monitor按钮,就可以看到从代码定义的输入口这儿是

11、模拟口5获取的数据了。arduino学习笔记3 arduino语言 Arduino语言是建立在C/C+根底上的,其实也就是根底的C语言,Arduino语言只不过把AVR单片机微控制器相关的一些参数设置都函数化,不用我们去了解他的底层,让我们不了解AVR单片机微控制器的朋友也能轻松上手。 在与Arduino DIYER接触的这段时间里,发现有些朋友对Arduino语言还是比拟难入手,则这里我就简单的注释一下Arduino语言本人也是半罐子水,有错的地方还请各位指正。/*根底C语言*/关键字: if if.else for switch case while do. while break con

12、tinue return goto语法符号: ; / /* */运算符: = + - * / % = != = & | ! + - += -= *= /=数据类型: boolean布尔类型 char byte字节类型 int unsigned int long unsigned long float double string array void数据类型转换: char() byte() int() long() float()常量: HIGH|LOW 表示数字IO口的电平,HIGH表示高电平1,LOW表示低电平0。 INPUT|OUTPUT表示数字IO口的方向,INPUT表示输入高阻态,O

13、UTPUT 表示输出AVR能提供5V电压 40mA电流。 true|falsetrue表示真1,false表示假0。 /*/ 以上为根底c语言的关键字和符号,有c语言根底的都应该了解其含义,这里也不作过多的解释。/*Arduino 语言*/构造 voidsetup()初始化变量,管脚模式,调用库函数等 voidloop() 连续执行函数的语句 功能数字 I/O pinMode(pin, mode) 数字IO口输入输出模式定义函数,pin表示为013, mode表示为INPUT或OUTPUT。 digitalWrite(pin, value) 数字IO口输出电平定义函数,pin表示为013,va

14、lue表示为HIGH或LOW。比方定义HIGH可以驱动LED。 intdigitalRead(pin) 数字IO口读输入电平函数,pin表示为013,value表示为HIGH或LOW。比方可以读数字传感器。 模拟 I/O intanalogRead(pin) 模拟IO口读函数,pin表示为05Arduino Diecimila为05,Arduino nano为07。比方可以读模拟传感器10位AD,05V表示为01023。 analogWrite(pin, value) -PWM 数字IO口PWM输出函数,Arduino数字IO口标注了PWM的IO口可使用该函数,pin表示3, 5, 6, 9,

15、 10, 11,value表示为0255。比方可用于电机PWM调速或音乐播放。 扩展 I/O shiftOut(dataPin, clockPin, bitOrder, value) SPI外部IO扩展函数,通常使用带SPI接口的74HC595做8个IO扩展,dataPin为数据口,clockPin为时钟口,bitOrder为数据传输方向MSBFIRST高位在前,LSBFIRST低位在前,value表示所要传送的数据0255,另外还需要一个IO口做74HC595的使能控制。 unsigned longpulseIn(pin, value) 脉冲长度记录函数,返回时间参数us,pin表示为013

16、,value为HIGH或LOW。比方value为HIGH,则当pin输入为高电平时,开场计时,当pin输入为低电平时,停顿计时,然后返回该时间。 时间函数 unsigned longmillis() 返回时间函数单位ms,该函数是指,当程序运行就开场计时并返回记录的参数,该参数溢出大概需要50天时间。 delay(ms) 延时函数单位ms。 delayMicroseconds(us) 延时函数单位us。 数学函数 min(*, y) 求最小值 ma*(*, y) 求最大值 abs(*) 计算绝对值 constrain(*, a, b) 约束函数,下限a,上限b,*必须在ab之间才能返回。 ma

17、p(value, fromLow, fromHigh, toLow, toHigh) 约束函数,value必须在fromLow与toLow之间和fromHigh与toHigh之间。 pow(base, e*ponent) 开方函数,base的e*ponent次方。 sq(*) 平方 sqrt(*) 开根号 三角函数 sin(rad) cos(rad) tan(rad) 随机数函数 randomSeed(seed) 随机数端口定义函数,seed表示读模拟口analogRead(pin)函数 。 longrandom(ma*) 随机数函数,返回数据大于等于0,小于ma*。 longrandom(m

18、in, ma*) 随机数函数,返回数据大于等于min,小于ma*。 外部中断函数 attachInterrupt(interrupt, , mode) 外部中断只能用到数字IO口2和3,interrupt表示中断口初始0或1,表示一个功能函数,mode:LOW低电平中断,CHANGE有变化就中断,RISING上升沿中断,FALLING下降沿中断。 detachInterrupt(interrupt) 中断开关,interrupt=1 开,interrupt=0 关。 中断使能函数 interrupts() 使能中断 noInterrupts() 制止中断 串口收发函数 Serial.begin

19、(speed) 串口定义波特率函数,speed表示波特率,如9600,19200等。 intSerial.available() 判断缓冲器状态。 intSerial.read() 读串口并返回收到参数。 Serial.flush() 清空缓冲器。 Serial.print(data) 串口输出数据。 Serial.println(data) 串口输出数据并带回车符。 /*/*Arduino语言库文件*/官方库文件 EEPROM- EEPROM读写程序库 Ethernet- 以太网控制器程序库 LiquidCrystal-LCD控制程序库 Servo- 舵机控制程序库 SoftwareSeri

20、al- 任何数字IO口模拟串口程序库 Stepper- 步进电机控制程序库 Wire-TWI/I2C总线程序库 Matri*- LED矩阵控制程序库 Sprite- LED矩阵图象处理控制程序库 非官方库文件 DateTime- a library for keeping track of the current date and time in software. Debounce- for reading noisy digital inputs (e.g. from buttons) Firmata- for municating with applications on the put

21、er using a standard serial protocol. GLCD- graphics routines for LCD based on theKS0108or equivalent chipset. LCD- controlLCDs(using 8 data lines) LCD 4 Bit- controlLCDs(using 4 data lines) LedControl- for controlling LED matrices or seven-segment displays with aMA*7221orMA*7219. LedControl- an alte

22、rnative to the Matri* library for driving multipleLEDswith Ma*im chips. Messenger- for processing te*t-based messages from the puter Metro- help you time actions at regular intervals MsTimer2- uses the timer 2 interrupt to trigger an action every N milliseconds. OneWire- control devices (from Dallas

23、 Semiconductor) that use the One Wire protocol. PS2Keyboard- read characters from aPS2keyboard. Servo- provides software support for Servo motors on any pins. Servotimer1- provides hardware support for Servo motors on pins 9 and 10 Simple Message System- send messages between Arduino and the puter S

24、Serial2Mobile- send te*t messages or emails using a cell phone (via AT mands over software serial) Te*tString- handle strings TLC5940- 16 channel 12 bit PWM controller. *10- Sending *10 signals over AC power lines /*/arduino学习笔记4 数据类型有多种类型的变量,如下所述boolean 布尔char 字符byte 字节int 整数unsigned int 无符号整数long

25、长整数unsigned long 无符号长整数float 浮点double 双字节浮点string 字符串array 数组arduino学习笔记5 Arduuino复合运算符+= , -= , *= , /=Description描述Perform a mathematical operation on a variable with another constant or variable. The += (et al) operators are just a convenient shorthand for the e*panded synta*, listed below.对一个变量和

26、另一个参数或变量完成一个数学运算。+=以及其他可以缩短语法长度。Synta*语法* += y; / equivalent to the e*pression * = * + y; / 等价于 * = * + y;* -= y; / equivalent to the e*pression * = * - y; / 等价于 * = * - y;* *= y; / equivalent to the e*pression * = * * y; / 等价于 * = * * y;* /= y; / equivalent to the e*pression * = * / y; / 等价于 * = *

27、/ y;Parameters参数*: any variable type*:任何变量类型y: any variable type or constanty:任何变量类型或常数E*amples例* = 2;* += 4; / * now contains 6 / *现在为6* -= 3; / * now contains 3 / *现在为3* *= 10; / * now contains 30 / *现在为30* /= 2; / * now contains 15 / *现在为15Synta*语法*+; / increment * by one and returns the old valu

28、e of * / 将*的值加1并返回原来的*的值。 +*; / increment * by one and returns the new value of * / 将*的值加1并返回现在的*的值。*- ; / decrement * by one and returns the old value of * / 将*的值减1并返回原来的*的值。-* ; / decrement * by one and returns the new value of * / 将*的值减1并返回现在的*的值。Parameters参数*: an integer or long (possibly unsign

29、ed)*:一个整数或长整数可以无符号Returns返回The original or newly incremented / decremented value of the variable.返回变量原始值或增加/消耗后的新值。E*amples例* = 2;y = +*; / * now contains 3, y contains 3 / *现在为3,y为3y = *-; / * contains 2 again, y still contains 3 / *现在仍然为2,y将为3arduino学习笔记6 Arduino根底在学语言之间,还要做的一个功课就是要明白程序的构架,这个也同样简单

30、,大体可分为几个局部。1、声明变量及接口名称int val;int ledPin=13;。2、setup()函数在程序开场时使用,可以初始化变量、接口模式、启用库等例如:pinMode(ledPin,OUTUPT);。3、loop在setup()函数之后,即初始化之后,loop() 让你的程序循环地被执行。使用它来运转Arduino。接下来就开场学习一下几个根本函数。1、pinMode(接口名称,OUTPUT或INPUT)将接口定义为输入或输出接口,用在setup()函数里。2、digitalWrite(接口名称, HIGH或LOW)将数字接口值至高或低。3、digitalRead接口名称读出

31、数字接口的值。4、analogWrite(接口名称, 数值)给一个接口写入模拟值PWM波。对于 ATmega168芯片的Arduino包括Mini或BT,该函数可以工作于 3, 5, 6, 9, 10和 11号接口。老的 ATmega8芯片的USB和 serial Arduino仅仅支持 9, 10和11号接口。5、analogRead(接口名称)从指定的模拟接口读取值,Arduino对该模拟值进展10-bit的数字转换,这个方法将输入的0-5电压值转换为 0到1023间的整数值。6、delay()延时一段时间,delay(1000)为一秒。7、Serial.begin(波特率)设置串行每秒传

32、输数据的速率波特率。在同计算机通讯时,使用下面这些值:300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600或 115200。你也可以在任何时候使用其它的值,比方,与0号或1号插口通信就要求特殊的波特率。用在setup()函数里8、Serial.read()读取持续输入的数据。9、Serial.print(数据,数据的进制)从串行端口输出数据。Serial.print(数据)默认为十进制等于Serial.print(数据,DEC)。10、Serial.println(数据,数据的进制)从串行端口输出数据,跟随一个回车和一个换

33、行符。这个函数所取得的值与 Serial.print()一样。以上几个函数是常用根本函数,还有很多以后会慢慢学习arduino学习笔记7函数输入输出函数Arduino 含了一些处理输出与输入的切换功能,相信已经从书中程式例略知一二。pinMode(pin, mode)将数位脚位(digital pin)指定为输入或输出。例 :pinMode(7,INPUT); / 将脚位 7 设定为输入模式digitalWrite(pin, value)将数位脚位指定为开或关。脚位必须先透过pinMode明示为输入或输出模式digitalWrite才能生效。例 :digitalWrite(8,HIGH); /

34、将脚位 8设定输出高电位int digitalRead(pin)将输入脚位的值读出,当感测到脚位处于高电位时时回传HIGH,否则回传LOW。例 :val = digitalRead(7); / 读出脚位 7 的值并指定给 valint analogRead(pin)读出类比脚位的电压并回传一个 0到1023 的数值表示相对应的0到5的电压值。例 :val = analogRead(0); /读出类比脚位 0 的值并指定给 val变数analogWrite(pin, value)改变PWM脚位的输出电压值,脚位通常会在3、5、6、9、10与11。Value变数围0-255,例如:输出电压2.5伏

35、特V,该值大约是128。例 :analogWrite(9,128); / 输出电压约2.5伏特Vunsigned long pulseIn(pin, value)设定读取脚位状态的持续时间,例如使用红外线、加速度感测器测得*一项数值时,在时间单位不会改变状态。例 :time = pulsein(7,HIGH); / 设定脚位7的状态在时间单位保持为HIGHshiftOut(dataPin, clockPin, bitOrder, value)把资料传给用来延伸数位输出的暂存器,函式使用一个脚位表示资料、一个脚位表示时脉。bitOrder用来表示位元间移动的方式LSBFIRST最低有效位元或是M

36、SBFIRST最高有效位元,最后value会以byte形式输出。此函式通常使用在延伸数位的输出。例 :shiftOut(dataPin, clockPin, LSBFIRST, 255);时间函数控制与计算晶片执行期间的时间unsigned long millis()回传晶片开场执行到目前的毫秒例:duration = millis()-lastTime; / 表示自lastTime至当下的时间delay(ms)暂停晶片执行多少毫秒例:delay(500); /暂停半秒500毫秒delay Microseconds(us)暂停晶片执行多少微秒例:delayMicroseconds(1000);

37、 /暂停1豪秒数学函式三角函数以及根本的数学运算min(*, y)回传两数之间较小者例:val = min(10,20); / 回传10ma*(*, y)回传两数之间较大者例:val = ma*(10,20); / 回传20abs(*)回传该数的绝对值,可以将负数转正数。例:val = abs(-5); / 回传5constrain(*, a, b)判断*变数位于a与b之间的状态。*假设小于a回传a;介于a与b之间回传*本身;大于b回传b例:val = constrain(analogRead(0), 0, 255); / 忽略大于255的数map(value, fromLow, fromHi

38、gh, toLow, toHigh)将value变数依照fromLow与fromHigh围,对等转换至toLow与toHigh围。时常使用于读取类比讯号,转换至程式所需要的围值。例如:val = map(analogRead(0),0,1023,100, 200); / 将analog0 所读取到的讯号对等转换至100 200之间的数值。double pow(base, e*ponent)回传一个数(base)的指数(e*ponent)值。例:double * = pow(y, 32); / 设定*为y的32次方double sqrt(*)回传double型态的取平方根值。例:double a

39、 = sqrt(1138); / 回传1138平方根的近似值 33.double sin(rad)回传角度radians的三角函数sine值。例:double sine = sin(2); / 近似值 0.double cos(rad)回传角度radians的三角函数cosine值。例:double cosine = cos(2); /近似值-0.double tan(rad)回传角度radians的三角函数tangent值。例:double tangent = tan(2); /近似值-2.乱数函式产生乱数randomSeed(seed)事实上在Arduino里的乱数是可以被预知的。所以如果

40、需要一个真正的乱数,可以呼叫此函式重新设定产生乱数种子。你可以使用乱数当作乱数的种子,以确保数字以随机的方式出现,通常会使用类比输入当作乱数种子,藉此可以产生与环境有关的乱数例如:无线电波、宇宙雷射线、和萤光灯发出的电磁波等。例:randomSeed(analogRead(5); / 使用类比输入当作乱数种子long random(ma*)long random(min, ma*)回传指定区间的乱数,型态为long。如果没有指定最小值,预设为0。例:long randnum = random(0, 100); / 回传0 99 之间的数字long randnum = random(11); /

41、 回传 0 -10之间的数字序列通讯你可以在第五章看见一些使用序列埠与电脑交换讯息的例,以下是函式解释。Serial.begin(speed)你可以指定Arduino从电脑交换讯息的速率,通常我们使用9600 bps。当然也可以使用其他的速度,但是通常不会超过115,200 bps每秒位元组。例:Serial.begin(9600);Serial.print(data)Serial.print(data, encoding)经序列埠传送资料,提供编码方式的选项。如果没有指定,预设以一般文字传送。例:Serial.print(75); / 列印出 75Serial.print(75, DEC);

42、 /列印出 75Serial.print(75, HE*); / 4B (75 的十六进位)Serial.print(75, OCT); / 113 (75 in的八进位)Serial.print(75, BIN); / 1001011 (75的二进位)Serial.print(75, BYTE); / K (以byte进展传送,显示以ASCII编码方式)Serial.println(data)Serial.println(data, encoding)与Serial.print()一样,但会在资料尾端加上换行字元 。意思如同你在键盘上打了一些资料后按下Enter。例:Serial.print

43、ln(75); /列印出75 Serial.println(75, DEC); /列印出75 Serial.println(75, HE*); / 4B Serial.println(75, OCT); / 113 Serial.println(75, BIN); / 1001011 Serial.println(75, BYTE); / K int Serial.available()回传有多少位元组bytes的资料尚未被read()函式读取,如果回传值是0代表所有序列埠上资料都已经被read()函式读取。例:int count = Serial.available();int Serial

44、.read()读取1byte的序列资料例:int data = Serial.read();Serial.flush()有时候因为资料速度太快,超过程式处理资料的速度,你可以使用此函式去除缓冲区的资料。经过此函式可以确保缓冲区(buffer)的资料都是最新的。例:Serial.flush();arduino学习笔记8数字输入在数字电路中开关switch是一种根本的输入形式,它的作用是保持电路的连接或者断开。Arduino从数字I/O管脚上只能读出高电平5V或者低电平0V,因此我们首先面临到的一个问题就是如何将开关的开/断状态转变成Arduino能够读取的高/低电平。解决的方法是通过上 /下拉电

45、阻,按照电路的不同通常又可以分为正逻辑Positive Logic和负逻辑Inverted Logic两种。在正逻辑电路中,开关一端接电源,另一端则通过一个10K的下拉电阻接地,输入信号从开关和电阻间引出。当开关断开的时候,输入信号被电阻“拉向地,形成低电平0V;当开关接通的时候,输入信号直接与电源相连,形成高电平。对于经常用到的按压式开关来讲,就是按下为高,抬起为低。在负逻辑电路中,开关一端接地,另一端则通过一个10K的上拉电阻接电源,输入信号同样也是从开关和电阻间引出。当开关断开时,输入信号被电阻“拉向电源,形成高电平5V;当开关接通的时候,输入信号直接与地相连,形成低电平。对于经常用到的

46、按压式开关来讲,就是按下为低,抬起为高。为了验证Arduino数字I/O的输入功能,我们可以将开关接在Arduino的任意一个数字I/O管脚上13除外,并通过读取它的接通或者断开状态,来控制其它数字I/O管脚的上下。本实验采用的原理图如下所示,其中开关接在数字I/O的7号管脚上,被控的发光二极管接在数字I/O的13号 管脚上:相应的代码为:int ledPin = 13;int switchPin = 7;int value = 0;void setup() pinMode(ledPin, OUTPUT);pinMode(switchPin, INPUT);void loop() value

47、= digitalRead(switchPin);if (HIGH = value) / turn LED off digitalWrite(ledPin, LOW); else / turn LED on digitalWrite(ledPin, HIGH);由于采用的是负逻辑电路,开关按下时用digitalRead()函数读取到的值为LOW,此时再用digitalWrite()函数将发光二极管所在的管脚置为高,点亮发光二极管。同理,当开关抬起时,发光二极管将被熄灭,这样我们就实现了用开关来控制发光二极管的功能。arduino学习笔记9 Arduino的数字输出Arduino的数字I/O被分

48、成两个局部,其中每个局部都包含有6个可用的I/O管脚,即管脚2 到管脚7和管脚8到管脚13。除了管脚13上接了一个1K的电阻之外,其他各个管脚都直接连接到ATmega上。我们可以利用一个6位的数字跑马灯,来对 Arduino数字I/O的输出功能进展验证,以下是相应的原理图:电路中在每个I/O管脚上加的那个1K电阻被称为限流电阻,由于发光二极管在电路中没有等效电阻值,使用限流电阻可以使元件上通过的电流不至于过大,能够起到保护的作用。该工程对应的代码为:int BASE = 2;int NUM = 6;int inde* = 0;void setup()for (int i = BASE; i B

49、ASE + NUM; i +) pinMode(i, OUTPUT);void loop()for (int i = BASE; i BASE + NUM; i +) digitalWrite(i, LOW);digitalWrite(BASE + inde*, HIGH);inde* = (inde* + 1) % NUM;delay(100);下载并运行该工程,连接在Arduino数字I/O管脚2到管脚7上的发光二极管会依次点亮0.1秒,然后再熄灭:这个实验可以用来验证数字I/O输出的正确性。Arduino上一共有十二个数字I/O管脚,我们可以用同样的方法验证其他六个管脚的正确性,而这只需

50、要对上述工程的第一行做相应的修改就可以了:int BASE = 8;arduino学习笔记10 Arduino的串口输入串行通信是在实现在PC机与微控制器进展交互的最简单的方法。之前的PC机上一般都配有标准的 RS-232或者RS-422接口来实现串行通信,但现在这种情况已经发生了一些改变,大家更倾向于使用USB这样一种更快速但同时也更加复杂的方式来实现串行通信。尽管在有些计算机上现在已经找不到RS-232或者RS-422接口了,但我们仍可以通过USB/串口或者PCMCIA/串口这样的转换器, 在这些设备上得到传统的串口。通过串口连接的Arduino在交互式设计中能够为PC机提供一种全新的交互

51、方式,比方用PC机控制一些之前看来非常复杂的事情,像声音和视频等。很多场合中都要求Arduino能够通过串口接收来自于PC机的命令,并完成相应的功能,这可以通过Arduino语言中提供的 Serial.read()函数来实现。在这一实验中我们同样不需要任何额外的电路,而只需要用串口线将Arduino和PC机连起来就可以了,相应的Arduino工程代码为:int ledPin = 13;int val;void setup() pinMode(ledPin, OUTPUT);Serial.begin(9600);void loop() val = Serial.read();if (-1 !=

52、val) if (H = val) digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW); 把工程下载到Arduino模块中之后,在Arduino集成开发环境中翻开串口监视器并将波特率设置为9600,然后向Arduino模块发送字符H,如下列图所示:该工程运行起来之后会不断调用Serial.read()函数从串口获得数据。Arduino语言提供的这个函数是不阻塞的,也就是说不管串口上是否真的有数据到达,该函数都会立即返回。Serial.read()函数每次只读取一个字节的数据,当串口上有数据到达的时候,该函数的返回值

53、为到达的数 据中第一个字符的ASCII码;当串口上没有数据到达的时候,该函数的返回值则为-1。Arduino语言的参考手册中没 有对Serial.read()函数做过多的说明,我的一个疑问是如果PC机一次发送的数据太多,Arduino是否提供相应的串口缓存功能来保证数据不会丧失?Arduino语言中提供的另外一个函数Serial.available()或许能够帮助我们用实验来进展验证:int ledPin = 13;int val;void setup() pinMode(ledPin, OUTPUT);Serial.begin(9600);void loop() val = Serial.r

54、ead();if (-1 != val) if (H = val) digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW);Serial.print(Available: ); Serial.println(Serial.available(), DEC); 函数Serial.available()的功能是返回串口缓冲区中当前剩余的字符个数,按照Arduino提供的该函数的说明,串口缓冲区中最多能缓冲128个字节。我们可以一次给Arduino模块发送多个字符,来验证这一功能:在这一实验中,每当Arduino成功收到一个

55、字符H,连接在数字I/O端口管脚13上的发光二极管就会闪烁一次:arduino学习笔记11 Arduino的串口输出在许多实际应用场合中我们会要求在Arduino和其它设备之间实现相互通信,而最常见通常也是最简单的方法就是使用串行通信。在串行通信中,两个设备之间一个接一个地来回发送数字脉冲,它们之间必须严格遵循相应的协议以保证通信的正确性。在PC机上上最常见的串行通信协议是RS-232串行协议,而在各种微控制器单片机上采用的则是TTL串行协议。由于这两者的电平有很大的不同,因此在实现PC机和微控制器的通信时,必须进展相应的转换。完成RS-232电平和TTL电平之间的转换一般采用专用芯片,如MA

56、*232等,但在 Arduino上是用相应的电平转换电路来完成的。根据Arduino的原理图我们不难看出,ATmega的R*和T*引脚一方面直接接到了数字I/O端口的0号和1号管脚,另一方面又通过电平转换电路接到了串口的母头上。因此,当我们需要用Arduino与PC机通信时,可以用串口线将两者连接起来;当我们需要用 Arduino与微控制器如另一块Arduino通信时,则可以用数字I/O端口的0号和1号管脚。串行通信的难点在于参数的设置,如波特率、数据位、停顿位等,在Arduino语言可以使用Serial.begin()函数来简化这一任务。为了实现数据的发送,Arduino则提供了Serial

57、.print()和Serial.println()两个函数,它们的区别在于后者会在请求发送的数 据后面加上换行符,以提高输出结果的可读性。在这一实验中没有用到额外的电路, 我们只需要用串口线将Arduino和PC机连起来就可以了,相应的代码为:void setup() Serial.begin(9600);void loop() Serial.println(Hello World!); delay(1000);在将工程下载到Arduino模块中之后,在Arduino集成开发环境的工具栏中单击“Serial Monitor控制,翻开串口监视器:接着将波特率设置为9600,即保持与工程中的设置相

58、一致:如果一切正常,此时我们就可以在Arduino集成开发环境的Console窗口中看到串口上输出的数据了:为了检查串口上是否有数据发送,一个比拟简单的方法是在数字I/O端口的1号管脚T*和5V电源之间接一个发光二极管,如下面的原理图所示:这样一旦Arduino在通过串口向PC机发送数据时,相应的发光二极管就会闪烁,实际应用中这是一个非常方便的调试手段;-)arduino学习笔记12 PWM脉冲宽度调制Pulse Width Modulation, or PWM, is a technique for getting analog results with digitalmeans. Digital control is used to create a square wave, a signal switched between on and off. This on-off pattern can simulate voltages in between full on (5 Volts) and off (0 Volts) by changing the portion of the time the signal spends on vers

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