Arduino LED and Button
มาควมคุม LED ด้วยการกด Button กันโดยเราจะจ่ายแรงดัน 5V เข้ากับปุ่มโดยมี 220 ohm เข้ามาลดแรงดันลงขา GND จากนั้นจะเชื่อม INPUT เข้ามาที่ Digital pin ที่ขา 2 ส่วน LED ก็เชื่อมต่อเหมือนเดิมโดยใช้แรงดันคงที่ 220 ohm เข้ามาลดแรงดันเช่นกัน
ตัวอย่างแรก
เราจะใช้ปุ่มควบคุมไฟ โดยเมื่อกดปุ่มค้าง (Hold press down) จะให้ไฟติด และเมื่อปล่อยปุ่มไฟก็จะดับลง
LED+Button.ino
const int buttonPin = 2;
const int ledPin = 8;void setup()
{
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}void loop()
{
int buttonState = digitalRead(buttonPin); if (buttonState == HIGH)
{
digitalWrite(ledPin, HIGH);
}
else {
digitalWrite(ledPin, LOW);
}
}
จากโค้ดตัวอย่างเราจะตั้งค่า pinMode ขา 2 เป็นแบบ INPUT แล้วมีการอ่านด้วยใน loop function ด้วย digitalRead เพื่อตรวจสอบว่ามีการกดเข้ามา
เมื่อเข้าใจ concept แล้วเราจะมาลดโค้ดโดยใช้ buttonState เข้ามาเป็น value ให้กับการ write LED ดังตัวอย่าง
LED+Button.ino
const int buttonPin = 2;
const int ledPin = 8;void setup()
{
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}void loop()
{
digitalWrite(ledPin, digitalRead(buttonPin));
}
ตัวอย่างที่สอง
เดียวเรามาตรวจสอบการกดปุ่มดกัน โดยไฟ LED จะติดก็ต่อเมื่อ “มีการกดลงแล้วปล่อย” เท่านั้น ดังนั้นเมื่อกดแล้วปล่อย ไฟจะติด และเมื่อกดแล้วปล่อยอีกครั้ง ไฟจะดับ ไปเลื่อย ๆ ตามการกดปุ่ม เราสามารถเขียนโค้ดควบคุมได้ดังนี้
LED+Button.ino
const int buttonPin = 2;
const int ledPin = 8;int buttonState = LOW;void setup()
{
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}void loop()
{
int prevState = buttonState;
buttonState = digitalRead(buttonPin); if (prevState == HIGH && buttonState == LOW)
{
digitalWrite(ledPin, !digitalRead(ledPin));
} delay(100);
}
รอบนี้เราจะมีการเก็บค่าก่อนหน้าไว้ในตัวแปร prevState เพื่อตรวจสอบการ “กดปุ่มแล้วปล่อย” ตามโจทย์ถึงจะทำงาน และเมื่อของ if แล้วก็จะสั่งให้ LED ทำการสลับไฟโดยการให้ read และ write digital ภายในบรรทัดเดียว สุดท้ายมีการใช้ “delay()” เข้ามาช่วยเพื่อให้การกดปุ่มมีความแม่นยำมากขึ้น ซึ่งในที่นี้เรายังสามารถใช้ delay ได้ แต่จริง ๆ ก็ไม่ควรใช้ delay เข้ามาแบบนี้ในกรณีอื่น ๆ อาจทำให้คำสั่งอื่น ๆ ทำงานช้าไปด้วยเนื่องจาก loop function มีหลากหลายการทำงาน