Arduino编程参考手册中文版.docx
《Arduino编程参考手册中文版.docx》由会员分享,可在线阅读,更多相关《Arduino编程参考手册中文版.docx(16页珍藏版)》请在冰豆网上搜索。
![Arduino编程参考手册中文版.docx](https://file1.bdocx.com/fileroot1/2022-10/28/d54f918d-da7b-4c56-9c72-cd2a9e1a97af/d54f918d-da7b-4c56-9c72-cd2a9e1a97af1.gif)
Arduino编程参考手册中文版
Arduino编程参考手册
首页
程序结构
setup()
loop()
控制结构
if
if...else
for
switchcase
while
do...while
break
continue
return
goto
相关语法
;分号
{大括号
.else
与基本的if语句相比,由于允许多个测试组合在一起,if/else可以使用更多的控制流。
例如,可以测试一个模拟量输入,如果输入值小于500,则采取一个动作,而如果输入值大于或等于500,则采取另一个动作。
代码看起来像是这样:
if(pinFiveInput<500)
{
.case通过允许程序员根据不同的条件指定不同的应被执行的代码来控制程序流。
特别地,一个switch语句对一个变量的值与case语句中指定的值进行比较。
当一个case语句被发现其值等于该变量的值。
就会运行这个case语句下的代码。
break关键字将中止并跳出switch语句段,常常用于每个case语句的最后面。
如果没有break语句,switch语句将继续执行下面的表达式(“持续下降”)直到遇到break,或者是到达switch语句的末尾。
示例:
switch(var){
case1:
.while
do循环
do循环与while循环使用相同方式工作,不同的是条件是在循环的末尾被测试的,所以do循环总是至少会运行一次。
do
{
.else]的分支控制结构的一部分。
布尔运算符
它们可用于if语句中的条件
&&(逻辑与)
只有在两个操作数都为真时才返回真,例如:
if(digitalRead
(2)==HIGH&&digitalRead(3)==HIGH){.
}
只在两个输入都为高时返回真
||(逻辑或)
任意一个为真时返回真,例如:
if(x>0||y>0){
.
}
x或y任意一个大于0时返回真
!
(非)
当操作数为假时返回真,例如:
if(!
x){
.
}
若x为假返回真(即如果x等于0)
警告
确保你没有把布尔与运算符,&&(两个与符号)错认为按位与运算符&(单个与符号)。
它们是完全不同的概念。
同样,不要混淆布尔或运算符||(双竖杠)与按位或运算符|(单竖杠)。
按位取反~(波浪号)看起来与布尔非!
有很大不同(感叹号或程序员口中的“棒”),但是你仍然必须确保在什么地方用哪一个。
例如
if(a>=10&&a<=20){}
在a和b的16位的每一位将使用按位与处理。
且所有16位结果存入C中,以二进制存入的结果值01000100,即十进制的68。
按位与的其中一个最常用的用途是从一个整型数中选择特定的位,常被称为掩码屏蔽。
看如下示例:
位或
按位或(|)
在C++中按位或运算符是垂直的条杆符号,|。
就像&运算符,|独立地计算它周围的两个整型表达式的每一位。
(当然)它所做的是不同的(操作)。
两个输入位其中一个或都是1按位或将得到1,否则为0。
换句话说:
0011operand1
0101operand2
----------
0111(operand1|operand2)-returnedresult
这是一个使用一小断C++代码描述的按位或(运算)的例子:
inta=92;
按位与和按位或的一个共同的工作是在端口上进行程序员称之为读-改-写的操作。
在微控制器中,每个端口是一个8位数字,每一位表示一个引脚的状态。
写一个端口可以同时控制所有的引脚。
PORTD是内建的参照数字口0,1,2,3,4,5,6,7的输出状态的常量。
如果一个比特位是1,那么该引脚置高。
(引脚总是需要用pinMode()指令设置为输出模式)。
所以如果我们写入PORTD=B00110001;我们就会让引脚2,3和7输出高。
一个小小的问题是,我们同时也改变了某些引脚的0,1状态。
这用于Arduino与串口通讯,所以我们可能会干扰串口通讯。
我们的程序规则是:
仅仅获取和清除我们想控制的与相应引脚对应的位(使用按位与)。
合并要修改的PORTD值与所控制的引脚的新值(使用按位或)。
inti;.
1<<8==256
1<<9==512
1<<10==1024
...
当把x右移y位,x的最高位为1,该行为依赖于x的确切的数据类型。
如果x的类型是int,最高位为符号位,决定x是不是负数,正如我们在上面已经讨论过的。
在这种情况下,符号位会复制到较低的位:
intx=-16;
复合运算符
自加++
i++;PI.
#defineHALF_PI
二分之一PI
#defineTWO_PI
二倍PI
#defineDEG_TO_RAD
弧度转角度
#defineRAD_TO_DEG
角度转弧度
整型常量
整数常量
整数常量是直接在程序中使用的数字,如123。
默认情况下,这些数字被视为int,但你可以通过U和L修饰符进行更多的限制(见下文)。
通常情况下,整数常量默认为十进制,但可以加上特殊前缀表示为其他进制。
进制例子格式备注
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是有效的。
示例:
10105;浮点数可以用科学记数法表示。
'E'和'e'都可以作为有效的指数标志。
浮点数被转换为被转换为
10
*10^5234000
67E-12*10^-12
数据类型
void
void只用在函数声明中。
它表示该函数将不会被返回任何数据到它被调用的函数中。
例子
.
}
voidloop()
{
.
}
boolean
布尔
一个布尔变量拥有两个值,true或false。
(每个布尔变量占用一个字节的内存。
)
例子
intLEDpin=5;.
}
voidloop()
{
inti;.
for(intj=0;j<100;j++){
..
x=pi*2;78N110n
1547/79O111o
1648080P112p
1749181Q113q
1850282R114r
1951383S115s
2052484T116t
2153585U117u
2254686V118v
2355787W119w
2456888X120x
2557989Y121y
2658:
90Z122z
2759;91[123{
2860<92\124|
2961=93]125}
3062>94^126~
316395_127
基本函数
(本节由柴树杉[翻译整理]))
数字I/O
pinMode()
voidpinMode(uint8_tpin,uint8_tmode)
设置引脚模式
配置引脚为输出或输出模式.
参数:
pin引脚编号
mode:
INPUT,OUTPUT,或INPUT_PULLUP.
例子:
intledPin=13;
digitalWrite()
voiddigitalWrite(uint8_tpin,uint8_tvalue)
写数字引脚
写数字引脚,对应引脚的高低电平.在写引脚之前,需要将引脚设置为OUTPUT模式.
参数:
pin引脚编号
valueHIGH或LOW
用法:
intledPin=13;
digitalRead()
intdigitalRead(uint8_tpin)
读数字引脚
读数字引脚,返回引脚的高低电平.在读引脚之前,需要将引脚设置为INPUT模式.
参数:
pin引脚编号
返回:
HIGH或LOW
intledPin=13;
模拟I/O
analogReference()
voidanalogReference(uint8_ttype)
配置参考电压
配置模式引脚的参考电压.函数analogRead在读取模拟值之后,将根据参考电压将模拟值转换到[0,1023]区间.有以下类型:
DEFAULT:
默认5V.INTERNAL:
低功耗模式.ATmega168和ATmega8对应到.EXTERNAL:
扩展模式.通过AREF引脚获取参考电压.
参数:
type参考类型(DEFAULT/INTERNAL/EXTERNAL)
analogRead()
intanalogRead(uint8_tpin)
读模拟引脚
读模拟引脚,返回[0-1023]之间的值.每读一次需要花1微妙的时间.
参数:
pin引脚编号
返回:
0到1023之间的值
例子:
intanalogPin=3;可以用来控制LED的亮度,或者控制电机的转速.在执行该操作后,应该等待一定时间后才能对该引脚进行下一次的读或写操作.PWM的频率大约为490Hz.
在一些基于ATmega168的新的Arduino控制板(如Mini和BT)中,该函数支持以下引脚:
3,5,6,9,10,11.在基于ATmega8的型号中支持9,10,11引脚.
例子:
intledPin=9;其中dataPin为连接DS的引脚号,clockPin为连接SH_CP的引脚号,bitOrder为设置数据位移顺序,分别为高位先入MSBFIRST或者低位先入LSBFIRST.
参数:
dataPin数据引脚
clockPin时钟引脚
bitOrder移位顺序(MSBFIRST或LSBFIRST)
val数据
如果是HIGH,函数将先等引脚变为高电平,然后开始计时,一直到变为低电平为止.返回脉冲持续的时间长短,单位为毫秒.如果超时还没有读到的话,将返回0.
参数:
pin引脚编号
state脉冲状态
timeout超时时间
下面的例子演示了统计高电平的继续时间:
intpin=7;
unsignedlongduration;
voidsetup()
{
pinMode(pin,INPUT);
}
voidloop()
{
duration=pulseIn(pin,HIGH);
}
时间
millis()
unsignedlongmillis(void)
毫秒时间
获取机器运行的时间长度,单位毫秒.系统最长的记录时间为9小时22分,如果超出时间将从0开始.
警告:
时间为unsignedlong类型,如果用int保存时间将得到错误结果:
delay