Lab02 到底還有什麼可以再探討呢?
我在 Cooper Maa 的網誌看到這篇關於內部提升電阻的分享:傳送門點我
他解釋得非常清楚了,所以就不再多嘴了。
線路上,原本的線路是這樣:
現在把它改成這樣:
可以看得出來,因為將使用 pin2 的內建提升電阻,所以原本並接在 pin2 的接地電阻可以拿掉了。
但是因為 pin2 內的是 pull-up resistor "提升電阻",表示預設情況下,pin2 會是 HIGH 高電位。
為了配合我們的使用情境,當按鈕沒按下時,應該維持 pin2 是 HIGH 的狀態。
所以,原本按鈕的一端是 5v 正電接進來的,要改為接往 GND(紫線)。
如此一來,當按鈕被按下時,才能迫使 pin2 的狀態由 HIGH 拉成 LOW 低電位。
所以我們除了必須在程式碼中啟用 pin2 的提升電阻之外。還需要修改關於按鈕的判斷條件。
// setup global variables // variables for LEDs const int greenLed1 = 5; const int greenLed2 = 4; const int yellowLed3 = 3; // variable for the switch const int switchPin = 2; void setup() { // initialize the LED pins as output. pinMode( greenLed1, OUTPUT); pinMode( greenLed2, OUTPUT); pinMode(yellowLed3, OUTPUT); // declare the switch pin as input /* use Pull-up resistor * Ref: http://arduino.cc/en/Tutorial/DigitalPins */ pinMode(switchPin, INPUT); // set pin to input digitalWrite(switchPin, HIGH); // turn on pullup resistors } void loop() { int switchState; switchState = digitalRead(switchPin); if (switchState == HIGH) // if use Pull-up resistor { // turn the yellow LED off by making the voltage LOW digitalWrite(yellowLed3, LOW); // turn the green LED1 on (HIGH is the voltage level) digitalWrite(greenLed1, HIGH); digitalWrite(greenLed2, LOW); // wait for 250ms. = 1/4 second delay(250); digitalWrite(greenLed1, LOW); digitalWrite(greenLed2, HIGH); delay(250); } else // if press the switch { digitalWrite( greenLed1, LOW); digitalWrite( greenLed2, LOW); digitalWrite(yellowLed3, HIGH); } }
這份程式碼跟之前的框架沒什麼不同,差別在所標示出的 22,23 行用來啟動 "內部提升電阻"。
詳細說明可以參考 Arduino 官方的說明文件:http://arduino.cc/en/Tutorial/DigitalPins
一旦使用了內部提升電阻之後,除了外部的電路需要更改,用來判斷按鈕是否被按下的程式碼,也必須更改判斷依據。
例如:按鈕釋放時,因為提升電阻的關係,pin2 應該會是 HIGH 高電位(32行)。
這是我實際接線的狀況,左邊是 Before,右邊是 After。
(這種跟電氣效應有關的應用,還是自己實實在在接一次線吧 = =)
然後這是最後實際運作的樣子:
結束!Lab02 這次真的要結束惹~
沒有留言:
張貼留言