< >
Home » Arduino语法参考 » arduino语法-控制语句

arduino语法-控制语句

控制语句

Arduino程序中控制程序运行的顺序

语法列表

  • if
  • if...else
  • for
  • switch case
  • while
  • do...while
  • break
  • continue
  • return
  • goto

if语句说明

if,用于与比较运算符结合使用,测试是否已达到某些条件,例如一个输入数据在某个范围之外。使用格式如下:

if (value > 50)
{
  // 这里加入你的代码
}

该程序测试value是否大于50。如果是,程序将执行特定的动作。换句话说,如果圆括号中的语句为真,大括号中的语句就会执行。如果不是,程序将跳过这段代码。大括号可以被省略,如果这么做,下一行(以分号结尾)将成为唯一的条件语句。

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); 
}                                 // 都是正确的

圆括号中要被计算的语句需要一个或多个操作符。


if...else语句说明

与基本的if语句相比,由于允许多个测试组合在一起,if/else可以使用更多的控制流。例如,可以测试一个模拟量输入,如果输入值小于500,则采取一个动作,而如果输入值大于或等于500,则采取另一个动作。代码看起来像是这样:

if (pinFiveInput < 500)
{
  // 动作A
}
else
{
  // 动作B
}

else中可以进行另一个if测试,这样多个相互独立的测试就可以同时进行。每一个测试一个接一个地执行直到遇到一个测试为真为止。当发现一个测试条件为真时,与其关联的代码块就会执行,然后程序将跳到完整的if/else结构的下一行。如果没有一个测试被验证为真。缺省的else语句块,如果存在的话,将被设为默认行为,并执行。

注意:一个else if语句块可能有或者没有终止else语句块,同理。每个else if分支允许有无限多个。

if (pinFiveInput < 500)
{
  // 执行动作A
}
else if (pinFiveInput >= 1000)
{
  // 执行动作B
}
else
{
  // 执行动作C
}

另外一种表达互斥分支测试的方式,是使用switch case语句。


for语句说明

for语句用于重复执行被花括号包围的语句块。一个增量计数器通常被用来递增和终止循环。for语句对于任何需要重复的操作是非常有用的。常常用于与数组联合使用以收集数据/引脚。for循环的头部有三个部分:

for (初始化部分; 条件判断部分; 数据递增部分) {
//语句块
。。。
}

初始化部分被第一个执行,且只执行一次。每次通过这个循环,条件判断部分将被测试;如果为真,语句块和数据递增部分就会被执行,然后条件判断部分就会被再次测试,当条件测试为假时,结束循环。

示例:

//使用一个PWM引脚使LED灯闪烁
int PWMpin = 10; // LED在10号引脚串联一个470欧姆的电阻

void setup()
{
  //这里无需设置
}

void loop()
{
   for (int i=0; i <= 255; i++){
      analogWrite(PWMpin, i);
      delay(10);
   } 
}

编码提示:
C中的for循环比在其它计算机语言中发现的for循环要灵活的多,包括BASIC。三个头元素中的任何一个或全部可能被省略,尽管分号是必须的。而且初始化部分、条件判断部分和数据递增部分可以是任何合法的使用任意变量的C语句。且可以使用任何数据类型包括floats。这些不常用的类型用于语句段也许可以为一些罕见的编程问题提供解决方案。

例如,在递增部分中使用一个乘法将形成对数级增长:

for(int x = 2; x < 100; x = x * 1.5){
    println(x);
}

输出: 2,3,4,6,9,13,19,28,42,63,94
另一个例子,在一个for循环中使一个LED灯渐渐地变亮和变暗:

void loop()
{
   int x = 1;
   for (int i = 0; i > -1; i = i + x){
      analogWrite(PWMpin, i);
      if (i == 255) x = -1;             // 在峰值切换方向
      delay(10);
   } 
}

switch case 语句说明

描述

