控制结构体
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…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); }
初始化会先执行一次,然后再执行判断循环条件,如果条件为‘真’,则执行递增一次,直到条件为‘假’时,循环结束。
例子:
// 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); } }
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: