Arduino语法手册.docx

上传人:b****1 文档编号:13733618 上传时间:2023-06-16 格式:DOCX 页数:123 大小:91.13KB
下载 相关 举报
Arduino语法手册.docx_第1页
第1页 / 共123页
Arduino语法手册.docx_第2页
第2页 / 共123页
Arduino语法手册.docx_第3页
第3页 / 共123页
Arduino语法手册.docx_第4页
第4页 / 共123页
Arduino语法手册.docx_第5页
第5页 / 共123页
Arduino语法手册.docx_第6页
第6页 / 共123页
Arduino语法手册.docx_第7页
第7页 / 共123页
Arduino语法手册.docx_第8页
第8页 / 共123页
Arduino语法手册.docx_第9页
第9页 / 共123页
Arduino语法手册.docx_第10页
第10页 / 共123页
Arduino语法手册.docx_第11页
第11页 / 共123页
Arduino语法手册.docx_第12页
第12页 / 共123页
Arduino语法手册.docx_第13页
第13页 / 共123页
Arduino语法手册.docx_第14页
第14页 / 共123页
Arduino语法手册.docx_第15页
第15页 / 共123页
Arduino语法手册.docx_第16页
第16页 / 共123页
Arduino语法手册.docx_第17页
第17页 / 共123页
Arduino语法手册.docx_第18页
第18页 / 共123页
Arduino语法手册.docx_第19页
第19页 / 共123页
Arduino语法手册.docx_第20页
第20页 / 共123页
亲,该文档总共123页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Arduino语法手册.docx

《Arduino语法手册.docx》由会员分享,可在线阅读,更多相关《Arduino语法手册.docx(123页珍藏版)》请在冰点文库上搜索。

Arduino语法手册.docx

Arduino语法手册

Arduino语法手册

Arduino的程序可以划分为三个主要部分:

结构、变量(变量与常量)、函数。

结构部分

一、结构

1.1setup()

1.2loop()

二、结构控制

2.1if

2.2if...else

2.3for

2.4switchcase

2.5while

2.6do...while

2.7break

2.8continue

2.9return

2.10goto

三、扩展语法

3.1;(分号)

3.2{}(花括号)

3.3//(单行注释)

3.4/**/(多行注释)

3.5#define

3.6#include

四、算数运算符

4.1=(赋值运算符)

4.2+(加)

4.3-(减)

4.4*(乘)

4.5/(除)

4.6%(模)

五、比较运算符

5.1==(等于)

5.2!

=(不等于)

5.3<(小于)

5.4>(大于)

5.5<=(小于等于)

5.6>=(大于等于)

六、布尔运算符

6.1&&(与)

6.2||(或)

6.3!

(非)

七、指针运算符

7.1*取消引用运算符

7.2&引用运算符

八、位运算符

8.1&(bitwiseand)

8.2|(bitwiseor)

8.3^(bitwisexor)

8.4~(bitwisenot)

8.5<<(bitshiftleft)

8.6>>(bitshiftright)

九、复合运算符

9.1++(increment)

9.2--(decrement)

9.3+=(compoundaddition)

9.4-=(compoundsubtraction)

9.5*=(compoundmultiplication)

9.6/=(compounddivision)

9.6&=(compoundbitwiseand)

9.8|=(compoundbitwiseor)

变量部分

十、常量

10.1HIGH|LOW(引脚电压定义)

10.2INPUT|OUTPUT(数字引脚(Digitalpins)定义)

10.3true|false(逻辑层定义)

10.4integerconstants(整数常量)

10.5floatingpointconstants(浮点常量)

十一、数据类型

11.1void

11.2boolean(布尔)

11.3char(有号数据类型)

11.4unsignedchar(无符号数据类型)

11.5byte(无符号数)

11.6int(整型)

11.7unsignedint(无符号整型)

11.8word

11.9long(长整数型)

11.10unsignedlong(无符号长整数型)

11.11float(浮点型数)

11.12double(双精度浮点数)

11.13string(chararray/字符串)

11.14Stringobject(String类)

11.15array(数组)

十二、数据类型转换

12.1char()

12.2byte()

12.3int()

12.4word()

12.5long()

12.6float()

十三、变量作用域&修饰符

13.1variablescope(变量的作用域)

13.2static(静态变量)

13.3volatile

13.4const

十四、辅助工具

14.1sizeof()

 

函数部分

十五、数字I/O

15.1pinMode()

15.2digitalWrite()

15.3digitalRead()

十六、模拟I/O

16.1analogReference()

16.2analogRead()

16.3analogWrite()PWM

十七、高级I/O

17.1tone()

17.2noTone()

17.3shiftOut()

17.4shiftIn()

17.5pulseIn()

十八、时间

18.1millis()

