Arduino LED and Button

Sarinthon Mangkorn-ngam
2 min readMay 11, 2022

--

มาควมคุม 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 มีหลากหลายการทำงาน

--

--

No responses yet