วันอังคารที่ 13 กันยายน พ.ศ. 2559

arduino กรณี ทำปุ่ม toggle กดติด กดดับ ให้ควบคุม 2 จุด

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/

ไม่มีความคิดเห็น:

แสดงความคิดเห็น