18.2micros()

18.3delay()

18.4delayMicroseconds()

十九、数学运算

19.1min()

19.2max()

19.3abs()

19.4constrain()

19.5map()

19.6pow()

19.7sqrt()

19.8ceil()

19.9exp()

19.10fabs()

19.11floor()

19.12fma()

19.13fmax()

19.14fmin()

19.15fmod()

19.16ldexp()

19.17log()

19.18log10()

19.19round()

19.20signbit()

19.21sq()

19.22square()

19.23trunc()

二十、三角函数

20.1sin()

20.2cos()

20.3tan()

20.4acos()

20.5asin()

20.6atan()

20.7atan2()

20.8cosh()

20.9degrees()

20.10hypot()

20.11radians()

20.12sinh()

20.13tanh()

二十一、随机数

21.1randomSeed()

21.2random()

二十二、位操作

22.1lowByte()

22.2highByte()

22.3bitRead()

22.4bitWrite()

22.5bitSet()

22.6bitClear()

22.7bit()

二十三、设置中断函数

23.1attachInterrupt()

23.2detachInterrupt()

二十四、开关中断

24.1interrupts()(中断)

24.2noInterrupts()(禁止中断)

二十五、通讯

25.1Serial

25.1.1if(Serial)

25.1.2Serial.available()

25.1.3Serial.begin()

25.1.4Serial.end()

25.1.5Serial.find()

25.1.6Serial.findUntil()

25.1.7Serial.flush()

25.1.8Serial.parseFloat()

25.1.9Serial.parseInt()

25.1.10Serial.peek()

25.1.11Serial.print()

25.1.12Serial.println()

25.1.13Serial.read()

25.1.14Serial.readBytes()

25.1.15Serial.readBytesUntil()

25.1.16Serial.setTimeout()

25.1.17Serial.write()

25.1.18Serial.SerialEvent()

25.2Stream

二十六、USB(仅适用于Leonardo和Due)

26.1Mouse(键盘)

26.2Keyboard(鼠标)

结构部分

一、结构

1.1setup()

在Arduino中程序运行时将首先调用setup()函数。

用于初始化变量、设置针脚的输出\输入类型、配置串口、引入类库文件等等。

每次Arduino上电或重启后,setup函数只运行一次。

示例

intbuttonPin=3;

voidsetup()

{

Serial.begin(9600);

pinMode(buttonPin,INPUT);

}

voidloop()

{

//...

}

 

1.2loop()

在setup()函数中初始化和定义了变量,然后执行loop()函数。

顾名思义,该函数在程序运行过程中不断的循环,根据一些反馈,相应改变执行情况。

通过该函数动态控制Arduino主控板。

示例

intbuttonPin=3;//setup中初始化串口和按键针脚.

voidsetup()

{

beginSerial(9600);

pinMode(buttonPin,INPUT);

}

//loop中每次都检查按钮,如果按钮被按下,就发送信息到串口

voidloop()

{

if(digitalRead(buttonPin)==HIGH)

serialWrite('H');

else

serialWrite('L');

delay(1000);

}

 

二、结构控制

2.1if

if(条件判断语句)和==、!

=、<、>(比较运算符)

if语句与比较运算符一起用于检测某个条件是否达成,如某输入值是否在特定值之上等。

if语句的语法是:

if(someVariable>50)

{

//执行某些语句

}

本程序测试someVariable变量的值是否大于50。

当大于50时,执行一些语句。

换句话说,只要if后面括号里的结果(称之为测试表达式)为真,则执行大括号中的语句(称之为执行语句块);若为假,则跳过大括号中的语句。

if语句后的大括号可以省略。

若省略大括号,则只有一条语句(以分号结尾)成为执行语句。

if(x>120)digitalWrite(LEDpin,HIGH);

if(x>120)

digitalWrite(LEDpin,HIGH);

if(x>120){digitalWrite(LEDpin,HIGH);}

if(x>120){

digitalWrite(LEDpin1,HIGH);

digitalWrite(LEDpin2,HIGH);

}//以上所有书写方式都正确

在小括号里求值的表达式,需要以下操作符:

比较运算操作符:

x==y(x等于y)

x!

=y(x不等于y)

x

x>y(x大于y)

x<=y(x小于等于y)

x>=y(x大于等于y)

警告:

注意使用赋值运算符的情况(如if(x=10))。

一个“=”表示的是赋值运算符,作用是将x的值设为10(将值10放入x变量的内存中)。

两个“=”表示的是比较运算符(如if(x==10)),用于测试x和10是否相等。

后面这个语句只有x是10时才为真,而前面赋值的那个语句则永远为真。

这是因为C语言按以下规则进行运算if(x=10):

10赋值给x(只要非0的数赋值的语句,其赋值表达式的值永远为真),因此x现在值为10。

