《Arduino语法手册专业资料.pdf》由会员分享,可在线阅读,更多相关《Arduino语法手册专业资料.pdf(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、#Arduino 语法 setup()初始化函数 loop()循环体函数 控制语句类似于 C /if if.else for switch case while do.while break continue return goto 扩展语法类似于 C /;(分 号)(花 括 号)/(单 行 注 释)/*/(多 行 注释)#define#include 算数运算符类似于 C /=(赋值运算符)+(加)-(减)*(乘)/(除)%(模)比较运算符类似于 C /=(等于)!=(不等于)(大于)=(大于等于)布尔运算符类似于 C /&(与)|(或)!(非)指针运算符类似于 C /*取消引用运算符&引用
2、运算符 位运算符类似于 C&(bitwise and)|(bitwise or)(bitwise xor)(bitwise not)(bitshift right)复合运算符类似于 C +(increment)-(decrement)+=(compound addition)-=(compound subtraction)*=(compound multiplication)/=(compound division)&=(compound bitwise and)|=(compound bitwise or)常量 constants 预定义的常量 BOOL true false 引脚电压定义,
3、HIGH 和 LOW【当读取(read)或写入(write)数字引脚时只有两个也许的值:HIGH 和 LOW】HIGH(参考引脚)的含义取决于引脚(pin)的设立,引脚定义为 INPUT 或 OUTPUT 时含义有所不同。当一个引脚通过 pinMode 被设立为 INPUT,并通过 digitalRead 读取(read)时。假如当前引脚的电压大于等于 3V,微控制器将会返回为 HIGH。引脚也可以通过 pinMode 被设立为 INPUT,并通过 digitalWrite 设立为 HIGH。输入引脚的值将被一个内在的 20K 上拉电阻 控制 在 HIGH 上,除非一个外部电路将其拉低到 LO
4、W。当一个引脚通过 pinMode 被设立为 OUTPUT,并 digitalWrite设立为 HIGH 时,引脚的电压应在 5V。在这种状态下,它可以 输出电流。例如,点亮一个通过一串电阻接地或设立为 LOW 的 OUTPUT 属性引脚的 LED。LOW 的含义同样取决于引脚设立,引脚定义为 INPUT 或 OUTPUT 时含义有所不同。当一个引脚通过 pinMode 配置为 INPUT,通过 digitalRead 设立为读取(read)时,假如当前引脚的电压小于等于 2V,微控制器将返回为 LOW。当一个引脚通过 pinMode 配置为 OUTPUT,并通过 digitalWrite设立
5、为 LOW 时,引脚为 0V。在这种状态下,它可以 倒灌 电流。例如,点亮一个通过串联电阻连接到+5V,或到另一个引脚配置为 OUTPUT、HIGH 的的 LED。数字引脚(Digital pins)定义,INPUT 和 OUTPUT【数字引脚当作 INPUT 或 OUTPUT 都可以。用 pinMode()方法使一个数字引脚从 INPUT 到 OUTPUT 变化】Arduino(Atmega)引脚通过 pinMode()配置为 输入(INPUT)即是将其配置在一个高阻抗的状态。配置为 INPUT 的引脚可以理解为引脚取样时对电路有极小的需求,即等效于在引脚前串联一个 100 兆欧姆(Mego
6、hms)的电阻。这使得它们非常利于读取传感器,而不是为 LED 供电。引脚通过 pinMode()配置为 输出(OUTPUT)即是将其配置在一个低阻抗的状态。这意味着它们可认为电路提供充足的电流。Atmega 引脚可以向其他设备/电路提供(提供正电流 positive current)或倒灌(提供负电流 negative current)达 40 毫安(mA)的电流。这使得它们利于给 LED 供电,而不是读取传感器。输出(OUTPUT)引脚被短路的接地或 5V 电路上会受到损坏甚至烧毁。Atmega 引脚在为继电器或电机供电时,由于电流局限性,将需要一些外接电路来实现供电。整数常量 进制 例子
7、 格式 备注 10(十进制)123 无 2(二进制)B1111011 前缀B 只合用于 8 位的值(0 到 255)字符 0-1 有效 8(八进制)0173 前缀”0”字符 0-7 有效 16(十六进制)0 x7B 前缀”0 x”字符 0-9,A-F,A-F 有效 小数是十进制数。这是数学常识。假如一个数没有特定的前缀,则默认为十进制。二进制以 2 为基底,只有数字 0 和 1 是有效的。u or U 指定一个常量为无符号型。(只能表达正数和 0)例如:33u l or L 指定一个常量为长整型。(表达数的范围更广)例如:100000L ul or UL 这个你懂的,就是上面两种类型,称作无符
8、号长整型。例如:32767ul 浮点常量 浮点数 被转换为 被转换为 10.0 10 2.34E5 2.34*105 234000 67E-12 67.0*10-12 0.数据类型类似于 C void boolean char unsigned char byte int unsigned int word long unsigned long float double string-char array String-object array-(数组)数据类型转换类似于 C char()byte()int()word()long()float()word()把一个值转换为 word 数据类型
9、的值,或由两个字节创建一个字符。word(x)word(h,l)参数 X:任何类型的值 H:高阶(最左边)字节 L:低序(最右边)字节 修饰符类似于 C static volatile const 辅助工具 sizeof()数字 I/O pinMode()将 指 定 的 引 脚 配 置 成 输 出 或 输 入【pinMode(pin,mode)pin:要 设 立 模 式 的 引脚 mode:INPUT 或 OUTPUT】例子:ledPin=13/LED 连接到数字脚 13 void setup()pinMode(ledPin,OUTPUT);/设立数字脚为输出 void loop()digit
10、alWrite(ledPin,HIGH);/点亮 LED delay(1000);/等待一秒 digitalWrite(ledPin,LOW);/灭掉 LED delay(1000);/等待第二个 digitalWrite()给一个数字引脚写入 HIGH 或者 LOW。假如一个引脚已经使用 pinMode()配置为 OUTPUT 模式,其电压将被设立为相应的值,HIGH 为5V(3.3V 控制板上为 3.3V),LOW 为 0V。假如引脚配置为 INPUT 模式,使用 digitalWrite()写入 HIGH 值,将使内部 20K 上拉电阻(详见数字引脚教程)。写入 LOW 将会禁用上拉。上
11、拉电阻可以点亮一个 LED 让其微微亮,假如 LED 工作,但是亮度很低,也许是由于这个因素引起的。补救的办法是 使用 pinMode()函数设立为输出引脚。注意:数字 13 号引脚难以作为数字输入使用,由于大部分的控制板上使用了一颗 LED 与一个电阻连接到他。假如启动了内部的 20K 上拉电阻,他的电压将在 1.7V 左右,而不是正常的 5V,由于板载 LED 串联的电阻把他使他降了下来,这意味着他返回的值总是 LOW。假如必须使用数字 13 号引脚的输入模式,需要使用外部上拉下拉电阻。digitalRead()digitalRead(PIN)【pin:你想读取的引脚号(int),返回 H
12、IGH 或 LOW】例子:ledPin=13/LED 连接到 13 脚 int inPin=7;/按钮连接到数字引脚 7 int val=0;/定义变量存以储读值 void setup()pinMode(ledPin,OUTPUT);/将 13 脚设立为输出 pinMode(inPin,INPUT);/将 7 脚设立为输入 void loop()val=digitalRead(inPin);/读取输入脚 digitalWrite(ledPin,val);/将 LED 值设立为按钮的值 模拟 I/O analogReference()analogReference(type)配置用于模拟输入的基
13、准电压(即输入范围的最大值)。选项有:DEFAULT:默认 5V(Arduino 板为 5V)或 3.3 伏特(Arduino 板为 3.3V)为基准电压。INTERNAL:在 ATmega168 和 ATmega328 上以 1.1V 为基准电压,以及在 ATmega8 上以 2.56V为基准电压(Arduino Mega 无此选项)INTERNAL1V1:以 1.1V 为基准电压(此选项仅针对 Arduino Mega)INTERNAL2V56:以 2.56V 为基准电压(此选项仅针对 Arduino Mega)EXTERNAL:以 AREF 引脚(0 至 5V)的电压作为基准电压。typ
14、e:使 用 哪 种 参 考 类 型(DEFAULT,INTERNAL,INTERNAL1V1,INTERNAL2V56,或者 EXTERNAL)改变基准电压后,之前从 anal?ogRead()读取的数据也许不准确。不要在 AREF 引脚上使用使用任何小于 0V 或超过 5V 的外部电压。假如你使用 AREF 引脚上的电压作为基准电压,你在调用 analogRead()前必须设立参考类型为 EXTERNAL。否则,你将会削短有效的基准电压(内部产生)和 AREF 引脚,这也许会损坏您 Arduino 板上的单片机。此外,您可以在外部基准电压和 AREF 引脚之间连接一个 5K 电阻,使你可以在
15、外部和内部基准电压之间切换。请注意,总阻值将会发生改变,由于 AREF 引脚内部有一个 32K 电阻。这两个电阻都有分压作用。所以,例如,假如输入 2.5V 的电压,最终在在 AREF 引脚上的电压将为 2.5*32/(32+5)=2.2V。analogRead()从指定的模拟引脚读取数据值。Arduino 板包含一个 6 通道(Mini 和 Nano 有 8 个通道,Mega有 16 个通道),10 位模拟数字转换器。这意味着它将 0 至 5 伏特之间的输入电压映射到 0 至 1023之间的整数值。这将产生读数之间的关系:5 伏特/1024 单位,或 0.0049 伏特(4.9 mV)每单位
16、。输入范围和精度可以使用 analogReference()改变。它需要大约 100 微秒(0.0001)来读取模拟输入,所以最大的阅读速度是每秒 10000 次。analogRead(PIN)引脚:从输入引脚(大部分板子从 0 到 5,Mini 和 Nano 从 0 到 7,Mega 从 0 到 15)读取数值,返回从 0 到 1023 的整数值 例子:int analogPin=3;/电位器(中间的引脚)连接到模拟输入引脚 3 /此外两个引脚分别接地和+5 V int val=0;/定义变量来存储读取的数值 void setup()serial.begin(9600);/设立波特率(960
17、0)void loop()val=analogRead(analogPin);/从输入引脚读取数值 serial.println(val);/显示读取的数值 analogWrite()-PWM analogWrite(pin,value)从一个引脚输出模拟值(PWM)。可用于让 LED 以不同的亮度点亮或驱动电机以不同的速度旋转。analogWrite()输出结束后,该引脚将产生一个稳定的特殊占空比方波,直到下次调用analogWrite()(或在同一引脚调用 digitalRead()或 digitalWrite())。PWM 信号的频率大约是 490 赫兹。在大多数 arduino 板(A
18、Tmega168 或 ATmega328),只有引脚 3,5,6,9,10 和 11 可以实现该功能。在 aduino Mega 上,引脚 2 到 13 可以实现该功能。老的 Arduino 板(ATmega8)的只有引脚 9、10、11 可以使用 analogWrite()。在使用 analogWrite()前,你不需要调用 pinMode()来设立引脚为输出引脚。analogWrite 函数与模拟引脚、analogRead 函数没有直接关系。pin:用于输入数值的引脚。value:占空比:0(完全关闭)到 255(完全打开)之间。例子:int ledPin=9;/LED 连接到数字引脚 9
19、 int analogPin=3;/电位器连接到模拟引脚 3 int val=0;/定义变量存以储读值 void setup()pinMode(ledPin,OUTPUT);/设立引脚为输出引脚 void loop()val=analogRead(analogPin);/从输入引脚读取数值 analogWrite(ledPin,val/4);/以 val/4 的数值点亮 LED(由于 analogRead读取的数值从 0 到 1023,而 analogWrite 输出的数值从 0 到 255)高级 I/O tone()在一个引脚上产生一个特定频率的方波(50%占空比)。连续时间可以设定,否则波
20、形会一直产生直到调用 noTone()函数。该引脚可以连接压电蜂鸣器或其他喇叭播放声音。在同一时刻只能产生一个声音。假如一个引脚已经在播放音乐,那调用 tone()将不会有任何效果。假如音乐在同一个引脚上播放,它会自动调整频率。使用 tone()函数会与 3 脚和 11 脚的 PWM 产生干扰(Mega 板除外)。注意:假如你要在多个引脚上产生不同的音调,你要在对下一个引脚使用 tone()函数前对此引脚调用 noTone()函数。tone(pin,frequency)tone(pin,frequency,duration)pin:要产生声音的引脚 frequency:产生声音的频率,单位 H
21、z,类型 unsigned int duration:声音连续的时间,单位毫秒(可选),类型 unsigned long noTone()停止由 tone()产生的方波。假如没有使用 tone()将不会有效果。noTone(pin)pin:所要停止产生声音的引脚 shiftOut()将一个数据的一个字节一位一位的移出。从最高有效位(最左边)或最低有效位(最右边)开始。依次向数据脚写入每一位,之后时钟脚被拉高或拉低,指示刚才的数据有效。注意:假如你所连接的设备时钟类型为上升沿,你要拟定在调用 shiftOut()前时钟脚为低电平,如调用 digitalWrite(clockPin,LOW)。注意
22、:这是一个软件实现;Arduino 提供了一个硬件实现的 SPI 库,它速度更快但只在特定脚有效。shiftOut(dataPin,clockPin,bitOrder,value)dataPin:输出每一位数据的引脚(int)clockPin:时钟脚,当 dataPin 有值时此引脚电平变化(int)bitOrder:输出位的顺序,最高位优先或最低位优先 value:要移位输出的数据(byte)dataPin 和 clockPin 要用 pinMode()配置为输出。shiftOut 目前只能输出 1 个字节(8 位),所以假如输出值大于 255 需要分两步。/最高有效位优先串行输出 int
23、data=500;/移位输出高字节 shiftOut(dataPin,clock,MSBFIRST,(data 8);/移位输出低字节 shiftOut(data,clock,MSBFIRST,data);/最低有效位优先串行输出 data=500;/移位输出低字节 shiftOut(dataPin,clock,LSBFIRST,data);/移位输出高字节 shiftOut(dataPin,clock,LSBFIRST,(data 8);例子:相应电路,查看 tutorial on controlling a 74HC595 shift register /引脚连接到 74HC595 的 S
24、T_CP int latchPin=8;/引脚连接到 74HC595 的 SH_CP int clockPin=12;/引脚连接到 74HC595 的 DS int dataPin=11;void setup()/设立引脚为输出 pinMode(latchPin,OUTPUT);pinMode(clockPin,OUTPUT);pinMode(dataPin,OUTPUT);void loop()/向上计数程序 for(J=0;J 0)/读取传入的字节:incomingByte=Serial.read();/显示你得到的数据:Serial.print(I received:);Serial.p
25、rintln(incomingByte,DEC);begin()将串行数据传输速率设立为位/秒(波特)。与计算机进行通信时,可以使用这些波特率:300,1200,2400,4800,9600,14400,19200,28800,38400,57600 或 115200。当然,您也可以指定其他波特率-例如,引脚 0 和 1 和一个元件进行通信,它需要一个特定的波特率 Serial.begin(speed)仅合用于Arduino Mega:Serial1.begin(speed)Serial2.begin(speed)Serial3.begin(speed)speed:位/秒(波特)-long e
26、nd()停用串行通信,使 RX 和 TX 引脚用于一般输入和输出。要重新使用串行通信,需要 Serial.begin()语句 Serial.end()仅合用于 Arduino Mega:Serial1.end()Serial2.end()Serial3.end()find()Serial.find()从串行缓冲器中读取数据,直到发现给定长度的目的字符串。假如找到目的字符串,该函数返回 true,假如超时则返回 false Serial.flush()继承了 Stream 类 Serial.find(target)target:要搜索的字符串(字符)findUntil()Serial.findU
27、ntil()从串行缓冲区读取数据,直到找到一个给定的长度或字符串终止位。假如目的字符串被发现,该函数返回 true,假如超时则返回 false。Serial.findUntil()继承了 Stream 类。Serial.findUntil(target,terminal)target:要搜索的字符串(char)terminal:在搜索中的字符串终止位(char)flush()等待超过的串行数据完毕传输。(在 1.0 及以上的版本中,flush()语句的功能不再是丢弃所有进入缓存器的串行数据。)flush()继承了 Stream 类 Serial.flush()仅 Arduino Mega 可以
28、使用的语法:Serial1.flush()Serial2.flush()Serial3.flush()parseFloat()查找传入的串行数据流中的下一个有效的浮点数。parseFloat()继承了 Stream 类 Serial.parseFloat()仅合用于 Arduino Mega:Serial1.parseFloat()Serial2.parseFloat()Serial3.parseFloat()parseInt()查找传入的串行数据流中的下一个有效的整数。parseInt()继承了 Stream 类 Serial.parseInt()仅合用于 Arduino Mega:Seri
29、al1.parseInt()Serial2.parseInt()Serial3.parseInt()peek()返回传入的串行数据的下一个字节(字符),而不是进入内部串行缓冲器调取。也就是说,连续调用 peek()将返回相同的字符,与调用 read()方法相同。peek()继承自 Stream 类 Serial.peek()仅合用于 Arduino Mega:Serial1.peek()Serial2.peek()Serial3.peek()print()以人们可读的 ASCII 文本形式打印数据到串口输出。此命令可以采用多种形式。每个数字的打印输出使用的是 ASCII 字符。浮点型同样打印输
30、出的是ASCII 字符,保存到小数点后两位。Bytes型则打印输出单个字符。字符和字符串原样打印输出。Serial.print()打印输出数据不换行,Serial.println()打印输出数据自动换行解决。例如 Serial.print(78)输出为“78”Serial.print(1.23456)输出为“1.23”Serial.print(“N”)输出为“N”Serial.print(“Hello world.”)输出为“Hello world.”也可以自己定义输出为几进制(格式);可以是 BIN(二进制,或以 2 为基数),OCT(八进制,或以 8 为基数),DEC(十进制,或以 10
31、为基数),HEX(十六进制,或以 16 为基数)。对于浮点型数字,可以指定输出的小数数位。例如 Serial.print(78,BIN)输出为“1001110”Serial.print(78,OCT)输出为“116”Serial.print(78,DEC)输出为“78”Serial.print(78,HEX)输出为“4E”Serial.println(1.23456,0)输出为“1”Serial.println(1.23456,2)输出为“1.23”Serial.println(1.23456,4)输出为“1.2346”你可以通过基于闪存的字符串来进行打印输出,将数据放入 F()中,再放入Se
32、rial.print()。例 如 Serial.print(F(“Hello world”)若 要 发 送 一 个 字 节,则 使用 Serial.write()Serial.print(val)Serial.print(val,格式)val:打印输出的值-任何数据类型 格式:指定进制(整数数据类型)或小数位数(浮点类型)例子:int x=0;/定义一个变量并赋值 void setup()Serial.begin(9600);/打开串口传输,并设立波特率为 9600 void loop()/打印标签 Serial.print(NO FORMAT);/打印一个标签 Serial.print(t)
33、;/打印一个转义字符 Serial.print(DEC);Serial.print(t);Serial.print(HEX);Serial.print(t);Serial.print(OCT);Serial.print(t);Serial.print(BIN);Serial.print(t);for(x=0;x 0)/读取传入的数据:incomingByte=Serial.read();/打印你得到的:Serial.print(I received:);Serial.println(incomingByte,DEC);readBytes()Serial.readBytes()从串口读字符到一个
34、缓冲区。假如预设的长度读取完毕或者时间到了(参见 Serial.setTimeout(),函数将终止.Serial.readBytes()返回放置在缓冲区的字符数。返回 0 意味着没有发现有效的数据。Serial.readBytes()继承自 Stream 类 Serial.readBytes(buffer,length)buffer:用来存储字节(char或 byte)的缓冲区 length:读取的字节数(int)readBytesUntil()Serial.readBytesUntil()将字符从串行缓冲区读取到一个数组。假如检测到终止字符,或预设的读取长度读取完毕,或者时间到了(参见 S
35、erial.setTimeout()函数将终止。Serial.readBytesUntil()返回读入数组的字符数。返回 0 意味着没有发现有效的数据。Serial.readBytesUntil()继承自 Stream 类 Serial.readBytesUntil(character,buffer,length)character:要搜索的字符(char)buffer:缓冲区来存储字节(char或 byte)length:读的字节数(int)setTimeout()Serial.setTimeout()设立使用 Serial.readBytesUntil()或 Serial.readByte
36、s()时等待串口数据的最大毫秒值.默认为 1000 毫秒。Serial.setTimeout()继承自 Stream 类 Serial.setTimeout(time)time:以毫秒为单位的超时时间(long)write()写入二级制数据到串口。发送的数据以一个字节或者一系列的字节为单位。假如写入的数字为字符,需使用print()命令进行代替 Serial.write(val)Serial.write(str)Serial.write(buf,len)Arduino Mega 还支持:Serial1,Serial2,Serial3(替代 Serial)val:以单个字节形式发的值 str:以一串字节的形式发送的字符串 buf:以一串字节的形式发送的数组 len:数组的长度 返回结果:byte write()将返回写入的字节数,但是否使用这个数字是可选的 SerialEvent()Stream USB(仅合用于 Leonardo 和 Due)键盘 鼠标