控制结构体

If

描述:
if(条件)与==,!=,<,>(比较运算符)
if语句是执行判断的,它能够判断是否满足某个条件,然后执行相应的动作。
语法:

if (someVariable > 50)
{
  //在这里执行特定的语句
}

这个程序测试someVariable是否大于50,如果括号中的条件成立,则执行括号中指定的语句。如果不成立,则跳出括号。
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 <  y (x 小于 y)  
 x >  y (x 大于 y) 
 x <= y (x 小于或等于 y) 
 x >= y (x 大于或等于 y)
小心使用单个等于号”=”(例如if(X=10)),单个等于号实际上是赋值运算符,这里的意思是把10赋值给X。而双等于号”==”(例如if(X==10)),这个是比较操作符,意思是判断X是否等于10。后面的语句是用于判断的,但是前面的语句永远是成立的。

If…else

描述:
If…else语句可以在条件为“真”或为“假”时指定不同的动作。例如,模拟用一个数字判断,做出相应的动作,如果输入小于500,则做出相应动作,如果输入的是500或更高,则做另一个相应动作。程序如下:

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

else可以进行判断另一个if,以便多个相应的判断可以在同一时间运行。每个判断会一直进行下去,直到找到一个为“真”的条件。当找到一个为“真“的条件时,即会做成程序里指定的动作,并且跳出整个if/else结构。如果找不到条件为“真”的。默认的else语句将被执行(动作C为默认else)。

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

for

描述:
for语句是用来重复执行放在大括号内的语句。通常用一个增量计数器来增加或终止循环。for语句使用最为灵活,for通常用在重复执行数据/引脚操作。
for由3个部分组合:

for (initialization; condition; increment) {
//statement(s);
}

farm6.staticflickr.com_5586_14709353740_7203fab252.jpg
初始化会先执行一次,然后再执行判断循环条件,如果条件为‘真’,则执行递增一次,直到条件为‘假’时,循环结束。
例子:

// Dim an LED using a PWM pin
int PWMpin = 10; // 用一个470R的电阻把引脚10与LED串联。
 
void setup()
{
  // 不用设置
}
 
void loop()
{
   for (int i=0; i <= 255; i++){
      analogWrite(PWMpin, i);
      delay(10);
   } 
}
for循环中,“initialization”“condition”和“increment”都可以省略,但是其间的分号不能省略。for循环中省略“condition”时,在for语句{}中必须包换转句语句控制程序在某个条件满足时跳出for循环,否则将形成死循环。

switch case

描述:
就像if语句,switch…case控制语句使程序员可以指定在各种不同的条件下执行不同的动作。case语句中指定的值与switch语句中的变量进行比较,当其中一个case语句与switch语句中的变量匹配时,则运行case语句中的代码。通常每个case语句的结尾都会有个break语句来推出switch语句,如果没有break语句,switch语句将会继续往下执行,直到遇到break语句,或者是switch语句结束为止。
例子:

  switch (var) {
    case 1:
      //当变量等于1的时候,做一些动作
      break;
    case 2:
      //当变量等于2的时候,做一些动作
      break;
    default: 
      //如果没有找到匹配的变量,则执行默认的动作。
  }

语法:

switch (var) {
  case label:
    // 声明
    break;
  case label:
    // 声明
    break;
  default: 
    // 声明

参数:
var:此变量用于与case的值进行比较。
label:此值用于与var进行比较。

while

描述:
while循环将会无限循环执行,直至括号内的条件()为假。必须改变()内变量的值,如果()内条件一直为真,while将进入死循环状态。()内的变量可以通过代码改变,或者通过外部条件检测,例如使用传感器状态改变。
语法:

while(expression){
  // 声明(s)
}

参数:
expression:计算结果(布尔值)为真或假。
例子:

var = 0;
while(var < 200){
  // 重复做200次
  var++;
}

do…while

描述:
do循环先执行while里面的语句,然后再判断表达式是否为真, 如果为真则继续循环;如果为假, 则终止循环。因此, do循环至少要执行一次循环语句
语法:

do
{
    // 声明块
} while (test condition);

例子:

do
{
  delay(50);          // 等待传感器稳定
  x = readSensors();  // 检查传感器
 
} while (x < 100);

break

描述:
break语句通常使用在for或while中来退出循环状态,break也可以用来从switch语句退出。
例子:

for (x = 0; x < 255; x ++)
{
    digitalWrite(PWMpin, x);
    sens = analogRead(sensorPin);  
    if (sens > threshold){      // 保持对传感器的检测
       x = 0;
       break;
    }  
    delay(50);
}

continue

描述:
执行continue语句会跳出(do,for,或while)当前循环的迭代,继续通过检测循环的条件表达式,并从循环的开始处继续程序循环。
例子:

for (x = 0; x < 255; x ++)
{
    if (x > 40 && x < 120){      // 创建跳出的值
        continue;
    }
	digitalWrite(PWMpin, x);
    delay(50);
}

return

描述:
返回一个值给调用该函数的函数,一般情况下是返回一个值给主函数。
语法:

return; 
return value; //这两种形式都是有效的

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

int checkSensor(){       
    if (analogRead(0) > 400) {
        return 1;
    else{
        return 0;
    }
}
 void loop(){
// 声明
return;
// 这里的代码将不会被执行
}

goto

描述:
改变程序流向, 转去执行语句标号所标识的语句
语法:

label:
goto label; // 发送标号到程序

例子:

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: