Posts

Arduino 學習筆記 #14 for迴圈

for迴圈主要用於重複執行工作 for(初始值 = 0 ; 重複條件 < 10 ;  變數+1 ){     迴圈任務 ; } Step1 會先設定一個初始值(僅會執行一次) Step2 判斷是否符合重複條件,若符合,則執行迴圈內任務一次 Step3 執行()內的變數增減後,再執行迴圈內的任務一次 來回執行Step2和Step3,直到Step2的條件不成立,才離開for迴圈 小練習1: 在Monitor印出9~0 void setup(){   Serial.begin(115200);   for(int i = 9; i>0; i--){  //若只希望執行一次迴圈,記得放在setup中,若放在loop則會一直重複執行     Serial.println(i);   } } void loop(){   //若把上方for迴圈放在此,會一直重複列印9 8 7 6...1 9 8 7 ... 1 9.... } 小練習2: 跑馬燈 讓led燈重複依序亮 void setup(){   for(int i = 7; i<10; i++){     pinMode(i, OUTPUT);     // digitalWrite(i, LOW);   } } void loop(){   for(int i = 7; i<9; i++){  //為了要讓頭尾的燈不要重複亮,所以迴圈只到倒數第二個燈,最後一個燈當作下個迴圈的開頭     digitalWrite(i, HIGH);     delay(300);     digitalWrite(i, LOW);     delay(100);   }   for(int i = 9; i>7; i--){     digitalWrite(i, HIGH);     delay(300); ...

Arduino 學習筆記 #13 「switch case」 vs 「if/else」

if else的判斷式用於篩選時非常好用(例如:分數大於60顯示及格,小於顯示不及格),但在有限答案時,使用switch case會更有效率 switch(變數){  //變數只能是整數(Integer)或字元(Character)     case 條件一:  //條件內容為「變數」的數值或字元eg. 1, 2, A, hello...etc         條件一成立時,執行的工作         break;     case 條件二:         條件二成立時,執行的工作         break;     default:         條件都不成立時,執行的工作 } switch中的變數,會從上而下對比是否符合每個條件,若符合其中一個,則會執行該條件中的工作,遇到break後跳出,若忘記加上break,則會執行該條件下所有的任務。 例如:變數符合條件一,而條件一末端忘記加上break,則會開始執行條件二、三、四...直到執行完default的任務或遇到「}」後跳出 若條件都不符合,則會執行default中的任務,若沒有default,則會在讀取到「}」後跳出 小練習:輸入1時,在Monitor顯示「A」,輸入2時,顯示「B」,輸入其他字原則顯示「輸入錯誤」 void setup(){   Serial.begin(115200); } void loop(){   if(Serial.available()){     int var = Serial.parseInt();     switch(var){       case 1:         Serial.println('A');         break;   ...

Arduino 學習筆記#12 類比訊號

Image
在Web版的 Arduino Editor 中的Serial Monitor(序列服監控視窗),可用來與Arduino溝通 在開啟之前,需接通Arduino版 再來需在setup中設定電腦與Arduino的溝通模式 Serial.begin(115200); *括弧內的115200代表著選用的Baud Rate(鮑率),代表每秒可傳輸115200 bit的資料 接下來,需調整Monitor中的Baud Rate,需與Serial.begin()內的鮑率相同,選擇「No line end...」() 若希望在一進入Monitor中,就顯示一段話,則可使用Serial.println("開場白"); *記得,要 切換至英文鍵盤 ,而不要使用注音的英文,要不然部分字元會變亂碼 小練習1:輸入攝氏溫度,顯示華氏溫度 void setup() {   Serial.begin(115200); } void loop() {   if(Serial.available()){     int num = Serial.parseInt(); // Serial.parseInt()僅讀取整數,忽略其他字元     Serial.print("The celcius temperture is:");   //Serial.println會換行,Serial.print則否     Serial.print(num*9/5+32);     Serial.print("F");   } } 小練習2:輸入「A」點亮燈泡,輸入「b」時,熄滅燈泡 void setup(){   Serial.begin(115200);   pinMode(13, OUTPUT);   digitalWrite(13, LOW); } void loop(){   if(Serial.available() == true){     char ch = Serial.read();...

Arduino 學習筆記#11 每按一次按鈕,切換一次燈的暗亮

首先,先把開關按鈕接上pin7,再依照pin7的高低壓來決定p13 LED的暗亮。 程式碼的部分,先將pin7設好上拉電阻,讓他沒有接通GND的時候能維持在高電位,不受雜訊干擾。 程式碼部分,因為LED的狀態,受按下次數的影響而改變,所以先給他一個boolean變數(有true和flase兩個變數,分別可代表高電位HIGH和低電位LOW),並把它設定為false(=LOW) 再來利用buttonUp來記錄按鈕的狀態,並結合pin7的狀態一同判斷按鈕的狀態 - 按下按鈕:pin7處於高電位  且  buttonUp等於true(原本的狀態是Up, 尚未被改變 )   則切換LED狀態並將該狀態寫入pin13,同時將buttonUp改為false - 按鈕被放開:pin7處於低電位  且  buttonUp等於flase(曾被按下,但尚未切換回來)   則將buttonUp改為true - 還沒被按下:pin7處於低電位,而buttonUp等於true,兩個判斷式都不符合時,arduino則會在兩個判斷式間輪轉 直到符合條件(按下按鈕,讓pin處於高電位)為止 - 一直被按著:pin7處於高電位,而buttonUp等於false,同上 最後,為了解決debouncing的問題(按下去瞬間,因程式跑太快,來回切換status數次),可以在判斷是中加上delay(200); 以避免程式過度反應。 boolean status = false; boolean buttonUp = true; void setup(){   pinMode(7, INPUT);   digitalWrite(7, HIGH);   pinMode(13, OUTPUT); } void loop(){   if(digitalRead(7) == HIGH && buttonUp == true){     status = !status;     digitalWrite(13, status);     buttonUp = false;     ...

Arduino 學習筆記#10 電燈開關 — LED燈x1 電阻x1 按鈕x1

Image
專案一:直接透過Arduino點亮外接燈泡,按下按鈕時點亮 將LED 的正極連至5v, 按鈕的右側連至GND,即可直接透過Arduino的電力點亮LED 專案二:透過pin7輸出高電壓,按下按鈕時接通 將LED的正極連至pin7, 按鈕的末端連至GND,再透過pin7的高低壓來控制LED的亮暗 int led = 7; void setup(){   pinMode(7, OUTPUT); } void loop(){   digitalWrite(led, OUTPUT); }

Arduino 學習筆記#9 否定語法「!」

在Arduino中,「!」有否定的意思 != 意思是「不等於」 亦可應用在Boolean值(true&false):!true 意思是「false」 小練習: 利用先前外接按鈕控制pin 13的LED明滅的案例,將原本按下按鈕開燈,改為按下按鈕關燈 void setup(){   pinMode(13, OUTPUT);   pinMode(7, INPUT);   digitalWrite(7, HIGH); } void loop(){   if(digitalRead(7) != HIGH){     digitalWrite(13, HIGH);   }else{     digitalWrite(13, LOW);   } }