Arduino编程语言

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Arduino编程参考手册首页程序结构变量基本函数setup()loop()控制结构ifif...elseforswitchcasewhiledo...whilebreakcontinuereturngoto相关语法;分号{大括号//单行注释/**/多行注释#define宏定义#include文件包含算术运算符=赋值+(加)-(减)*(乘)/(除)%(取模)比较运算符==等于!=(不等于)(小于)(大于)=(小于等于)范围HIGH|LOWINPUT|OUTPUTtrue|false整型常量浮点数常量数据类型voidbooleancharunsignedcharbyteintunsignedintwordlongunsignedlongfloatdoublestringString(c++)array数据类型转换char()byte()int()word()long()float()变量作用域变量作用域static(静态变量)volatile(易变变量)数字I/OpinMode()digitalWrite()digitalRead()模拟I/OanalogReference()analogRead()analogWrite()指高级I/OshiftOut()pulseIn()时间millis()delay(ms)delayMicroseconds(us)数学库min()max()abs()constrain()map()pow()sqrt()三角函数sin(rad)cos(rad)tan(rad)随机数randomSeed()random()random()=(大于等于)布尔运算符&&(逻辑与)||(逻辑或)!(逻辑非)指针运算符*指针运算符&地址运算符位运算&(位与)|(位或)^(位异或)~(位非)(左移)(右移)复合运算符++(自加)--(自减)+=(复合加)-=(复合减)*=(复合乘)/=(复合除)&=(复合与)|=(复合或)const(不可改变变量)辅助工具sizeof()(sizeof运算符)ASCII码表位操作lowByte()highByte()bitRead()bitWrite()bitSet()bitClear()bit()设置中断函数attachInterrupt()detachInterrupt()interrupts()noInterrupts()串口通讯begin()available()read()flushprint()println()write()peak()serialEvent()程序结构(本节直译自Arduino官网最新Reference)在Arduino中,标准的程序入口main函数在内部被定义,用户只需要关心以下两个函数:setup()当Arduino板起动时setup()函数会被调用。用它来初始化变量,引脚模式,开始使用某个库,等等。该函数在Arduino板的每次上电和复位时只运行一次。loop()在创建setup函数,该函数初始化和设置初始值,loop()函数所做事的正如其名,连续循环,允许你的程序改变状态和响应事件。可以用它来实时控制arduino板。示例:intbuttonPin=3;voidsetup(){Serial.begin(9600);//初始化串口pinMode(buttonPin,INPUT);//设置3号引脚为输入模式}voidloop(){if(digitalRead(buttonPin)==HIGH)serialWrite('H');elseserialWrite('L');delay(1000);}控制语句ifif,用于与比较运算符结合使用,测试是否已达到某些条件,例如一个输入数据在某个范围之外。使用格式如下:if(value50){//这里加入你的代码}该程序测试value是否大于50。如果是,程序将执行特定的动作。换句话说,如果圆括号中的语句为真,大括号中的语句就会执行。如果不是,程序将跳过这段代码。大括号可以被省略,如果这么做,下一行(以分号结尾)将成为唯一的条件语句。if(x120)digitalWrite(LEDpin,HIGH);if(x120)digitalWrite(LEDpin,HIGH);if(x120){digitalWrite(LEDpin,HIGH);}if(x120){digitalWrite(LEDpin1,HIGH);digitalWrite(LEDpin2,HIGH);}//都是正确的圆括号中要被计算的语句需要一个或多个操作符。if...else与基本的if语句相比,由于允许多个测试组合在一起,if/else可以使用更多的控制流。例如,可以测试一个模拟量输入,如果输入值小于500,则采取一个动作,而如果输入值大于或等于500,则采取另一个动作。代码看起来像是这样:if(pinFiveInput500){//动作A}else{//动作B}else中可以进行另一个if测试,这样多个相互独立的测试就可以同时进行。每一个测试一个接一个地执行直到遇到一个测试为真为止。当发现一个测试条件为真时,与其关联的代码块就会执行,然后程序将跳到完整的if/else结构的下一行。如果没有一个测试被验证为真。缺省的else语句块,如果存在的话,将被设为默认行为,并执行。注意:一个elseif语句块可能有或者没有终止else语句块,同理。每个elseif分支允许有无限多个。if(pinFiveInput500){//执行动作A}elseif(pinFiveInput=1000){//执行动作B}else{//执行动作C}另外一种表达互斥分支测试的方式,是使用switchcase语句。forfor语句描述for语句用于重复执行被花括号包围的语句块。一个增量计数器通常被用来递增和终止循环。for语句对于任何需要重复的操作是非常有用的。常常用于与数组联合使用以收集数据/引脚。for循环的头部有三个部分:for(初始化部分;条件判断部分;数据递增部分){//语句块。。。}初始化部分被第一个执行,且只执行一次。每次通过这个循环,条件判断部分将被测试;如果为真,语句块和数据递增部分就会被执行,然后条件判断部分就会被再次测试,当条件测试为假时,结束循环。示例://使用一个PWM引脚使LED灯闪烁intPWMpin=10;//LED在10号引脚串联一个470欧姆的电阻voidsetup(){//这里无需设置}voidloop(){for(inti=0;i=255;i++){analogWrite(PWMpin,i);delay(10);}}编码提示:C中的for循环比在其它计算机语言中发现的for循环要灵活的多,包括BASIC。三个头元素中的任何一个或全部可能被省略,尽管分号是必须的。而且初始化部分、条件判断部分和数据递增部分可以是任何合法的使用任意变量的C语句。且可以使用任何数据类型包括floats。这些不常用的类型用于语句段也许可以为一些罕见的编程问题提供解决方案。例如,在递增部分中使用一个乘法将形成对数级增长:for(intx=2;x100;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);}}switchcaseswitchcase语句就像if语句,switch...case通过允许程序员根据不同的条件指定不同的应被执行的代码来控制程序流。特别地,一个switch语句对一个变量的值与case语句中指定的值进行比较。当一个case语句被发现其值等于该变量的值。就会运行这个case语句下的代码。break关键字将中止并跳出switch语句段,常常用于每个case语句的最后面。如果没有break语句,switch语句将继续执行下面的表达式(“持续下降”)直到遇到break,或者是到达switch语句的末尾。示例:switch(var){case1://当var等于1执行这里break;case2://当var等于2执行这里break;default://如果没有匹配项,将执行此缺省段//default段是可选的}语法switch(var){caselabel://statementsbreak;caselabel://statementsbreak;default://statements}参数var:与不同的case中的值进行比较的变量label:相应的case的值whilewhile循环描述:while循环将会连续地无限地循环,直到圆括号()中的表达式变为假。被测试的变量必须被改变,否则while循环将永远不会中止。这可以是你的代码,比如一个递增的变量,或者是一个外部条件,比如测试一个传感器。语法:while(expression){//statement(s)}参数:expression-一个(布尔型)C语句,被求值为真或假示例:var=0;while(var200){//做两百次重复的事情var++;}do...whiledo循环do循环与while循环使用相同方式工作,不同的是条件是在循环的末尾被测试的,所以do循环总是至少会运行一次。do{//语句块}while(测试条件);示例:do{delay(50);//等待传感器稳定x=readSensors();//检查传感器的值}while(x100);breakbreak用于中止do,for,或while循环,绕过正常的循环条件。它也用于中止switch语句。示例:for(x=0;x255;x++){digitalWrite(PWMpin,x);sens=analogRead(sensorPin);if(sensthreshold){//bailoutonsensordetectx=0;break;}delay(50);}continuecontinue语句跳过一个循环的当前迭代的余下部分。(do,for,或while)。通过检查循环测试条件它将继续进行随后的迭代。示例:for(x=0;x255;x++){if(x40&&x120){//createjumpinvaluescontinue;}digitalWrite(PWMpin,x);delay(50);}return终止一个函数,并向被调用函数并返回一个值,如果你想的话。语法:return;returnvalue;//bothformsarevalid参数:value:任何类型的变量或常量示例://一个函数,用于对一个传感器输入与一个阈值进行比较intcheckSensor(){if(analogRead(0)400){return1;else{return0;}}return关键字对测试一段代码很方便,不需“注释掉”大段的可能是错误的代码。voidloop(){//在此测试代码是个好想法return;//这里是功能不正常的代码//这里的代码永远也不会执行}goto在程序中转移程序流到一个标记点语法:label:gotolabel;//sendsprogramflowtothelabel提示:在C程序中不建议使用goto,而且一些C编程书的作者主张永远不要使用goto语句,但是明智地使用它可以简化某些代码。许多程序员不赞成使用goto的原因是,无节制地使用goto语句很容易产生执行流混乱的很难被调试程序。尽管如是说,仍然有很多使用goto语句而大大简化编码的实例。其中之一就是从一个很深的循环嵌套中跳出去,或者是if逻辑块,在某人些条件下。示例:for(byter=0;r255;r++){for(byteg=255;g-1;g--){for(byteb=0;b255;b++)

1 / 86
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功