สอน Arduino – อธิบายโปรแกรมไฟกระพริบ
บทความนี้ผมจะอธิบายถึงวิธีการเขียนโค้ดโปรแกรม หรือเขียนโปรแกรมเพื่อสั่งงานบอร์ด Arduino สำหรับผู้เริ่มต้น โดยอธิบายผ่านโปรแกรมไฟกระพริบ ซึ่งโค้ดในบทความนี้สามารถเขียนโปรแกรม คอมไพล์ และอัปโหลดโปรแกรมลงบอร์ดด้วย Arduino IDE และหากใครยังไม่เคยใช้โปรแกรม Arduino IDE มาก่อน ให้ตามไปอ่านวิธีใช้งานเบื้องต้นได้ที่บทความ “วิธีใช้งานโปรแกรม Arduino IDE เบื้องต้น” เพื่อความเข้าใจครับ
ฟังก์ชั่นหลักของโค้ดโปรแกรม Arduino
โค้ดโปรแกรมสำหรับ Arduino จะประกอบไปด้วยฟังก์ชั่นหลัก 2 ฟังก์ชั่น คือฟังก์ชั่น setup() และ ฟังก์ชั่น loop()
void setup() {
}
void loop() {
}
- ฟังก์ชั่น setup() จะเริ่มทำงานเป็นอันดับแรกทันทีที่ Arduino เริ่มทำงาน และคำสั่งที่ถูกเขียนลงไปในนี้ จะทำงานเพียงครั้งเดียวเท่านั้น
- ฟังก์ชั่น loop() จะเริ่มทำงานทันทีเมื่อฟังก์ชั่น setup() ทำงานเสร็จ และคำสั่งที่ถูกเขียนลงไปในนี้ จะทำงานตั้งแต่คำสั่งแรก ไล่ไปจนถึงคำสั่งสุดท้าย แล้วกลับมาทำงานที่คำสั่งแรก ไล่ไปจนถึงคำสั่งสุดท้าย วนซ้ำแบบนี้ไปเรื่อยๆ ตลอดการทำงานของ Arduino
เริ่มเขียนโปรแกรมที่ฟังก์ชั่น setup
ฟังก์ชั่น setup() จะทำงานเพียงแค่ครั้งเดียวทันทีที่ Arduino เริ่มทำงาน ดังนั้นโค้ดที่จะถูกเขียนลงไปในฟังก์ชั่นนี้ มักจะเป็นโค้ดสำหรับกำหนดโหมด Input/Output ให้กับ pin โดยใช้ฟังก์ชั่น pinMode() หรือมักจะเป็นโค้ดที่กำหนดค่าเริ่มต้นเพื่อใช้งานไลบรารี่ต่างๆ เช่น Serial.begin(), WiFi.begin() หรือ Servo.attach() เป็นต้น ซึ่งเป็นโค้ดที่ไม่มีความจำเป็นต้องทำงานซ้ำ
ตัวอย่างเช่น โค้ดด้านล่างนี้จะกำหนด pin หมายเลข 13 ให้อยู่ในโหมด Output ทันทีที่ Arduino เริ่มทำงาน และ pin หมายเลข 13 จะอยู่ในโหมด Output ไปตลอดการทำงานของ Arduino
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
}
เขียนโปรแกรมกันต่อที่ฟังก์ชั่น loop
ฟังก์ชั่น loop() จะทำงานทันทีที่ฟังก์ชั่น setup() ทำงานจบ และโค้ดในฟังก์ชั่น loop() ก็จะถูกทำงานซ้ำไปเรื่อยๆ ตลอดการทำงานของ Arduino ซึ่งโค้ดโปรแกรมส่วนใหญ่ ที่มีผลต่อการทำงานของ Arduino จะถูกเขียนลงไปในฟังก์ชั่น loop() นี้ เช่นโค้ดสำหรับรับข้อมูลจากปุ่มกด, สั่งเปิดปิดไฟ, แสดงผลออกจาก LCD หรือแม้กระทั่งการอ่านข้อมูลจากเซ็นเซอร์ต่างๆ ก็ตาม
ตัวอย่างโค้ดไฟกระพริบสำหรับ Arduino UNO
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
อธิบายการทำงานของโปรแกรม
โปรแกรมจะเริ่มทำงานที่ฟังก์ชั่น setup() ซึ่งมีคำสั่งเดียวคือ pinMode(13, OUTPUT) นั่นคือกำหนด pin หมายเลข 13 ให้อยู่ในโหมด Output
เมื่อทำเสร็จแล้วก็จบการทำงานที่ฟังก์ชั่น setup() และเริ่มทำงานต่อที่ฟังก์ชั่น loop() ทันที และไล่ทำไปทีละคำสั่ง ตั้งแต่คำสั่งแรก ไล่ทำไปจนคำสั่งสุดท้าย และเมื่อทำคำสั่งสุดท้ายจบก็จะกลับไปทำงานคำสั่งแรกใหม่ เช่น
- digitalWrite(13, HIGH) built-in LED ไฟติด
- delay(1000) หยุดการทำงาน 1000 มิลลิวินาที (1 วินาที)
- digitalWrite(13, LOW) built-in LED ไฟดับ
- delay(1000) หยุดการทำงาน 1000 มิลลิวินาที (1 วินาที)
- digitalWrite(13, HIGH) built-in LED ไฟติด
- delay(1000) หยุดการทำงาน 1000 มิลลิวินาที (1 วินาที)
- digitalWrite(13, LOW) built-in LED ไฟดับ
- delay(1000) หยุดการทำงาน 1000 มิลลิวินาที (1 วินาที)
- digitalWrite(13, HIGH) built-in LED ไฟติด
- ….
- ….
ผลการทำงานก็คือ built-in LED จะไฟติด และติดค้างไว้นาน 1 วินาที จากนั้นก็จะไฟดับ และดับค้างไว้นาน 1 วินาที ซ้ำแบบนี้ไปเรื่อยๆ จนเกิดเป็นไฟกระพริบแบบที่เห็นครับ
หมายเหตุ : ในบอร์ด Arduino UNO pin หมายเลข 13 จะถูกพ่วงกับ built-in LED (LED ที่ติดมากับบอร์ด) ดังนั้นหากเรากำหนด pin หมายเลข 13 ให้เป็น HIGH แปลว่าไฟที่ built-in LED ก็จะติด ส่วนในบอร์ดอื่นๆ built-in LED อาจพ่วงอยู่กับ pin หมายเลขอื่นๆ ได้เช่นกันครับ ตรงนี้ก็ต้องอ่านคู่มือบอร์ดนั้นๆ กันเอาเอง