arduino กรณี ทำปุ่ม toggle กดติด กดดับ ให้ควบคุม 2 จุด
(กรณีทำปุ่ม กดติดปล่อยดับ ไม่ต้องใช้ เรื่อง bounce แต่ให้ใช้ pullup pulldown แทน)
1. resistor pullup (กำหนดค่าสถานะลอจิกที่แน่นอน ให้กับ ขา input )
2.กำหนด delay(10); ให้มากกว่า 5-50ns เนื่องจาก หน้าสัมผัสของสวิทย์ขณะกด จะ สวิง(bounce)ของค่าแรงดัน จาก 5v- 0 v สลับกันไป ในช่วง 5-50ns จนเสถียร จะเกิดขึ้นกับ ทาง hardware จะมีจุดเรื่อง bounce เข้ามาเกี่ยวข้อง ในวงจรสวิทย์แบบ toggle ดังน้นให้แก้ด้วย ใช้ delay เข้ามา เพื่อ ใช้ระยะเวลา เพื่อทราบเจตนา ของสภาวะการกด ว่ากดจริงหรือไม่
int ledPin = 13;
int buttonPin = 2;
boolean buttonState;
boolean lastState;
boolean state = HIGH;
void setup() {
pinMode (buttonPin,INPUT_PULLUP);
//ทำให้ ขา input มี สถานะทางลอจิกแน่นอน คือ pullupเป็น 1, high ถ้าวงจรเปิด แต่ถ้าไม่มี pullup ถึง/แม้จะกดสวิทย เป็นวงจรปิด input ก็ยังเป็น1 จะไม่เป็น 0 อย่างนี้จึงผิด ทำให้การกดสวิทย์และการแสดงผล led ผิดพลาด ดังนั้นจึงต้องมี pullup เพื่อทำให้ การกดสวิทย มีลอจิกเป็น 0 และการแสดงผลถูกต้อง
pinMode (ledPin,OUTPUT);
}
void loop() {
buttonState = digitalRead(buttonPin);
delay(10); //ป้องกัน การ bounce คือ debounce
if ( ( buttonState == LOW) && (lastState == HIGH) ) state = !state;
digitalWrite(ledPin,state);
lastState = buttonState;
}
ที่มา
https://www.arduino.cc/en/Tutorial/InputPullupSerial
http://www.ayarafun.com/2011/04/arduino-tutorial-3-digital-input-and-debounce/
ไม่มีความคิดเห็น:
แสดงความคิดเห็น