就像if语句,switch...case通过允许程序员根据不同的条件指定不同的应被执行的代码来控制程序流。特别地,一个switch语句对一个变量的值与case语句中指定的值进行比较。当一个case语句被发现其值等于该变量的值。就会运行这个case语句下的代码。

break关键字将中止并跳出switch语句段,常常用于每个case语句的最后面。如果没有break语句,switch语句将继续执行下面的表达式(“持续下降”)直到遇到break,或者是到达switch语句的末尾。

示例:

   switch (var) {
    case 1:
      //当var等于1执行这里
      break;
    case 2:
      //当var等于2执行这里
      break;
    default: 
      // 如果没有匹配项,将执行此缺省段
      // default段是可选的
  }

语法

 switch (var) {
  case label:
    // statements
    break;
  case label:
    // statements
    break;
  default: 
    // statements
}

参数

var: 与不同的case中的值进行比较的变量

label: 相应的case的值


while循环语句说明

描述:

while循环将会连续地无限地循环,直到圆括号()中的表达式变为假。被测试的变量必须被改变,否则while循环将永远不会中止。这可以是你的代码,比如一个递增的变量,或者是一个外部条件,比如测试一个传感器。

语法:

 while(expression){
  // statement(s)
}

参数:

expression - 一个(布尔型)C语句,被求值为真或假

示例:

var = 0;
 while(var < 200){
   // 做两百次重复的事情
   var++;
 }

do...while语句说明

描述

do循环与while循环使用相同方式工作,不同的是条件是在循环的末尾被测试的,所以do循环总是至少会运行一次。

do
{
    // 语句块
} while (测试条件);

示例:

do
{
  delay(50);          // 等待传感器稳定
  x = readSensors();  // 检查传感器的值

} while (x < 100);

break语句说明

描述:

break用于中止do,for,或while循环,绕过正常的循环条件。它也用于中止switch语句。

示例:

 for (x = 0; x < 255; x ++)
{
    digitalWrite(PWMpin, x);
    sens = analogRead(sensorPin);  
    if (sens > threshold){      // bail out on sensor detect
       x = 0;
       break;
    }  
    delay(50);
}

continue语句说明

描述:

continue语句跳过一个循环的当前迭代的余下部分。(do,for,或while)。通过检查循环测试条件它将继续进行随后的迭代。

示例:

for (x = 0; x < 255; x ++)
{
    if (x > 40 && x < 120){      // create jump in values
        continue;
    }

    digitalWrite(PWMpin, x);
    delay(50);
}

return语句说明

终止一个函数,并向被调用函数并返回一个值,如果你想的话。

语法:

return; 
return value; // both forms are valid 

参数:
value: 任何类型的变量或常量

示例:

//一个函数,用于对一个传感器输入与一个阈值进行比较
 
 int checkSensor(){       
    if (analogRead(0) > 400) {
        return 1;
    else{
        return 0;
    }
}

return 关键字对测试一段代码很方便,不需“注释掉”大段的可能是错误的代码。

void loop(){

//在此测试代码是个好想法

return;

// 这里是功能不正常的代码
// 这里的代码永远也不会执行
}

goto语句说明

在程序中转移程序流到一个标记点

语法:

label:
goto label; // sends program flow to the label

提示:
在C程序中不建议使用goto,而且一些C编程书的作者主张永远不要使用goto语句,但是明智地使用它可以 简化某些代码。许多程序员不赞成使用goto的原因是,无节制地使用goto语句很容易产生执行流混乱的很难被调试程序。 尽管如是说,仍然有很多使用goto语句而大大简化编码的实例。其中之一就是在某些情况下,可从一个很深的循环嵌套中或者是if逻辑块跳出去。

示例:

 for(byte r = 0; r < 255; r++){
    for(byte g = 255; g > -1; g--){
        for(byte b = 0; b < 255; b++){
            if (analogRead(0) > 250){ goto bailout;}
            // 其它语句。。。
        }
    }
}
bailout:

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: arduino语法, arduino参考手册, arduino控制语句