此时if的测试表达式值为10,该值永远为真,因为非0值永远为真。

所以,if(x=10)将永远为真,这就不是我们运行if所期待的结果。

另外,x被赋值为10,这也不是我们所期待的结果。

if的另外一种分支条件控制结构是if...else形式。

2.2if...else

if/else是比if更为高级的流程控制语句,它可以进行多次条件测试。

比如,检测模拟输入的值,当它小于500时该执行哪些操作,大于或等于500时执行另外的操作。

代码如下:

if(pinFiveInput<500)

{

//执行A操作

}

else

{

//执行B操作

}

else可以进行额外的if检测,所以多个互斥的条件可以同时进行检测。

测试将一个一个进行下去,直到某个测试结果为真,此时该测试相关的执行语句块将被运行,然后程序就跳过剩下的检测,直接执行到if/else的下一条语句。

当所有检测都为假时,若存在else语句块,将执行默认的else语句块。

注意elseif语句块可以没有else语句块。

elseif分支语句的数量无限制。

if(pinFiveInput<500)

{

//执行A操作

}

elseif(pinFiveInput>=1000)

{

//执行B操作

}

else

{

//执行C操作

}

另外一种进行多种条件分支判断的语句是switchcase语句。

2.3for

for语句

描述

for语句用于重复执行一段在花括号之内的代码。

通常使用一个增量计数器计数并终止循环。

for语句用于重复性的操作非常有效,通常与数组结合起来使用来操作数据、引脚。

for循环开头有3个部分:

(初始化;条件;增量计数){

//语句

}

“初始化”只在循环开始执行一次。

每次循环,都会检测一次条件;如果条件为真,则执行语句和“增量计数”,之后再检测条件。

当条件为假时,循环终止。

例子

//用PWM引脚将LED变暗

intPWMpin=10;//将一个LED与47Ω电阻串联接在10脚

voidsetup()

{

//无需设置

}

voidloop()

{

for(inti=0;i<=255;i++)

{

analogWrite(PWMpin,i);

delay(10);

}

}

编程提示

C语言的for循环语句比BASIC和其他电脑编程语言的for语句更灵活。

除了分号以外,其他3个元素都能省略。

同时,初始化,条件,增量计算可以是任何包括无关变量的有效C语句,任何C数据类型包括float。

这些不寻常的for语句可能会解决一些困难的编程问题。

例如,在增量计数中使用乘法可以得到一个等比数列:

for(intx=2;x<100;x=x*1.5){

println(x);

}

生成:

2,3,4,6,9,13,19,28,42,63,94

另一个例子,使用for循环使LED产生渐亮渐灭的效果:

voidloop()

{

intx=1;

for(inti=0;i>-1;i=i+x)

{

analogWrite(PWMpin,i);

if(i==255)x=-1;//在峰值转变方向

delay(10);

}

}

2.4switchcase

switch/case语句

和if语句相同,switch…case通过程序员设定的在不同条件下执行的代码控制程序的流程。

特别地,switch语句将变量值和case语句中设定的值进行比较。

当一个case语句中的设定值与变量值相同时,这条case语句将被执行。

关键字break可用于退出switch语句,通常每条case语句都以break结尾。

如果没有break语句,switch语句将会一直执行接下来的语句(一直向下)直到遇见一个break,或者直到switch语句结尾。

例子

switch(var){

case1:

//当var等于1时,执行一些语句

break;

case2

//当var等于2时,执行一些语句

break;

default:

//如果没有任何匹配,执行default

//default可有可不有

}

语法

switch(var){

caselabel:

//声明

break;

caselabel:

//声明

break;

default:

//声明

}

参数

var:

用于与下面的case中的标签进行比较的变量值

label:

与变量进行比较的值

2.5while

while循环

描述

while循环会无限的循环,直到括号内的判断语句变为假。

必须要有能改变判断语句的东西,要不然while循环将永远不会结束。

这在您的代码表现为一个递增的变量,或一个外部条件,如传感器的返回值。

语法

while(表达){

//语句

}

参数

表达:

为真或为假的一个计算结果

例子

var=0;

while(var<200){

//重复一件事200遍

var++

}

2.6do...while

do…while循环与while循环运行的方式是相近的,不过它的条件判断是在每个循环的最后,所以这个语句至少会被运行一次,然后才被结束。

do

{

//语句

}while(测试条件);

例子

do

{

delay(50);//等待传感器稳定

X=readSensors();//检查传感器取值

}while(X<100);//当x小于100时,继续运行

 

2.7break

break用于退出do,for,while循环,能绕过一般的判断条件。

它也能够用于退出switch语句。

例子

for(x=0;x<255;x++)

