void setup() และ void loop() คืออะไร? โครงสร้าง Arduino พร้อมโค้ด
void setup() และ void loop() คืออะไร? โครงสร้าง Arduino พร้อมโค้ด
เข้าใจโครงสร้างโปรแกรม Arduino
void setup() ใน Arduino ทำงานหนึ่งครั้งเมื่อเปิดเครื่องหรือรีเซ็ต ส่วน void loop() ทำงานวนซ้ำหลัง setup() จบ Arduino ใช้ C++ ร่วมกับ framework ที่จัดการการเริ่มต้นและการวนรอบให้ ทุกโปรแกรม Arduino จะมีโครงสร้างแบ่งเป็น 3 ส่วนหลัก: Header (ส่วนหัว), setup() และ loop()
ส่วนที่ 1: Header
Header เป็นส่วนที่อยู่บรรทัดแรกของโค้ด ใช้สำหรับ:
#includeไลบรารีที่ต้องการใช้- ประกาศตัวแปรแบบ global
- กำหนดค่าคงที่
#include <Servo.h> // ส่งผนวกไลบรารี Servo เข้ามาใช้
int servoPin = 9; // กำหนดให้ตัวแปร servoPin แทน Pin Digital 9
Servo myservo; // สร้าง object ชื่อ myservo สำหรับควบคุม Servo
จุดที่ต้องปรับ: ถ้าไม่ใช้ Servo สามารถลบส่วนนี้ออกได้เลย
ส่วน Header มีหรือไม่มีก็ได้ ขึ้นอยู่กับว่าโปรแกรมต้องการใช้ไลบรารีหรือตัวแปร global หรือไม่
ส่วนที่ 2: ฟังก์ชัน setup()
setup() เป็น ฟังก์ชันบังคับ ที่ต้องมีในทุกโปรแกรม Arduino ถึงแม้จะไม่มีคำสั่งอะไรเลยก็ตาม
void setup() {
// กำหนดโหมดขา 11 เป็นขาส่งออก
pinMode(11, OUTPUT);
// กำหนด Baudrate สำหรับ Serial Monitor
Serial.begin(9600);
// กำหนดขาที่จะควบคุม Servo
myservo.attach(servoPin);
}
หน้าที่หลักของ setup()
| คำสั่ง | ทำอะไร |
|---|---|
pinMode() | กำหนดว่าขานั้นเป็น INPUT หรือ OUTPUT |
Serial.begin() | ตั้งความเร็วสื่อสารอนุกรม |
myservo.attach() | กำหนดขาควบคุม Servo |
setup() จะทำงานแค่ รอบเดียว ตอนเริ่มโปรแกรมเท่านั้น เหมาะสำหรับตั้งค่าเริ่มต้นที่ต้องกำหนดครั้งเดียวแล้วใช้ไปตลอด
ส่วนที่ 3: ฟังก์ชัน loop()
loop() เป็น ฟังก์ชันบังคับอีกตัว ที่ต้องมีเช่นกัน แต่ต่างจาก setup() ตรงที่มันจะทำงานซ้ำไม่รู้จบ
void loop() {
myservo.write(180); // สั่ง Servo ไปที่ตำแหน่ง 180 องศา
delay(1000); // รอ 1 วินาที
myservo.write(0); // สั่ง Servo ไปที่ตำแหน่ง 0 องศา
delay(1000); // รอ 1 วินาที
}
สิ่งที่ควรอยู่ใน loop()
- คำสั่งอ่านค่าจากเซ็นเซอร์
- คำสั่งสั่งงานอุปกรณ์ เช่น พัดลม ไฟ LED
- คำสั่งแสดงผล
- การตรวจสอบเงื่อนไขต่างๆ
loop() เปรียบเสมือน ฟังก์ชัน main() ใน C ปกติ แต่ถูกเขียนให้ทำงานวนรอบโดยอัตโนมัติ
ตัวอย่างโครงสร้างโปรแกรมครบถ้วน
// === Header (ไม่บังคับ) ===
#include <Servo.h>
int servoPin = 9;
Servo myservo;
// === setup() ทำงานรอบเดียว ===
void setup() {
myservo.attach(servoPin);
Serial.begin(9600);
}
// === loop() ทำงานวนซ้ำไม่รู้จบ ===
void loop() {
myservo.write(180);
delay(1000);
myservo.write(0);
delay(1000);
}
[image: โค้ดโปรแกรม Arduino ครบทั้ง 3 ส่วน พร้อมคอมเมนต์บอกว่าแต่ละส่วนทำหน้าที่อะไร]
สรุป
โครงสร้างภาษาซีของ Arduino แบ่งเป็น 3 ส่วน คือ Header, setup() และ loop() โดย setup() จะทำงานแค่ครั้งเดียวตอนเริ่มต้น ส่วน loop() จะทำงานวนซ้ำไปเรื่อยๆ เข้าใจตรงนี้แล้วจะอ่านโค้ด Arduino ของใครก็ตามได้ง่ายขึ้น
อยากทำโปรเจคแบบนี้?
รับทำโปรเจค Arduino / IoT จบงานไว ส่งงานครบ พร้อมสอน
หากต้องการ รับทำโปรเจคอาดูโน่ หรือระบบ IoT แบบเร่งด่วน สามารถดูขอบเขตงานและขั้นตอนติดต่อได้ที่หน้าบริการ
จ้างทำโปรเจคเลย