void setup() { pinMode(13, OUTPUT); pinMode(12, INPUT);}void loop() { bool buttonState = digitalRead(12); digitalWrite(13, buttonState);}
然而,事實並非如此。
按鈕是一個機械動作,在你按下按鈕那零點幾秒內,Arduino實際上是收到很多HIGH和LOW的信號,這種在HIGH和LOW之間跳動的現像我們稱之為彈跳。
即使你沒按下按鈕,引腳12也是會持續收到彈跳信號。
為了要抑制彈跳,大多數教學文章都會建議要裝一個上拉電阻(註A),如下圖:
void setup() { pinMode(13, OUTPUT); pinMode(12, INPUT); digitalWrite(12, HIGH);}void loop() { bool buttonState = digitalRead(12); digitalWrite(13, buttonState);}
如此,在沒按下按鈕時會一直收到HIGH,但在你按下按鈕後,就可以得到一個穩定的LOW。
事實上,Arduino的數位引腳都已經連接有一個內部的上拉電阻,詳官網
我們只要在pinMode()函式內將它啟用即可。
void setup(){
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT);
}
void loop(){
int sensorVal = digitalRead(2);
Serial.println(sensorVal);
if (sensorVal == HIGH) {
digitalWrite(13, LOW);
}
else {
digitalWrite(13, HIGH);
}
}
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT);
}
void loop(){
int sensorVal = digitalRead(2);
Serial.println(sensorVal);
if (sensorVal == HIGH) {
digitalWrite(13, LOW);
}
else {
digitalWrite(13, HIGH);
}
}
註A: 若安裝下拉電阻也可以,只不過電路接法也要改變一下。



作者已經移除這則留言。
回覆刪除Clear & Nice
回覆刪除Thanks a lot,really helpful