โครงสร้างพื้นฐานของโปรแกรม Arduino
โค้ด Arduino ทุกโค้ด (หรือที่เรียกว่า Sketch) จะมีโครงสร้างหลัก 2 ส่วนเสมอ:
void setup()
:เป็นฟังก์ชันที่ ทำงานเพียงครั้งเดียว เมื่อบอร์ด Arduino เริ่มทำงาน (เปิดไฟ หรือกดปุ่ม Reset)
ใช้สำหรับตั้งค่าเริ่มต้นต่างๆ เช่น กำหนดโหมดของขาพอร์ต (Input/Output), เริ่มต้นการสื่อสารแบบอนุกรม (Serial Communication) หรือตั้งค่าโมดูลต่างๆ
void loop()
:เป็นฟังก์ชันที่ ทำงานซ้ำไปเรื่อยๆ อย่างไม่มีที่สิ้นสุด หลังจากฟังก์ชัน
setup()
ทำงานเสร็จเป็นส่วนที่เราจะเขียนโค้ดหลักสำหรับให้ Arduino ทำงานตามที่เราต้องการ เช่น อ่านค่าจากเซ็นเซอร์, ควบคุมหลอดไฟ, มอเตอร์
คำสั่งพื้นฐานที่ควรรู้
1. คำสั่งสำหรับควบคุมขาพอร์ต (Digital I/O)
pinMode(pin, mode);
ใช้: กำหนดโหมดการทำงานของขาพอร์ต (Pin) ว่าจะเป็นขา Input (รับค่าเข้ามา) หรือ Output (ส่งค่าออกไป)
pin
: หมายเลขขาพอร์ตของ Arduino (เช่น 2, 3, 13)mode
:INPUT
,OUTPUT
, หรือINPUT_PULLUP
(สำหรับใช้ตัวต้านทาน Pull-up ภายใน)ตัวอย่าง:
pinMode(13, OUTPUT);
(กำหนดขา 13 ให้เป็นขาเอาต์พุต)
digitalWrite(pin, value);
ใช้: ส่งค่าสถานะแบบดิจิทัล (เปิด/ปิด, สูง/ต่ำ) ออกไปที่ขาพอร์ตที่กำหนดไว้เป็น
OUTPUT
pin
: หมายเลขขาพอร์ตvalue
:HIGH
(เปิด, แรงดันสูง 5V) หรือLOW
(ปิด, แรงดันต่ำ 0V)ตัวอย่าง:
digitalWrite(13, HIGH);
(ทำให้ขา 13 มีไฟออก)
digitalRead(pin);
ใช้: อ่านค่าสถานะแบบดิจิทัลจากขาพอร์ตที่กำหนดไว้เป็น
INPUT
pin
: หมายเลขขาพอร์ตค่าที่ส่งกลับ:
HIGH
(ถ้ามีแรงดันสูง) หรือLOW
(ถ้ามีแรงดันต่ำ)ตัวอย่าง:
int buttonState = digitalRead(2);
(อ่านค่าจากขา 2 แล้วเก็บไว้ในตัวแปรbuttonState
)
2. คำสั่งสำหรับควบคุมขาพอร์ตแบบ Analog (Analog I/O)
analogRead(pin);
ใช้: อ่านค่าแรงดันไฟฟ้าแบบอะนาล็อกจากขาพอร์ตอะนาล็อก (ขา A0-A5 บน Arduino Uno) โดยจะแปลงค่าแรงดัน (0-5V) เป็นตัวเลข (0-1023)
pin
: หมายเลขขาพอร์ตอะนาล็อก (เช่น A0, A1)ค่าที่ส่งกลับ: ตัวเลขจำนวนเต็มระหว่าง 0 ถึง 1023
ตัวอย่าง:
int sensorValue = analogRead(A0);
(อ่านค่าจากขา A0)
analogWrite(pin, value);
ใช้: ส่งค่าสัญญาณ PWM (Pulse Width Modulation) ออกไปที่ขาพอร์ตดิจิทัลที่รองรับ PWM (มักจะมีสัญลักษณ์
~
หน้าหมายเลขขา เช่น 3, 5, 6, 9, 10, 11) เพื่อควบคุมความสว่างของ LED หรือความเร็วของมอเตอร์pin
: หมายเลขขาพอร์ตดิจิทัลที่รองรับ PWMvalue
: ตัวเลขจำนวนเต็มระหว่าง 0 (ปิดสนิท) ถึง 255 (เปิดเต็มที่)ตัวอย่าง:
analogWrite(9, 128);
(ทำให้ LED ที่ขา 9 สว่างครึ่งหนึ่ง)
3. คำสั่งสำหรับหน่วงเวลา
delay(ms);
ใช้: หน่วงเวลาการทำงานของโปรแกรมเป็นมิลลิวินาที (milliseconds)
ms
: จำนวนมิลลิวินาทีที่ต้องการหน่วง (1000 ms = 1 วินาที)ตัวอย่าง:
delay(1000);
(หยุดการทำงาน 1 วินาที)
4. คำสั่งสำหรับการสื่อสารแบบอนุกรม (Serial Communication)
Serial.begin(baud_rate);
ใช้: เริ่มต้นการสื่อสารแบบอนุกรมผ่านพอร์ต USB เพื่อให้ Arduino สามารถส่งข้อมูลไปยังคอมพิวเตอร์ (Serial Monitor) หรือรับข้อมูลจากคอมพิวเตอร์ได้
baud_rate
: ความเร็วในการสื่อสาร (มักใช้ 9600 หรือ 115200)ตัวอย่าง:
Serial.begin(9600);
(เริ่มต้นการสื่อสารที่ความเร็ว 9600 บิตต่อวินาที)
Serial.print(data);
และSerial.println(data);
ใช้: ส่งข้อมูลออกทาง Serial Monitor
Serial.print()
: ส่งข้อมูลแล้วเคอร์เซอร์จะอยู่บรรทัดเดิมSerial.println()
: ส่งข้อมูลแล้วขึ้นบรรทัดใหม่data
: ข้อมูลที่ต้องการส่ง (ตัวเลข, ข้อความ, ตัวแปร)ตัวอย่าง:
Serial.print("Hello, Arduino!");Serial.println(sensorValue);
Serial.read();
ใช้: อ่านข้อมูลที่ส่งเข้ามาทางพอร์ต Serial
ค่าที่ส่งกลับ: ตัวอักษรที่อ่านได้ (เป็นค่า ASCII) หรือ -1 ถ้าไม่มีข้อมูล
ตัวอย่าง:
char receivedChar = Serial.read();
5. คำสั่งและสัญลักษณ์อื่นๆ ที่สำคัญ
//
: ใช้สำหรับเขียน Comment หรือข้อความอธิบายในโค้ด ส่วนนี้คอมไพเลอร์จะข้ามไป ไม่ถูกประมวลผล ใช้เพื่อช่วยให้เราและคนอื่นเข้าใจโค้ดได้ง่ายขึ้น/* ... */
: ใช้สำหรับเขียน Comment หลายบรรทัด;
(Semicolon): ต้อง ปิดท้ายทุกๆ คำสั่งเสมอ (ยกเว้นพวกวงเล็บปีกกา{}
หรือคำสั่งควบคุมif
,for
,while
){}
(Curly Braces): ใช้กำหนดขอบเขตของบล็อกคำสั่ง เช่น ฟังก์ชันsetup()
ฟังก์ชันloop()
หรือบล็อกif-else
int
,float
,char
,String
: เป็นชนิดของ ตัวแปร (Variable) ที่ใช้สำหรับเก็บข้อมูลประเภทต่างๆint
: จำนวนเต็ม (integer)float
: จำนวนทศนิยม (floating-point number)char
: ตัวอักขระ (character)String
: ข้อความ (ชุดของตัวอักขระ)
=
(Assignment Operator): ใช้ในการกำหนดค่าให้กับตัวแปร เช่นint x = 10;
==
(Comparison Operator): ใช้ในการเปรียบเทียบว่าสองค่าเท่ากันหรือไม่ เช่นif (x == 10)
if
/else if
/else
: คำสั่งเงื่อนไข สำหรับการตัดสินใจif (condition) {// ทำงานถ้า condition เป็นจริง } else if (anotherCondition) { // ทำงานถ้า anotherCondition เป็นจริง } else { // ทำงานถ้า condition และ anotherCondition เป็นเท็จ }
for
/while
: คำสั่งวนซ้ำ (Loop)