[MSP430]-005_按鈕控制
1. 在“ // ”之後的程式或文字,編譯程式會自動略過這些內容,不會成為程式的一部分,所以可以用來作為程式的註解或是說明,日後可以快速地了解程式內容。要注意的是,這只是將一行的程式或是文字作為註解,當第二行也要成為註解文字,則在第二行也要打上“ // ”。
2. “ /* ”及“ */ ”這兩個符號有別於“ // ”,是可以將整段文字或是程式作為註解,編譯程式會自動略過這些內容。
3.
const int butonPin = PUSH2;
將PUSH2定義為buttonPin,這是將MSP-EXP430G2這張開發板板左下角的按鈕(板上印刷為S2)命名為buttonPin。這個PUSH2是一個特殊的名稱,特指板上的P1.3這個腳位,所以PUSH2這個名稱就不能再用了喔。
4.
const int ledPin = GREEN_LED;
將GREEN_LED定義為ledPin,這是將板上綠色的LED燈定義成ledPin這個名稱。GREEN_LED是一個特殊的名稱,特指板上的P1.6這個腳位,所以GREEN_LED這個名稱就不能再用了喔。
5.
int buttonState = 0;
這裡命名一個資料結構為int的變數buttonStatus(按鈕狀態),且將此變數的初始值設為0。
6.
void setup (){
pinMode (ledPin, OUTPUT);
pinMode (buttonPin, INPUT_PULLUP);
}
void setup () { },這段程式是固定寫法,也就是將一開機要設定參數寫在這個大括號中,也就是說這個大括號中的指令只會執行一次,除非再重開MSP430開發板一次。在這個大括號裡面有兩條指令:
pinMode(ledPin, OUTPUT); 這可以解讀成將ledPin這個腳位的腳位模式pinMode定義為輸出OUTPUT。
7.
void loop (){
buttonState = digitalRead (buttonPin);
if (buttonStat == HIGH) {
digitalWrite (ledPin, HIGH);
}
else {
digitalWrite (ledPin, LOW);
}
}
void loop () {} 這段程式是固定寫法,當執行完前面的void setup(){}之後就會執行此段程式,且如同它的名稱一樣,此段程式會一直執行,就像是一個迴圈(loop)一樣。
8.
buttonState = digitalRead (buttonPin); 可以解讀成用數位讀取(digitalRead)的方式來讀取buttonPin這個腳位的狀態,並將此狀態存入變數buttonState中。
9.
if (buttonState == HIGH) {
digitalWrite (ledPin, HIGH);
}
這裡新學到一個語法,就是if的判斷式,小括號中的buttonState == HIGH,是判斷條件,如果符合這個條件,就會執行大括號中的指令digitalWritw(ledPin, HIGH)。如果不符合判斷條件,就會跳到else並執行其大括號的指令。
這段程式的意思是如果butonState(按鈕狀態)是HIGH(高電位),則將ledPin這個腳位寫成HIGH(高電位),ledPin如果是高電位,則這個綠色的LED燈就會亮。(由[MSP430-004]的實驗中知道當內建的LED腳位為高電位時,則LED會被點亮)。
在此說明,因為之前有一條指令pinMode (buttonPin, INPUT_PULLUP); ,這是先將buttonPin設定成高電位,所以鬆開按鈕(不按下)的時候,是屬於高電位的狀態。
10.
else {
digitalWrite (ledPin, LOW);
}
else之後執行的指令,可以想成與前面 if 的指令相反,也就是說剛剛 if 內的指令是,如果按鈕沒被按下,則LED會被點亮。else內的指令就表示如果按鈕被按下,則LED會熄滅。
程式分析完,可以上傳程式到MSP430開發板中,看看結果囉。
沒有留言:
張貼留言