arduino学习资料.docx
《arduino学习资料.docx》由会员分享,可在线阅读,更多相关《arduino学习资料.docx(145页珍藏版)》请在冰点文库上搜索。
arduino学习资料
arduino学习笔记
arduino学习笔记1-什么是arduino?
要了解arduino就先要了解什么是单片机,arduino平台的基础就是AVR指令集的单片机。
1、什么是单片机?
它与个人计算机有什么不同?
一台能够工作的计算机要有这样几个部份构成:
中央处理单元CPU(进行运算、控制)、随机存储器RAM(数据存储)、存储器ROM(程序存储)、输入/输出设备I/O(串行口、并行输出口等)。
在个人计算机(PC)上这些部份被分成若干块芯片,安装在一个被称之为主板的印刷线路板上。
而在单片机中,这些部份全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如模拟量/数字量转换(A/D)和数字量/模拟量转换(D/A)等。
2、单片机有什么用?
实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能,一个控制电冰箱温度的计算机难道要用酷睿处理器吗?
应用的关键是看是否够用,是否有很好的性能价格比。
如果一台冰箱都需要用酷睿处理起来进行温度控制,那价格就是天价了。
单片机通常用于工业生产的控制、生活中与程序和控制有关(如:
电子琴、冰箱、智能空调等)的场合。
下图就是一个Atmega328P-PU单片机,基于AVR指令集的8位处理器,频率20MHz,存储器空间32KB。
什么是Arduino?
Arduino是一个能够用来感应和控制现实物理世界的一套工具。
它由一个基于单片机并且开放源码的硬件平台,和一套为Arduino板编写程序的开发环境组成。
Arduino可以用来开发交互产品,比如它可以读取大量的开关和传感器信号,并且可以控制各式各样的电灯、电机和其他物理设备。
Arduino项目可以是单独的,也可以在运行时和你电脑中运行的程序(例如:
Flash,Processing,MaxMSP)进行通讯。
Arduino板你可以选择自己去手动组装或是购买已经组装好的;Arduino开源的IDE可以免费下载得到。
Arduino的编程语言就像似在对一个类似于物理的计算平台进行相应的连线,它基于处理多媒体的编程环境。
为什么要使用Arduino?
有很多的单片机和单片机平台都适合用做交互式系统的设计。
例如:
ParallaxBasicStamp,Netmedia’sBX-24,Phidgets,MIT’sHandyboard和其它等等提供类似功能的。
所有这些工具,你都不需要去关心单片机编程繁琐的细节,提供给你的是一套容易使用的工具包。
Arduino同样也简化了同单片机工作的流程,但同其它系统相比Arduino在很多地方更具有优越性,特别适合老师,学生和一些业余爱好者们使用:
∙便宜-和其它平台相比,Arduino板算是相当便宜了。
最便宜的Arduino版本可以自己动手制作,即使是组装好的成品,其价格也不会超过200元。
∙跨平台-Arduino软件可以运行在Windows,MacintoshOSX,和Linux操作系统。
大部分其它的单片机系统都只能运行在Windows上。
∙简易的编程环境-初学者很容易就能学会使用Arduino编程环境,同时它又能为高级用户提供足够多的高级应用。
对于老师们来说,一般都能很方便的使用Processing编程环境,所以如果学生学习过使用Processing编程环境的话,那他们在使用Arduino开发环境的时候就会觉得很相似很熟悉。
∙软件开源并可扩展-Arduino软件是开源的,对于有经验的程序员可以对其进行扩展。
Arduino编程语言可以通过C++库进行扩展,如果有人想去了解技术上的细节,可以跳过Arduino语言而直接使用AVRC编程语言(因为Arduino语言实际上是基于AVRC的)。
类似的,如果你需要的话,你也可以直接往你的Arduino程序中添加AVR-C代码。
∙硬件开源并可扩展-Arduino板基于Atmel的ATMEGA8和ATMEGA168/328单片机。
Arduino基于Creativemons许可协议,所以有经验的电路设计师能够根据需求设计自己的模块,可以对其扩展或改进。
甚至是对于一些相对没有什么经验的用户,也可以通过制作试验板来理解Arduino是怎么工作的,省钱又省事。
Arduino基于AVR平台,对AVR库进行了二次编译封装,把端口都打包好了,寄存器啦、地址指针之类的基本不用管。
大大降低了软件开发难度,适宜非专业爱好者使用。
优点和缺点并存,因为是二次编译封装,代码不如直接使用AVR代码编写精练,代码执行效率与代码体积都弱于AVR直接编译。
性能:
DigitalI/O数字输入/输出端口0—13。
AnalogI/O模拟输入/输出端口0-5。
支持ICSP下载,支持TX/RX。
输入电压:
USB接口供电或者5V-12V外部电源供电。
输出电压:
支持3.3V级5VDC输出。
处理器:
使用AtmelAtmega168328处理器,因其支持者众多,已有公司开发出来32位的MCU平台支持arduino。
目前arduino的控制板最新的为ArduinoUno,如下图:
国内使用比较多的为ArduinoDuemilanove2009,主要原因是Uno的usb控制芯片封装方式改变,制造成本上升,其他变化不大,性价比还是ArduinoDuemilanove2009比较好。
因其开源特性,生产arduino控制板的厂商众多,同样的Duemilanove2009就有很多种颜色。
对于一些对电路板大小要求比较严格的地方,arduino团队提供了arduinoNano,此板体积做的非常小。
如下图:
arduino板子上基本端口如图描述,对几个比较特殊的端口下面详细说明下:
VIN端口:
VIN是inputvoltage的缩写,表示有外部电源时的输入端口。
AREF:
Referencevoltagefortheanaloginputs(模拟输入的基准电压)。
使用analogReference()命令调用。
ICSP:
也有称为ISP(InSystemProgrammer),就是一种线上即时烧录,目前比较新的芯片都支持这种烧录模式,包括大家常听说的8051系列的芯片,也都慢慢采用这种简便的烧录方式。
我们都知道传统的烧录方式,都是将被烧录的芯片,从线路板上拔起,有的焊死在线路板上的芯片,还得先把芯片焊接下来才能烧录。
为了解决这种问题,发明了ICSP线上即时烧录方式。
只需要准备一条R232线(连接烧录器),以及一条连接烧录器与烧录芯片针脚的连接线就可以。
电源的+5V,GND,两条负责传输烧录信息的针脚,再加上一个烧录电压针脚,这样就可以烧录了。
arduino学习笔记2
通过Arduino编译器查看串口数据
最简单的例子:
voidsetup()
{
Serial.begin(9600);//打开串口,设置波特率为9600bps
}
voidloop()
{
intval;
val=analogRead(5);//传感器接到模拟口5,数值根据自己的需要可变
Serial.println(val,DEC);//从串口发送字符串并换行
delay(100);
}
如果电路安装正确,按照示例代码运行、上传,然后点击编译器的SerialMonitor按钮,就可以看到从代码定义的输入口(这儿是模拟口5)获取的数据了。
arduino学习笔记3arduino语言
∙Arduino语言是建立在C/C++基础上的,其实也就是基础的C语言,Arduino语言只不过把AVR单片机(微控制器)相关的一些参数设置都函数化,不用我们去了解他的底层,让我们不了解AVR单片机(微控制器)的朋友也能轻松上手。
在与ArduinoDIYER接触的这段时间里,发现有些朋友对Arduino语言还是比较难入手,那么这里我就简单的注释一下Arduino语言(本人也是半罐子水,有错的地方还请各位指正)。
/*************基础C语言*************/
关键字:
∙if
∙if...else
∙for
∙switchcase
∙while
∙do...while
∙break
∙continue
∙return
∙goto
语法符号:
∙;
∙{}
∙//
∙/**/
运算符:
∙=
∙+
∙-
∙*
∙/
∙%
∙==
∙!
=
∙<
∙>
∙<=
∙>=
∙&&
∙||
∙!
∙++
∙--
∙+=
∙-=
∙*=
∙/=
数据类型:
∙boolean 布尔类型
∙char
∙byte 字节类型
∙int
∙unsignedint
∙long
∙unsignedlong
∙float
∙double
∙string
∙array
∙void
数据类型转换:
∙char()
∙byte()
∙int()
∙long()
∙float()
常量:
∙HIGH | LOW 表示数字IO口的电平,HIGH 表示高电平
(1),LOW 表示低电平(0)。
∙INPUT | OUTPUT 表示数字IO口的方向,INPUT 表示输入(高阻态),OUTPUT 表示输出(AVR能提供5V电压40mA电流)。
∙true | false true 表示真
(1),false表示假(0)。
/******************************************/
以上为基础c语言的关键字和符号,有c语言基础的都应该了解其含义,这里也不作过多的解释。
/*************Arduino语言*************/
结构
∙void setup() 初始化变量,管脚模式,调用库函数等
∙void loop()连续执行函数内的语句
功能
数字I/O
∙pinMode(pin,mode) 数字IO口输入输出模式定义函数,pin表示为0~13,mode表示为INPUT或OUTPUT。
∙digitalWrite(pin,value) 数字IO口输出电平定义函数,pin表示为0~13,value表示为HIGH或LOW。
比如定义HIGH可以驱动LED。
∙int digitalRead(pin) 数字IO口读输入电平函数,pin表示为0~13,value表示为HIGH或LOW。
比如可以读数字传感器。
模拟I/O
∙int analogRead(pin) 模拟IO口读函数,pin表示为0~5(ArduinoDiecimila为0~5,Arduinonano为0~7)。
比如可以读模拟传感器(10位AD,0~5V表示为0~1023)。
∙analogWrite(pin,value)- PWM 数字IO口PWM输出函数,Arduino数字IO口标注了PWM的IO口可使用该函数,pin表示3,5,6,9,10,11,value表示为0~255。
比如可用于电机PWM调速或音乐播放。
扩展I/O
∙shiftOut(dataPin,clockPin,bitOrder,value) SPI外部IO扩展函数,通常使用带SPI接口的74HC595做8个IO扩展,dataPin为数据口,clockPin为时钟口,bitOrder为数据传输方向(MSBFIRST高位在前,LSBFIRST低位在前),value表示所要传送的数据(0~255),另外还需要一个IO口做74HC595的使能控制。
∙unsignedlong pulseIn(pin,value) 脉冲长度记录函数,返回时间参数(us),pin表示为0~13,value为HIGH或LOW。
比如value为HIGH,那么当pin输入为高电平时,开始计时,当pin输入为低电平时,停止计时,然后返回该时间。
时间函数
∙unsignedlong millis() 返回时间函数(单位ms),该函数是指,当程序运行就开始计时并返回记录的参数,该参数溢出大概需要50天时间。
∙delay(ms) 延时函数(单位ms)。
∙delayMicroseconds(us) 延时函数(单位us)。
数学函数
∙min(x,y)求最小值
∙max(x,y)求最大值
∙abs(x) 计算绝对值
∙constrain(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表示读模拟口analogRead(pin)函数。
∙long random(max) 随机数函数,返回数据大于等于0,小于max。
∙long random(min,max) 随机数函数,返回数据大于等于min,小于max。
外部中断函数
∙attachInterrupt(interrupt,,mode) 外部中断只能用到数字IO口2和3,interrupt表示中断口初始0或1,表示一个功能函数,mode:
LOW低电平中断,CHANGE有变化就中断,RISING上升沿中断,FALLING 下降沿中断。
∙detachInterrupt(interrupt) 中断开关,interrupt=1开,interrupt=0关。
中断使能函数
∙interrupts()使能中断
∙noInterrupts()禁止中断
串口收发函数
∙Serial.begin(speed)串口定义波特率函数,speed表示波特率,如9600,19200等。
∙int Serial.available()判断缓冲器状态。
∙int Serial.read() 读串口并返回收到参数。
∙Serial.flush() 清空缓冲器。
∙Serial.print(data)串口输出数据。
∙Serial.println(data) 串口输出数据并带回车符。
/**********************************/
/************Arduino语言库文件*************/
官方库文件
∙EEPROM -EEPROM读写程序库
∙Ethernet -以太网控制器程序库
∙LiquidCrystal - LCD控制程序库
∙Servo -舵机控制程序库
∙SoftwareSerial -任何数字IO口模拟串口程序库
∙Stepper -步进电机控制程序库
∙Wire - TWI/I2C总线程序库
∙Matrix -LED矩阵控制程序库
∙Sprite -LED矩阵图象处理控制程序库
非官方库文件
∙DateTime -alibraryforkeepingtrackofthecurrentdateandtimeinsoftware.
∙Debounce -forreadingnoisydigitalinputs(e.g.frombuttons)
∙Firmata -formunicatingwithapplicationsontheputerusingastandardserialprotocol.
∙GLCD -graphicsroutinesforLCDbasedonthe KS0108 orequivalentchipset.
∙LCD -control LCDs (using8datalines)
∙LCD4Bit -control LCDs (using4datalines)
∙LedControl -forcontrollingLEDmatricesorseven-segmentdisplayswitha MAX7221 or MAX7219.
∙LedControl -analternativetotheMatrixlibraryfordrivingmultiple LEDs withMaximchips.
∙Messenger -forprocessingtext-basedmessagesfromtheputer
∙Metro -helpyoutimeactionsatregularintervals
∙MsTimer2 -usesthetimer2interrupttotriggeranactioneveryNmilliseconds.
∙OneWire -controldevices(fromDallasSemiconductor)thatusetheOneWireprotocol.
∙PS2Keyboard -readcharactersfroma PS2 keyboard.
∙Servo -providessoftwaresupportforServomotorsonanypins.
∙Servotimer1 -provideshardwaresupportforServomotorsonpins9and10
∙SimpleMessageSystem -sendmessagesbetweenArduinoandtheputer
∙SSerial2Mobile -sendtextmessagesoremailsusingacellphone(viaATmandsoversoftwareserial)
∙TextString -handlestrings
∙TLC5940 -16channel12bitPWMcontroller.
∙X10 -SendingX10signalsoverACpowerlines
/****************************************/
arduino学习笔记4数据类型
有多种类型的变量,如下所述
boolean 布尔
char 字符
byte 字节
int 整数
unsignedint无符号整数
long 长整数
unsignedlong无符号长整数
float 浮点
double 双字节浮点
string 字符串
array 数组
arduino学习笔记5Arduuino复合运算符
+=,-=,*=,/=
Description描述
Performamathematicaloperationonavariablewithanotherconstantorvariable.The+=(etal)operatorsarejustaconvenientshorthandfortheexpandedsyntax,listedbelow.
对一个变量和另一个参数或变量完成一个数学运算。
+=(以及其他)可以缩短语法长度。
Syntax语法
x+=y; //equivalenttotheexpressionx=x+y; //等价于x=x+y;
x-=y; //equivalenttotheexpressionx=x-y; //等价于x=x-y;
x*=y; //equivalenttotheexpressionx=x*y; //等价于x=x*y;
x/=y; //equivalenttotheexpressionx=x/y; //等价于x=x/y;
Parameters参数
x:
anyvariabletype
x:
任何变量类型
y:
anyvariabletypeorconstant
y:
任何变量类型或常数
Examples范例
x=2;
x+=4; //xnowcontains6 //x现在为6
x-=3; //xnowcontains3 //x现在为3
x*=10; //xnowcontains30 //x现在为30
x/=2; //xnowcontains15 //x现在为15
Syntax语法
x++;//incrementxbyoneandreturnstheoldvalueofx
//将x的值加1并返回原来的x的值。
++x;//incrementxbyoneandreturnsthenewvalueofx //将x的值加1并返回现在的x的值。
x--; //decrementxbyoneandreturnstheoldvalueofx //将x的值减1并返回原来的x的值。
--x; //decrementxbyoneandreturnsthenewvalueofx //将x的值减1并返回现在的x的值。
Parameters参数
x:
anintegerorlong(possiblyunsigned)
x:
一个整数或长整数(可以无符号)
Returns返回
Theoriginalor