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 這次真的要結束惹~

沒有留言:
張貼留言