Arduino语法基础手册专业资料.doc

上传人:知*** 文档编号:97832155 上传时间:2024-07-08 格式:DOC 页数:33 大小:150.54KB
返回 下载 相关 举报
Arduino语法基础手册专业资料.doc_第1页
第1页 / 共33页
Arduino语法基础手册专业资料.doc_第2页
第2页 / 共33页
点击查看更多>>
资源描述

《Arduino语法基础手册专业资料.doc》由会员分享,可在线阅读,更多相关《Arduino语法基础手册专业资料.doc(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、#Arduino语法setup()初始化函数loop()循环体函数控制语句类似于C/ifif.elseforswitchcasewhiledo.whilebreakcontinuereturngoto扩展语法类似于C/;(分号)(花括号)/(单行注释)/*/(多行注释)#define#include算数运算符类似于C/=(赋值运算符)+(加)-(减)*(乘)/(除)%(模)比较运算符类似于C/=(等于)!=(不等于)(不不大于)=(不不大于等于)布尔运算符类似于C/&(与)|(或)!(非)指针运算符类似于C/*取消引用运算符&引用运算符位运算符类似于C&(bitwiseand)|(bitwis

2、eor)(bitwisexor)(bitwisenot)(bitshiftright)复合运算符类似于C+(increment)-(decrement)+=(compoundaddition)-=(compoundsubtraction)*=(compoundmultiplication)/=(compounddivision)&=(compoundbitwiseand)|=(compoundbitwiseor)常量constants预定义常量BOOLtruefalse引脚电压定义,HIGH和LOW【当读取(read)或写入(write)数字引脚时只有两个也许值:HIGH和LOW】HIGH(参

3、照引脚)含义取决于引脚(pin)设立,引脚定义为INPUT或OUTPUT时含义有所不同。当一种引脚通过pinMode被设立为INPUT,并通过digitalRead读取(read)时。如果当前引脚电压不不大于等于3V,微控制器将会返回为HIGH。引脚也可以通过pinMode被设立为INPUT,并通过digitalWrite设立为HIGH。输入引脚值将被一种内在20K上拉电阻控制在HIGH上,除非一种外部电路将其拉低到LOW。当一种引脚通过pinMode被设立为OUTPUT,并digitalWrite设立为HIGH时,引脚电压应在5V。在这种状态下,它可以输出电流。例如,点亮一种通过一串电阻接地

4、或设立为LOWOUTPUT属性引脚LED。LOW含义同样取决于引脚设立,引脚定义为INPUT或OUTPUT时含义有所不同。当一种引脚通过pinMode配备为INPUT,通过digitalRead设立为读取(read)时,如果当前引脚电压不大于等于2V,微控制器将返回为LOW。当一种引脚通过pinMode配备为OUTPUT,并通过digitalWrite设立为LOW时,引脚为0V。在这种状态下,它可以倒灌电流。例如,点亮一种通过串联电阻连接到+5V,或到另一种引脚配备为OUTPUT、HIGHLED。数字引脚(Digitalpins)定义,INPUT和OUTPUT【数字引脚当作INPUT或OUTP

5、UT都可以。用pinMode()办法使一种数字引脚从INPUT到OUTPUT变化】Arduino(Atmega)引脚通过pinMode()配备为输入(INPUT)即是将其配备在一种高阻抗状态。配备为INPUT引脚可以理解为引脚取样时对电路有极小需求,即等效于在引脚前串联一种100兆欧姆(Megohms)电阻。这使得它们非常利于读取传感器,而不是为LED供电。引脚通过pinMode()配备为输出(OUTPUT)即是将其配备在一种低阻抗状态。这意味着它们可觉得电路提供充分电流。Atmega引脚可以向其她设备/电路提供(提供正电流positivecurrent)或倒灌(提供负电流negativecu

6、rrent)达40毫安(mA)电流。这使得它们利于给LED供电,而不是读取传感器。输出(OUTPUT)引脚被短路接地或5V电路上会受到损坏甚至烧毁。Atmega引脚在为继电器或电机供电时,由于电流局限性,将需要某些外接电路来实现供电。整数常量进制例子格式备注10(十进制)123无2(二进制)B1111011前缀B只合用于8位值(0到255)字符0-1有效8(八进制)0173前缀”0”字符0-7有效16(十六进制)0x7B前缀”0x”字符0-9,A-F,A-F有效小数是十进制数。这是数学常识。如果一种数没有特定前缀,则默以为十进制。二进制以2为基底,只有数字0和1是有效。uorU指定一种常量为无

