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