{

digitalWrite(PWMpin,x);

sens=analogRead(sensorPin);

if(sens>threshold){//超出探测范围

x=0;

break;

}

delay(50);

}

2.8continue

continue语句跳过当前循环中剩余的迭代部分(do,for或while)。

它通过检查循环条件表达式,并继续进行任何后续迭代。

例子

for(x=0;x<255;x++)

{

if(x>40&&x<120){//当x在40与120之间时,跳过后面两句,即迭代。

continue;

}

digitalWrite(PWMpin,x);

delay(50);

}

2.9return

终止一个函数,如有返回值,将从此函数返回给调用函数。

语法

return;

returnvalue;//两种形式均可

参数

value:

任何变量或常量的类型

例子

一个比较传感器输入阈值的函数

intcheckSensor(){

if(analogRead(0)>400){

return1;}

else{

return0;

}

}

return关键字可以很方便的测试一段代码,而无需“commentout(注释掉)”大段的可能存在bug的代码。

voidloop(){

//写入漂亮的代码来测试这里。

return;

//剩下的功能异常的程序

//return后的代码永远不会被执行

}

2.10goto

程序将会从程序中已有的标记点开始运行

语法

label:

gotolabel;//从label处开始运行

提示

不要在C语言中使用goto编程,某些C编程作者认为goto语句永远是不必要的,但用得好,它可以简化某些特定的程序。

许多程序员不同意使用goto的原因是,​​通过毫无节制地使用goto语句,很容易创建一个程序,这种程序拥有不确定的运行流程,因而无法进行调试。

的确在有的实例中goto语句可以派上用场,并简化代码。

例如在一定的条件用if语句来跳出高度嵌入的for循环。

例子

for(byter=0;r<255;r++){

for(byteg=255;g>-1;g--){

for(byteb=0;b<255;b++){

if(analogRead(0)>250){

gotobailout;

}

//更多的语句...

}

}

}

bailout:

 

三、扩展语法

3.1;(分号)

用于表示一句代码的结束。

例子

inta=13;

提示

在每一行忘记使用分号作为结尾,将导致一个编译错误。

错误提示可能会清晰的指向缺少分号的那行,也可能不会。

如果弹出一个令人费解或看似不合逻辑的编译器错误,第一件事就是在错误附近检查是否缺少分号。

3.2{}(花括号)

大括号(也称为“括号”或“大括号”)是C编程语言中的一个重要组成部分。

它们被用来区分几个不同的结构,下面列出的,有时可能使初学者混乱。

左大括号“{”必须与一个右大括号“}”形成闭合。

这是一个常常被称为括号平衡的条件。

在ArduinoIDE(集成开发环境)中有一个方便的功能来检查大括号是否平衡。

只需选择一个括号,甚至单击紧接括号的插入点,就能知道这个括号的“伴侣括号”。

目前此功能稍微有些错误,因为IDE会经常会认为在注释中的括号是不正确的。

对于初学者,以及由BASIC语言转向学习C语言的程序员,经常不清楚如何使用括号。

毕竟,大括号还会在”return函数”、“endif条件句”以及“loop函数”中被使用到。

由于大括号被用在不同的地方,这有一种很好的编程习惯以避免错误:

输入一个大括号后,同时也输入另一个大括号以达到平衡。

然后在你的括号之间输入回车,然后再插入语句。

这样一来,你的括号就不会变得不平衡了。

不平衡的括号常可导致许多错误,比如令人费解的编译器错误,有时很难在一个程序找到这个错误。

由于其不同的用法,括号也是一个程序中非常重要的语法,如果括号发生错误,往往会极大地影响了程序的意义。

大括号中的主要用途

功能

voidmyfunction(datatypeargument){

statements(s)

}

循环

while(booleanexpression)

{

statement(s)

}

do

{

statement(s)

}

while(booleanexpression);

for(initialisation;terminationcondition;incrementingexpr)

{

statement(s)

}

条件语句

if(booleanexpression)

{

statement(s)

}

elseif(booleanexpression)

{

statement(s)

}

else

{

statement(s)

}

3.3//(单行注释)

Comments(注释)

注释用于提醒自己或他人程序是如何工作的。

它们会被编译器忽略掉,也不会传送给处理器,所以它们在Atmega芯片上不占用体积。

注释的唯一作用就是使你自己理解或帮你回忆你的程序是怎么工作的或提醒他人你的程序是如何工作的。

编写注释有两种写法:

例子

x=5;//这是一条注释斜杠后面本行内的所有东西是注释

/*这是多行注释-用于注释一段代码

if(gwb==0){//在多行注释内可使用单行注释

x=3;/*但不允许使用新的多行注释-这是无效的

}

//别忘了注释的结尾符号-它们是成对出现的!

*/

小提示

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2