7、符号型。(只能表达正数和0)例如:33ulorL指定一种常量为长整型。(表达数范畴更广)例如:100000LulorUL这个你懂,就是上面两种类型,称作无符号长整型。例如:32767ul浮点常量浮点数被转换为被转换为10.0102.34E52.34*10523400067E-1267.0*10-120.数据类型类似于Cvoidbooleancharunsignedcharbyteintunsignedintwordlongunsignedlongfloatdoublestring-chararrayString-objectarray-(数组)数据类型转换类似于Cchar()byte()int

8、()word()long()float()word()把一种值转换为word数据类型值,或由两个字节创立一种字符。word(x)word(h,l)参数X:任何类型值H:高阶(最左边)字节L:低序(最右边)字节修饰符类似于Cstaticvolatileconst辅助工具sizeof()数字I/OpinMode()将指定引脚配备成输出或输入【pinMode(pin,mode)pin:要设立模式引脚mode:INPUT或OUTPUT】例子:ledPin=13/LED连接到数字脚13voidsetup()pinMode(ledPin,OUTPUT);/设立数字脚为输出voidloop()digital

9、Write(ledPin,HIGH);/点亮LEDdelay(1000);/等待一秒digitalWrite(ledPin,LOW);/灭掉LEDdelay(1000);/等待第二个digitalWrite()给一种数字引脚写入HIGH或者LOW。如果一种引脚已经使用pinMode()配备为OUTPUT模式,其电压将被设立为相应值,HIGH为5V(3.3V控制板上为3.3V),LOW为0V。如果引脚配备为INPUT模式,使用digitalWrite()写入HIGH值,将使内部20K上拉电阻(详见数字引脚教程)。写入LOW将会禁用上拉。上拉电阻可以点亮一种LED让其微微亮,如果LED工作,但是亮

10、度很低,也许是由于这个因素引起。补救办法是使用pinMode()函数设立为输出引脚。注意:数字13号引脚难以作为数字输入使用,由于大某些控制板上使用了一颗LED与一种电阻连接到她。如果启动了内部20K上拉电阻,她电压将在1.7V左右,而不是正常5V,由于板载LED串联电阻把她使她降了下来,这意味着她返回值总是LOW。如果必要使用数字13号引脚输入模式,需要使用外部上拉下拉电阻。digitalRead()digitalRead(PIN)【pin:你想读取引脚号(int),返回HIGH或LOW】例子:ledPin=13/LED连接到13脚intinPin=7;/按钮连接到数字引脚7intval=0

11、;/定义变量存以储读值voidsetup()pinMode(ledPin,OUTPUT);/将13脚设立为输出pinMode(inPin,INPUT);/将7脚设立为输入voidloop()val=digitalRead(inPin);/读取输入脚digitalWrite(ledPin,val);/将LED值设立为按钮值模仿I/OanalogReference()analogReference(type)配备用于模仿输入基准电压(即输入范畴最大值)。选项有:DEFAULT:默认5V(Arduino板为5V)或3.3伏特(Arduino板为3.3V)为基准电压。INTERNAL:在ATmega1

12、68和ATmega328上以1.1V为基准电压,以及在ATmega8上以2.56V为基准电压(ArduinoMega无此选项)INTERNAL1V1:以1.1V为基准电压(此选项仅针对ArduinoMega)INTERNAL2V56:以2.56V为基准电压(此选项仅针对ArduinoMega)EXTERNAL:以AREF引脚(0至5V)电压作为基准电压。type:使用哪种参照类型(DEFAULT,INTERNAL,INTERNAL1V1,INTERNAL2V56,或者EXTERNAL)变化基准电压后,之前从anal?ogRead()读取数据也许不精确。不要在AREF引脚上使用使用任何不大于0V

13、或超过5V外部电压。如果你使用AREF引脚上电压作为基准电压,你在调用analogRead()前必要设立参照类型为EXTERNAL。否则,你将会削短有效基准电压(内部产生)和AREF引脚,这也许会损坏您Arduino板上单片机。此外,您可以在外部基准电压和AREF引脚之间连接一种5K电阻,使你可以在外部和内部基准电压之间切换。请注意,总阻值将会发生变化,由于AREF引脚内部有一种32K电阻。这两个电阻均有分压作用。因此,例如,如果输入2.5V电压,最后在在AREF引脚上电压将为2.5*32/(32+5)=2.2V。analogRead()从指定模仿引脚读取数据值。Arduino板包括一种6通道

