原來機械式開關還存在所謂的「彈跳 (Bounce)」問題
解決方式:
1. 延遲時間 (輪詢式)
2. 使用程式庫 Bounce2
官方出了新版的 library Bounce2
參考官方文件作法,調整為
#include <Bounce2.h>
#define SERIAL_BAUDRATE 19200
#define LED_PIN 11
#define SWITCH_PIN 7
Bounce bouncer = Bounce();
boolean led_status;
void setup() {
Serial.begin(SERIAL_BAUDRATE);
pinMode(LED_PIN, OUTPUT);
pinMode(SWITCH_PIN, INPUT);
// After setting up the button, setup the object
bouncer.attach(SWITCH_PIN);
bouncer.interval(5);
led_status = LOW;
digitalWrite(LED_PIN, led_status);
}
void loop() {
if(bouncer.update() == true && bouncer.read() == HIGH){
led_status = !led_status;
digitalWrite(LED_PIN, led_status);
}
}
3. 延遲時間 (硬體中斷)
參考資料:
1. Arduino 輕鬆入門-範例分析與實作設計 葉難 著 博碩 2015.07 初版3刷
!!! 支持台灣本土作者、支持 TAAZE 讀冊生活 !!!
留言