arduino语法Word下载.docx
《arduino语法Word下载.docx》由会员分享,可在线阅读,更多相关《arduino语法Word下载.docx(27页珍藏版)》请在冰豆网上搜索。
(大于)
=(小于等于)
=(大于等于)
布尔运算符类似于C
//&
&
(与)
||(或)
!
(非)
指针运算符类似于C
//*取消引用运算符
引用运算符
位运算符类似于C
&
(bitwiseand)
|(bitwiseor)
^(bitwisexor)
~(bitwisenot)
(bitshiftleft)
(bitshiftright)
复合运算符类似于C
++(increment)
--(decrement)
+=(compoundaddition)
-=(compoundsubtraction)
*=(compoundmultiplication)
/=(compounddivision)
=(compoundbitwiseand)
|=(compoundbitwiseor)
常量
constants预定义的常量
BOOL
truefalse
引脚电压定义,HIGH和LOW【当读取(read)或写入(write)数字引脚时只有两个可能的值:
HIGH和LOW】
HIGH(参考引脚)的含义取决于引脚(pin)的设置,引脚定义为INPUT或OUTPUT时含义有所不同。
当一个引脚通过pinMode被设置为INPUT,并通过digitalRead读取(read)时。
如果当前引脚的电压大于等于3V,微控制器将会返回为HIGH。
引脚也可以通过pinMode被设置为INPUT,并通过digitalWrite设置为HIGH。
输入引脚的值将被一个内在的20K上拉电阻控制在HIGH上,除非一个外部电路将其拉低到LOW。
当一个引脚通过pinMode被设置为OUTPUT,并digitalWrite设置为HIGH时,引脚的电压应在5V。
在这种状态下,它可以输出电流。
例如,点亮一个通过一串电阻接地或设置为LOW的OUTPUT属性引脚的LED。
LOW的含义同样取决于引脚设置,引脚定义为INPUT或OUTPUT时含义有所不同。
当一个引脚通过pinMode配置为INPUT,通过digitalRead设置为读取(read)时,如果当前引脚的电压小于等于2V,微控制器将返回为LOW。
当一个引脚通过pinMode配置为OUTPUT,并通过digitalWrite设置为LOW时,引脚为0V。
在这种状态下,它可以倒灌电流。
例如,点亮一个通过串联电阻连接到+5V,或到另一个引脚配置为OUTPUT、HIGH的的LED。
数字引脚(Digitalpins)定义,INPUT和OUTPUT【数字引脚当作INPUT或OUTPUT都可以。
用pinMode()方法使一个数字引脚从INPUT到OUTPUT变化】
Arduino(Atmega)引脚通过pinMode()配置为输入(INPUT)即是将其配置在一个高阻抗的状态。
配置为INPUT的引脚可以理解为引脚取样时对电路有极小的需求,即等效于在引脚前串联一个100兆欧姆(Megohms)的电阻。
这使得它们非常利于读取传感器,而不是为LED供电。
引脚通过pinMode()配置为输出(OUTPUT)即是将其配置在一个低阻抗的状态。
这意味着它们可以为电路提供充足的电流。
Atmega引脚可以向其他设备/电路提供(提供正电流positivecurrent)或倒灌(提供负电流negativecurrent)达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是有效的。
'
u'
or'
U'
指定一个常量为无符号型。
(只能表示正数和0)例如:
33u
l'
L'
指定一个常量为长整型。
(表示数的范围更广)例如:
100000L
ul'
UL'
这个你懂的,就是上面两种类型,称作无符号长整型。
例如:
32767ul
浮点常量
浮点数被转换为
被转换为
10.0
10
2.34E5
2.34*10^5234000
67E-12
67.0*10^-12
0.000000000067
数据类型类似于C
void
boolean
char
unsignedchar
byte
int
unsignedint
word
long
unsignedlong
float
double
string-chararray
String-object
array-(数组)
数据类型转换类似于C
char()
byte()
int()
word()
long()
float()
word()
把一个值转换为word数据类型的值,或由两个字节创建一个字符。
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
voidsetup()
{
pinMode(ledPin,OUTPUT);
//设置数字脚为输出
}
voidloop()
digitalWrite(ledPin,HIGH);
//点亮LED
delay(1000);
//等待一秒
digitalWrite(ledPin,LOW);
//灭掉LED
//等待第二个
digitalWrite()
给一个数字引脚写入HIGH或者LOW。
如果一个引脚已经使用pinMode()配置为OUTPUT模式,其电压将被设置为相应的值,HIGH为5V(3.3V控制板上为3.3V),LOW为0V。
如果引脚配置为INPUT模式,使用digitalWrite()写入HIGH值,将使内部20K上拉电阻(详见数字引脚教程)。
写入LOW将会禁用上拉。
上拉电阻可以点亮一个LED让其微微亮,如果LED工作,但是亮度很低,可能是因为这个原因引起的。
补救的办法是使用pinMode()函数设置为输出引脚。
注意:
数字13号引脚难以作为数字输入使用,因为大部分的控制板上使用了一颗LED与一个电阻连接到他。
如果启动了内部的20K上拉电阻,他的电压将在1.7V左右,而不是正常的5V,因为板载LED串联的电阻把他使他降了下来,这意味着他返回的值总是LOW。
如果必须使用数字13号引脚的输入模式,需要使用外部上拉下拉电阻。
digitalRead()
digitalRead(PIN)
【pin:
你想读取的引脚号(int),返回HIGH或LOW】
ledPin=13//LED连接到13脚
intinPin=7;
//按钮连接到数字引脚7
intval=0;
//定义变量存以储读值
pinMode(ledPin,OUTPUT);
//将13脚设置为输出
pinMode(inPin,INPUT);
//将7脚设置为输入
val=digitalRead(inPin);
//读取输入脚
digitalWrite(ledPin,val);
//将LED值设置为按钮的值
模拟I/O
analogReference()
analogReference(type)
配置用于模拟输入的基准电压(即输入范围的最大值)。
选项有:
DEFAULT:
默认5V(Arduino板为5V)或3.3伏特(Arduino板为3.3V)为基准电压。
INTERNAL:
在ATmega168和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或超过5V的外部电压。
如果你使用AREF引脚上的电压作为基准电压,你在调用analogRead()前必须设置参考类型为EXTERNAL。
否则,你将会削短有效的基准电压(内部产生)和AREF引脚,这可能会损坏您Arduino板上的单片机。
另外,您可以在外部基准电压和AREF引脚之间连接一个5K电阻,使你可以在外部和内部基准电压之间切换。
请注意,总阻值将会发生改变,因为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.9mV)每单位。
输入范围和精度可以使用analogReference()改变。
它需要大约100微秒(0.0001)来读取模拟输入,所以最大的阅读速度是每秒10000次。
analogRead(PIN)
引脚:
从输入引脚(大部分板子从0到5,Mini和Nano从0到7,Mega从0到15)读取数值,返回从0到1023的整数值
intanalogPin=3;
//电位器(中间的引脚)连接到模拟输入引脚3
//另外两个引脚分别接地和+5V
//定义变量来存储读取的数值
serial.begin(9600);
//设置波特率(9600)
val=analogRead(analogPin);
//从输入引脚读取数值
serial.println(val);
//显示读取的数值
analogWrite()-PWM
analogWrite(pin,value)
从一个引脚输出模拟值(PWM)。
可用于让LED以不同的亮度点亮或驱动电机以不同的速度旋转。
analogWrite()输出结束后,该引脚将产生一个稳定的特殊占空比方波,直到下次调用analogWrite()(或在同一引脚调用digitalRead()或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(完全打开)之间。
intledPin=9;
//LED连接到数字引脚9
//电位器连接到模拟引脚3
pinMode(ledPin,OUTPUT);
//设置引脚为输出引脚
//从输入引脚读取数值
analogWrite(ledPin,val/4);
//以val/4的数值点亮LED(因为analogRead读取的数值从0到1023,而analogWrite输出的数值从0到255)
高级I/O
tone()
在一个引脚上产生一个特定频率的方波(50%占空比)。
持续时间可以设定,否则波形会一直产生直到调用noTone()函数。
该引脚可以连接压电蜂鸣器或其他喇叭播放声音。
在同一时刻只能产生一个声音。
如果一个引脚已经在播放音乐,那调用tone()将不会有任何效果。
如果音乐在同一个引脚上播放,它会自动调整频率。
使用tone()函数会与3脚和11脚的PWM产生干扰(Mega板除外)。
如果你要在多个引脚上产生不同的音调,你要在对下一个引脚使用tone()函数前对此引脚调用noTone()函数。
tone(pin,frequency)
tone(pin,frequency,duration)
要产生声音的引脚
frequency:
产生声音的频率,单位Hz,类型unsignedint
duration:
声音持续的时间,单位毫秒(可选),类型unsignedlong
noTone()
停止由tone()产生的方波。
如果没有使用tone()将不会有效果。
noTone(pin)
pin:
所要停止产生声音的引脚
shiftOut()
将一个数据的一个字节一位一位的移出。
从最高有效位(最左边)或最低有效位(最右边)开始。
依次向数据脚写入每一位,之后时钟脚被拉高或拉低,指示刚才的数据有效。
如果你所连接的设备时钟类型为上升沿,你要确定在调用shiftOut()前时钟脚为低电平,如调用digitalWrite(clockPin,LOW)。
这是一个软件实现;
Arduino提供了一个硬件实现的SPI库,它速度更快但只在特定脚有效。
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>
8));
//移位输出低字节
shiftOut(data,clock,MSBFIRST,data);
//最低有效位优先串行输出
data=500;
shiftOut(dataPin,clock,LSBFIRST,data);
shiftOut(dataPin,clock,LSBFIRST,(data>
相应电路,查看tutorialoncontrollinga74HC595shiftregister
//引脚连接到74HC595的ST_CP
intlatchPin=8;
//引脚连接到74HC595的SH_CP
intclockPin=12;
////引脚连接到74HC595的DS
intdataPin=11;
voidsetup(){
//设置引脚为输出
pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT);
voidloop(){
//向上计数程序
for(J=0;
J<
256;
J++){
//传输数据的时候将latchPin拉低
digitalWrite(latchpin,LOW);
shiftOut(dataPin,clockPin,LSBFIRST,J);
//之后将latchPin拉高以告诉芯片
//它不需要再接受信息了
digitalWrite(latchpin,HIGH);
}
shiftIn()
将一个数据的一个字节一位一位的移入。
对于每个位,先拉高时钟电平,再从数据传输线中读取一位,再将时钟线拉低。
shiftIn(dataPin,clockPin,bitOrder)
输出位的顺序,最高位优先或最低位优先
pulseIn()
读取一个引脚的脉冲(HIGH或LOW)。
例如,如果value是HIGH,pulseIn()会等待引脚变为HIGH,开始计时,再等待引脚变为LOW并停止计时。
返回脉冲的长度,单位微秒。
如果在指定的时间内无脉冲函数返回。
此函数的计时功能由经验决定,长时间的脉冲计时可能会出错。
计时范围从10微秒至3分钟。
(1秒=1000毫秒=1000000微秒)
pulseIn(pin,value)
pulseIn(pin,value,timeout)
你要进行脉冲计时的引脚号(int)。
要读取的脉冲类型,HIGH或LOW(int)。
timeout(可选):
指定脉冲计数的等待时间,单位为微秒,默认值是1秒(unsignedlong)
返回:
脉冲长度(微秒),如果等待超时返回0(unsignedlong)
intpin=7;
unsignedlongduration;
pinMode(pin,INPUT);
duration=pulseIn(pin,HIGH);
;
时间