14、(Mini和Nano有8个通道,Mega有16个通道),10位模仿数字转换器。这意味着它将0至5伏特之间输入电压映射到0至1023之间整数值。这将产生读数之间关系:5伏特/1024单位,或0.0049伏特(4.9mV)每单位。输入范畴和精度可以使用analogReference()变化。它需要大概100微秒(0.0001)来读取模仿输入,因此最大阅读速度是每秒10000次。analogRead(PIN)引脚:从输入引脚(大某些板子从0到5,Mini和Nano从0到7,Mega从0到15)读取数值,返回从0到1023整数值例子:intanalogPin=3;/电位器(中间引脚)连接到模仿输入引脚

15、3/此外两个引脚分别接地和+5Vintval=0;/定义变量来存储读取数值voidsetup()serial.begin(9600);/设立波特率(9600)voidloop()val=analogRead(analogPin);/从输入引脚读取数值serial.println(val);/显示读取数值analogWrite()-PWManalogWrite(pin,value)从一种引脚输出模仿值(PWM)。可用于让LED以不同亮度点亮或驱动电机以不同速度旋转。analogWrite()输出结束后,该引脚将产生一种稳定特殊占空比喻波,直到下次调用analogWrite()(或在同一引脚调用d

16、igitalRead()或digitalWrite())。PWM信号频率大概是490赫兹。在大多数arduino板(ATmega168或ATmega328),只有引脚3,5,6,9,10和11可以实现该功能。在aduinoMega上,引脚2到13可以实现该功能。老Arduino板(ATmega8)只有引脚9、10、11可以使用analogWrite()。在使用analogWrite()前,你不需要调用pinMode()来设立引脚为输出引脚。analogWrite函数与模仿引脚、analogRead函数没有直接关系。pin:用于输入数值引脚。value:占空比:0(完全关闭)到255(完全打开)

17、之间。例子:intledPin=9;/LED连接到数字引脚9intanalogPin=3;/电位器连接到模仿引脚3intval=0;/定义变量存以储读值voidsetup()pinMode(ledPin,OUTPUT);/设立引脚为输出引脚voidloop()val=analogRead(analogPin);/从输入引脚读取数值analogWrite(ledPin,val/4);/以val/4数值点亮LED(由于analogRead读取数值从0到1023,而analogWrite输出数值从0到255)高档I/Otone()在一种引脚上产生一种特定频率方波(50%占空比)。持续时间可以设定,否

18、则波形会始终产生直到调用noTone()函数。该引脚可以连接压电蜂鸣器或其她喇叭播放声音。在同一时刻只能产生一种声音。如果一种引脚已经在播放音乐,那调用tone()将不会有任何效果。如果音乐在同一种引脚上播放,它会自动调节频率。使用tone()函数会与3脚和11脚PWM产生干扰(Mega板除外)。注意:如果你要在各种引脚上产生不同音调,你要在对下一种引脚使用tone()函数前对此引脚调用noTone()函数。tone(pin,frequency)tone(pin,frequency,duration)pin:要产生声音引脚frequency:产生声音频率,单位Hz,类型unsignedintd

19、uration:声音持续时间,单位毫秒(可选),类型unsignedlongnoTone()停止由tone()产生方波。如果没有使用tone()将不会有效果。noTone(pin)pin:所要停止产生声音引脚shiftOut()将一种数据一种字节一位一位移出。从最高有效位(最左边)或最低有效位(最右边)开始。依次向数据脚写入每一位,之后时钟脚被拉高或拉低,批示刚才数据有效。注意:如果你所连接设备时钟类型为上升沿,你要拟定在调用shiftOut()前时钟脚为低电平,如调用digitalWrite(clockPin,LOW)。注意:这是一种软件实现;Arduino提供了一种硬件实现SPI库,它速度

