[Day9] IoT Maker之Coding知识科普 - (条件判断&回圈)

1.前言

这篇呢主要还是介绍判断及回圈,但是说实话上一篇讲到的for跟if就可以应付很多状况了,但另外这些也需要好好介绍一下,因为各有优缺点,那废话不多说就开始罗。

2.while回圈

while在Arduino程序撰写中扮演一名相当重要角色,很多时候需要不断进行监控的动作都需要使用它,例如我可以使用
while回圈去侦测按钮是否被按下,就让LED灯重复闪烁,而while还有分为前侦测跟後侦测,或者在while里面塞true也可以,而如果看到while先就代表这是前侦测,而如果先看到do後面又接个while代表这是後侦测(晚点说明),那这边须注意一下while的回圈不像for一样,for会自己计算次数,而while不会,看过范例会更懂一点。

while(condition){
//执行内容
}
condition 条件式,将想比对的值放入比较,就可为条件式,范例:a==b,这个就是条件式。

int a = 1;
int b = 10;

while(a!=b){
    //无穷回圈,因为a不会自己递增
}

while(a!=b){
    a++; //不会造成无穷回圈,因为a会递增上去,直到a=10与b相符,就离开回圈
}

//当按钮按下则让LED闪烁一下
while(digitalRead(button)==HIGH){
    digital.Write(LEDPin,HIGH);
    delay(1000);
    digital.Write(LEDPin,LOW);
    delay(1000);
}

※此都只为介绍,如程序码无法执行为正常现象

3.do while回圈

do while为後侦测,而此会在跑第一次回圈时,就先进入,因为没侦测挡住,直到回圈内程序跑完後遇到while才侦测,那do while也和while相同,不会自动记次数,所以要记住不要忘记添加记次数而导致无穷回圈

do{
//执行内容
}while(condition)
condition 条件式,将想比对的值放入比较,就可为条件式,范例:a==b,这个就是条件式。

int a = 0;
int b = 10;

do{
    a++; //1 2 3 4 5 6 7 8 9 10
}while(a!=b);

像是do while的写法,可以适合用在注册系统或是格式有没有符合...等的情况中,就是先让使用者输入在侦测,如输入格式有误就可以自动重新输入了,不必多写好几次。

4.switch判断

switch就像使用了if、else if、else的判断,直接看例子吧。

switch(var){
case label1:
//执行内容1
case label2:
//执行内容2
default:
//默认执行内容
}

var 变数,可以填入处理完後的变数。
lable1、label2 放入处理完後可能答案。

int a = 10;
int b = a + 20;

switch(b){
    case 30:
        //code...;
        break; //跳出switch判断
    case 20:
        //code...;
        break;
    case 10:
        //code...;
        break;
    default:
        //当b与上面case都没不符合则会进default,default类似if中的else脚色
}

上方为switch范例,而各位都会有些许疑问,为甚麽case里面都要在最下方增加break,而这边加一下,当执行到break这个指令就会跳出该层地方,如该层回圈或该层判断,如上面范例就是跳出该次switch判断,而break要写在最下面是因为,如果我写在前面那我执行到break时,就会跳出该次执行了,而且break下方指令也不会被执行到,向下方程序码,case 30进入後就执行到break,假如break下面是有程序,那那些程序都不会被执行到(正常来说编译时会出错)。

switch(20){
    case 30:
        break;
        //code...
    case 20:
        break;
        //code...
}

在写switch要注意case後面是:而不是;,且break一定要加,因为如果没加就会变成很好玩的一件事。

switch(20){
    case 30:
        Serial.println("20");
    case 20:
        Serial.println("80");
}

执行完後会变成

20
80

所以如果没加break会直直跑下去,直到switch跑完,一路从北向南跑,十分通顺0u0b。

5.简化的写法

这几天有仔细看范例的小夥伴,应该都会看到范例中有许多i++,i- -,i+=2,那我这边要稍微解释一下这是什麽意思。

i++;//i+1
i--;//i-1

+1-1十分简单,那这只能+1-1,那如果我要+2呢

i+=2;//i=i+2
i-=2;//i=i-2

+2-2以上都是这种方法,乘法、除法及取余数呢?

i*=2;i=i*2
i/=2;i=i/2
i%=2;i=i%2

那精简写法就这样,那判断中的条件式也可以含括多种条件,那介绍之前,我先稍微讲一下||、&&,那这两种符号,分别是或、及,那这两种的记法,我都是记 当a"或"b何者为1则输出为1,当a"及"b为1则输出为1,那看到这里应该会有一些人很眼熟,没错这就是数位逻辑中的OR Gate(闸)、AND Gate(闸),范例到~~。

if(a==10 || b!=30 || c>=70)
if(a<=20 && c>=30 || b<a)

欢迎交流

好了,终於花了这几天把前面忘了交代的Coding注意与常用的条件判断、回圈...跟大家科普完毕了。希望大家看完这三篇能对回圈、判断及各个基本观念有概念,下一篇将会进入到我们主要的ST01扩充板介绍,我们根据自己使用的经验觉得这块板子相当适合用在教学上面,希望大家接下来跟着我们一起接触ST01後也会喜欢它,那下一篇再会~


<<:  视觉设计(3)

>>:  Day2-他看我是个练武奇才-规格书(递)

[Day23] 如何让 Scrum Master 的经历为履历加分

这两年看过不少应徵工程师职缺的履历,会描述当过 Scrum Master 经历。在面试中,我如果针对...

Day 02-购物车系统简介

前言 随着网路逐渐普及,越来越多人选择'网购',而网购中最後结帐的部分极为重要。 今天要来讲讲:离线...

day22 : TIDB on K8S (中)

今天就来使用TIUP布建TIDB看看吧,因为我环境会如同之前一样使用GCP,所以今天也一样会透过te...

[DAY 30]铁人赛完赛结语

今天是铁人赛最後一天 我把之前所整理的资料来源一并附上 有些功能其实已经想好大概怎麽实现了,但在30...

近似最短路径 (1)

11 近似最短路径 前面介绍的所有点对最短路径演算法,好写的得花 n^3 的时间、比较快的又得仰赖矩...