原來機械式開關還存在所謂的「彈跳 (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 讀冊生活 !!!