20、更快但只在特定脚有效。shiftOut(dataPin,clockPin,bitOrder,value)dataPin:输出每一位数据引脚(int)clockPin:时钟脚,当dataPin有值时此引脚电平变化(int)bitOrder:输出位顺序,最高位优先或最低位优先value:要移位输出数据(byte)dataPin和clockPin要用pinMode()配备为输出。shiftOut当前只能输出1个字节(8位),因此如果输出值不不大于255需要分两步。/最高有效位优先串行输出intdata=500;/移位输出高字节shiftOut(dataPin,clock,MSBFIRST,(data

21、8);/移位输出低字节shiftOut(data,clock,MSBFIRST,data);/最低有效位优先串行输出data=500;/移位输出低字节shiftOut(dataPin,clock,LSBFIRST,data);/移位输出高字节shiftOut(dataPin,clock,LSBFIRST,(data8);例子:相应电路,查看tutorialoncontrollinga74HC595shiftregister/引脚连接到74HC595ST_CPintlatchPin=8;/引脚连接到74HC595SH_CPintclockPin=12;/引脚连接到74HC595DSintdata

22、Pin=11;voidsetup()/设立引脚为输出pinMode(latchPin,OUTPUT);pinMode(clockPin,OUTPUT);pinMode(dataPin,OUTPUT);voidloop()/向上计数程序for(J=0;J256;J+)/传播数据时候将latchPin拉低digitalWrite(latchpin,LOW);shiftOut(dataPin,clockPin,LSBFIRST,J);/之后将latchPin拉高以告诉芯片/它不需要再接受信息了digitalWrite(latchpin,HIGH);delay(1000);shiftIn()将一种数据

23、一种字节一位一位移入。从最高有效位(最左边)或最低有效位(最右边)开始。对于每个位,先拉高时钟电平,再从数据传播线中读取一位,再将时钟线拉低。注意:这是一种软件实现;Arduino提供了一种硬件实现SPI库,它速度更快但只在特定脚有效。shiftIn(dataPin,clockPin,bitOrder)dataPin:输出每一位数据引脚(int)clockPin:时钟脚,当dataPin有值时此引脚电平变化(int)bitOrder:输出位顺序,最高位优先或最低位优先pulseIn()读取一种引脚脉冲(HIGH或LOW)。例如,如果value是HIGH,pulseIn()会等待引脚变为HIGH

24、,开始计时,再等待引脚变为LOW并停止计时。返回脉冲长度,单位微秒。如果在指定期间内无脉冲函数返回。此函数计时功能由经验决定,长时间脉冲计时也许会出错。计时范畴从10微秒至3分钟。(1秒=1000毫秒=1000000微秒)pulseIn(pin,value)pulseIn(pin,value,timeout)pin:你要进行脉冲计时引脚号(int)。value:要读取脉冲类型,HIGH或LOW(int)。timeout(可选):指定脉冲计数等待时间,单位为微秒,默认值是1秒(unsignedlong)返回:脉冲长度(微秒),如果等待超时返回0(unsignedlong)例子:intpin=7;

25、unsignedlongduration;voidsetup()pinMode(pin,INPUT);voidloop()duration=pulseIn(pin,HIGH);时间millis()返回Arduino开发板从运营当前程序开始毫秒数。这个数字将在约50天后溢出(归零)例子:unsignedlongtime;voidsetup()Serial.begin(9600);voidloop()serial.print(Time:);time=millis();/打印从程序开始到当前时间serial.println(time);/等待一秒钟,以免发送大量数据delay(1000);参数mil

26、lis是一种无符号长整数,试图和其她数据类型(如整型数)做数学运算也许会产生错误micros()返回Arduino开发板从运营当前程序开始微秒数。这个数字将在约70分钟后溢出(归零)。在16MHzArduino开发板上(例如Duemilanove和Nano),这个函数辨别率为四微秒(即返回值总是四倍数)。在8MHzArduino开发板上(例如LilyPad),这个函数辨别率为八微秒。注意:每毫秒是1,000微秒,每秒是1,000,000微秒。例子:unsignedlongtime;voidsetup()Serial.begin(9600);voidloop()Serial.print(“Tim

27、e:”);time=micros();/打印从程序开始时间Serial.println(time);/等待一秒钟,以免发送大量数据delay(1000);delay()使程序暂停设定期间(单位毫秒)。(一秒等于1000毫秒)参数:ms:暂停毫秒数(unsignedlong)例子:ledPin=13/LED连接到数字13脚voidsetup()pinMode(ledPin,OUTPUT);/设立引脚为输出voidloop()digitalWrite(ledPin,HIGH);/点亮LEDdelay(1000);/等待1秒digitalWrite(ledPin,LOW);/灭掉LEDdelay(1

28、000);/等待一秒虽然创立一种使用delay()闪烁LED很简朴,并且许多例子将很短delay用于消除开关抖动,delay()的确拥有诸多明显缺陷。在delay函数使用过程中,读取传感器值、计算、引脚操作均无法执行,因而,它所带来后果就是使其她大多数活动暂停。其她操作定期办法请参加millis()函数和它下面例子。大多数纯熟程序员普通避免超过10毫秒delay(),除非arduino程序非常简朴。但某些操作在delay()执行时任然可以运营,由于delay函数不会使中断失效。通信端口RX接受到得数据会被记录,PWM(analogWrite)值和引脚状态会保持,中断也会按设定执行。delayM

29、icroseconds()使程序暂停指定一段时间(单位微秒)。一毫秒等于一千微秒,一秒等于1000000微秒。当前,可以产生最大延时精确值是16383。这也许会在将来Arduino版本中变化。对于超过几千微秒延迟,你应当使用delay()代替。例子:intoutPin=8;/digitalpin8voidsetup()pinMode(outPin,OUTPUT);/设立为输出数字管脚voidloop()digitalWrite(outPin,HIGH);/设立引脚高电平delayMicroseconds(50);/暂停50微秒digitalWrite(outPin,LOW);/设立引脚低电平d

30、elayMicroseconds(50);/暂停50微秒数学运算min()max()abs()constrain(x,a,b)【将一种数约束在一种范畴内】map(value,fromLow,fromHigh,toLow,toHigh)value:需要映射值fromLow:当前范畴值下限fromHigh:当前范畴值上限toLow:目的范畴值下限toHigh:目的范畴值上限例子:voidsetup()voidloop()intval=analogRead(0);val=map(val,0,1023,0,255);analogWrite(9,val);数学实现longmap(longx,longin

31、_min,longin_max,longout_min,longout_max)return(x-in_min)*(out_max-out_min)/(in_max-in_min)+out_min;pow(base,exponent)sqrt(x)三角函数sin()cos()tan()随机数randomSeed()【随机数种子】random()【random(max),random(min,max)】位操作lowByte()取一种变量(例如一种字)低位(最右边)字节。highByte()提取一种字节高位(最左边),或一种更长字节第二低位。bitRead()读取一种数位。bitRead(x,n)

32、X:想要被读取数N:被读取位,0是最重要(最右边)位该位值(0或1)bitWrite()在位上写入数字变量bitWrite(x,n,b)X:要写入数值变量N:要写入数值变量位,从0开始是最低(最右边)位B:写入位数值(0或1)bitSet()为一种数字变量设立一种位bitSet(x,n)X:想要设立数字变量N:想要设立位,0是最重要(最右边)位bitClear()清除一种数值型数值指定位(将此位设立成0)bitClear(x,n)X:指定要清除位数值N:指定要清除位位置,从0开始,0表达最右端位bit()计算指定位值(0位是1,1位是2,2位4,以此类推)bit(n)需要计算位设立中断函数at

33、tachInterrupt()attachInterrupt(interrupt,function,mode)当发生外部中断时,调用一种指定函数。当中断发生时,该函数会取代正在执行程序。大多数Arduino板有两个外部中断:0(数字引脚2)和1(数字引脚3)。arduinoMege有四个外部中断:数字2(引脚21),3(20针),4(引脚19),5(引脚18)interrupt:中断引脚数function:中断发生时调用函数,此函数必要不带参数和不返回任何值。该函数有时被称为中断服务程序。mode:定义何时发生中断如下四个contstants预定有效值:LOW当引脚为低电平时,触发中断CHAN

34、GE当引脚电平发生变化时,触发中断RISING当引脚由低电平变为高电平时,触发中断FALLING当引脚由高电平变为低电平时,触发中断.当中断函数发生时,delya()和millis()数值将不会继续变化。当中断发生时,串口收到数据也许会丢失。你应当声明一种变量来在未发生中断时储存变量。在单片机自动化程序中当突发事件发生时,中断是非常有用,它可以协助解决时序问题。一种使用中断任务也许会读一种旋转编码器,监视顾客输入。如果你想以保证程序始终抓住一种旋转编码器脉冲,从来不缺少一种脉冲,它将使写一种程序做任何事情都要非常棘手,由于该筹划将需要不断轮询传感器线编码器,为了赶上脉冲发生时。其她传感器也是如此,如试图读取一种声音传感器正试图赶上一按,或红外线槽传感器(照片灭弧室),试图抓住一种硬币下降。在所有这些状况下,使用一种中断可以释放微控制器来完毕其她某些工作。例子:intpin=13;volatileintstate=LOW;voidsetup()pinMode(pin,OUTPUT);attachInterrupt(0,blink,CHANGE);voidloop()digitalWrite(pin,state);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