這篇呢主要還是介紹判斷及迴圈,但是說實話上一篇講到的for跟if就可以應付很多狀況了,但另外這些也需要好好介紹一下,因為各有優缺點,那廢話不多說就開始囉。
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);
}
※此都只為介紹,如程式碼無法執行為正常現象
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的寫法,可以適合用在註冊系統或是格式有沒有符合...等的情況中,就是先讓使用者輸入在偵測,如輸入格式有誤就可以自動重新輸入了,不必多寫好幾次。
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。
這幾天有仔細看範例的小夥伴,應該都會看到範例中有許多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後也會喜歡它,那下一篇再會~