การเขียนโปรแกรมเบื้องต้นกับ Arduino C++
(โครงสร้างโปรแกรมของ Arduino)
โปรแกรมของ Arduino แบ่งได้ เป็นสองส่วนคือ
ภาษาซีของ Arduino จะจัดรูปแบบโครงสร้างของการเขียนโปรแกรมออกเป็นส่วนย่อยๆหลายๆส่วน โดยเรียกแต่ละส่วนว่า ฟังก์ชั่น และ เมื่อนำฟังก์ชั่น มารวมเข้าด้วยกัน ก็จะเรียกว่าโปรแกรม โดยโครงสร้างการเขียนโปรแกรมของ Arduino นั้น ทุกๆโปรแกรมจะต้องประกอบไปด้วยฟังก์ชั่นจำนวนเท่าใดก็ได้ แต่อย่างน้อยที่สุดต้องมีฟังก์ชั่น จำนวน 2 ฟังก์ชั่น คือ setup() และ loop()
#include<servo.h> //เรียกไลบรารี่ ชื่อ servo.h เข้ามาใช้ในโปรแกรม
int Servo1=9; //กำหนดให้ Servo1 แทน Pin Digital-9
Servo myservo; //สร้าง object ชื่อ myservo เพื่อควบคุม Servo
void setup()
{
myservo.attach(Serrvo1); //กำหนดให้ใช้ขา Digital-9 สร้างสัญญาณควบคุม Servo
}
void loop()
{
myservo.write(180); //กำหนดค่าตำแหน่งให้กับ Servo = 180 องศา
}
จะได้เห็นได้โครงสร้างพื้นฐานของภาษาซีที่ใช้กับ Arduino นั้นจะประกอบไปด้วย 3 ส่วนใหญ่ๆด้วยกัน คือ
1. Header ในส่วนนี้จะมีหรือไม่มีก็ได้ ถ้ามีต้องกำหนดไว้ในส่วนเริ่มต้นของโปรแกรม ซึ่งส่วนของ Header ได้แก่ ส่วนที่เป็น Compiler Directive ต่างๆรวมไปถึงส่วนของการประกาศตัวแปร และค่าคงที่ต่างๆที่จะใช้ในโปรแกรม
2.setup() ในส่วนนี้เป็นฟังก์ชั่นบังคับที่ต้องกำหนดให้มีในทุกๆโปรแกรม ถึงแม้ว่าในบางโปรแกรมจะไม่ต้องการใช้งานก็ยังจำเป็นต้องประกาศไว้ด้วยเสมอ เพียงแต่ไม่ต้องเขียนคำสั่งใดๆไว้ในระหว่างวงเล็บปีกกา {} ที่ใช้เป็นตัวกำหนดของเขตของฟังก์ชั่น โดยฟังก์ชั่นนี้จะใช้สำหรับบรรจุคำสั่งในส่วนที่ต้องกาให้โปรแกรมทำงานเพียงรอบเดียวตอนเริ่มต้นทำงานของโปรแกรมครั้งแรกเท่านั้น ซึ่งได้แก่คำสั่งเกี่ยวกับการ Setup ค่าการทำงานต่างๆ เช่น การกำหนดหน้าที่การใช้งานของ PinMode และการกำหนดค่า Baudrate สำหรับใช้งานพอร์ตสื่อสารอนุกรม เป็นต้น
3.loop() เป็นส่วนฟังก์ชั่นบังคับที่ต้องกำหนดให้มีในทุกๆโปรแกรมเช่นเดียวกันกับฟังก์ชั่น setup() โดยฟังก์ชั่น loop() นี้จะใช้บรรจุคำสั่งที่ต้องการให้โปรแกรมทำงานเป็นวงรอลซ้ำๆกันไปไม่รู้จบ ซึ่งถ้าเปรียบเทียบกับรูปแบบของ ANSI-C ส่วนนี้ก็คือ ฟังก์ชั่น main() นั่นเอง
#include <header.h>
เมื่อพบคำสั่ง #include ตัวแปลภาษาของ Arduino จะไปค้นหาไฟล์ที่ระบุไว้ในเครื่องหมาย <> หลังคำสั่ง #include จากตำแหน่ง Directory ที่เก็บไฟล์ Library ของโปรแกรม Arduino ไว้
ซึ่งแน่นอนว่าส่วนของ Header จะนับรวมไปถึง คำสั่งส่วนที่ใช้ประกาศสร้าง ตัวแปร(Variable Declaration)และค่าคงที่(Constant Declaration) รวมทั้ง ฟังก์ชั่นต่างๆ (Function Declaration) ด้วย ซึ่งจากตัวอย่างได้แก่ส่วนที่เป็นคำสั่ง
int Servo1=9;
Servo myservo
สำหรับส่วนที่สำคัญที่สุดและขาดไม่ได้ คือ ฟังก์ชั่น setup() และ ฟังก์ชั่น loop() ซึ่งฟังก์ชั่น ทั้ง 2 ส่วนนี้มีรูปแบบโครงสร้างที่เหมือนกัน แต่ถูกกำหนดด้วยชื่อฟังก์ช่ั่นเป็นการเฉพาะ คือ setup() และ loop() โดย setup() จะเขียนไว้ก่อน loop() ซึ่งทัง 2 ฟังก์ชั่นนี้ มีขอบเขต เริ่มต้นและสิ้นสุด อยู่ภายใต้เครื่องหมาย{}
void setup()
{
คำสั่งต่างๆ ที่ต้องการเขียนไว้ภายใต้ฟังก์ชั่น setup()
}
หน้าที่ของฟังก์ชั่น setup() ใน Arduino คือ ใช้ทำหน้าที่เป็นส่วนของโปรแกรมย่อยสำหรับใช้บรรจุคำสั่งต่างๆที่ใช้สำหรับกำหนดกาทำงานของระบบ หรือ กำหนดคุณสมบัติการทำงานให้กับอุปกรณ์ต่างๆซึ่งคำสั่งทั้งหมดที่บรรจุไว้ภายใต้ฟังก์ชั่นของ Setup() นี้ จะถูกเรียกขึ้นมาทำงานเพียงรอบเดียวคือตอนเริ่มต้นการทำงานของโปรแกรม โดยคำสั่งที่นิยมบรรจุไว้ในฟังก์ชั่นส่วนนี้ ได้แก้ คำสั่งสำหรับกำหนดโหมดการทำงานของ Digital Pin หรือ คำสั่งสำหรับ กำหนดคุณสมบัติของพอร์ตสื่อสารอนุกรม เป็นต้น
void loop()
{
คำสั่งต่างๆที่ต้องการให้ทำงานภายใต้ฟังก์ชั่น loop()
}
หน้าที่ของฟังก์ชั่น loop() ใน Arduino คือใช้ทำหน้าที่เป็นส่วนของโปรแกรมหลัก สำหรับใช้บรรจุคำสั่งควบคุมการทำงานต่างๆของโปรแกรม ที่ต้องการใช้โปรแกรมทำงาน โดยคำสั่งที่บรรจุไว้ในฟังก์ชั่นนี้จะถูกเรียกขึ้นมาทำงานซ้ำๆกันตามลำดับและเงื่อนไขที่กำหนดไว้3
ภาษาซีของ Arduino จะจัดรูปแบบโครงสร้างของการเขียนโปรแกรมออกเป็นส่วนย่อยๆหลายๆส่วน โดยเรียกแต่ละส่วนว่า ฟังก์ชั่น และ เมื่อนำฟังก์ชั่น มารวมเข้าด้วยกัน ก็จะเรียกว่าโปรแกรม โดยโครงสร้างการเขียนโปรแกรมของ Arduino นั้น ทุกๆโปรแกรมจะต้องประกอบไปด้วยฟังก์ชั่นจำนวนเท่าใดก็ได้ แต่อย่างน้อยที่สุดต้องมีฟังก์ชั่น จำนวน 2 ฟังก์ชั่น คือ setup() และ loop()
#include<servo.h> //เรียกไลบรารี่ ชื่อ servo.h เข้ามาใช้ในโปรแกรม
int Servo1=9; //กำหนดให้ Servo1 แทน Pin Digital-9
Servo myservo; //สร้าง object ชื่อ myservo เพื่อควบคุม Servo
void setup()
{
myservo.attach(Serrvo1); //กำหนดให้ใช้ขา Digital-9 สร้างสัญญาณควบคุม Servo
}
void loop()
{
myservo.write(180); //กำหนดค่าตำแหน่งให้กับ Servo = 180 องศา
}
จะได้เห็นได้โครงสร้างพื้นฐานของภาษาซีที่ใช้กับ Arduino นั้นจะประกอบไปด้วย 3 ส่วนใหญ่ๆด้วยกัน คือ
1. Header ในส่วนนี้จะมีหรือไม่มีก็ได้ ถ้ามีต้องกำหนดไว้ในส่วนเริ่มต้นของโปรแกรม ซึ่งส่วนของ Header ได้แก่ ส่วนที่เป็น Compiler Directive ต่างๆรวมไปถึงส่วนของการประกาศตัวแปร และค่าคงที่ต่างๆที่จะใช้ในโปรแกรม
2.setup() ในส่วนนี้เป็นฟังก์ชั่นบังคับที่ต้องกำหนดให้มีในทุกๆโปรแกรม ถึงแม้ว่าในบางโปรแกรมจะไม่ต้องการใช้งานก็ยังจำเป็นต้องประกาศไว้ด้วยเสมอ เพียงแต่ไม่ต้องเขียนคำสั่งใดๆไว้ในระหว่างวงเล็บปีกกา {} ที่ใช้เป็นตัวกำหนดของเขตของฟังก์ชั่น โดยฟังก์ชั่นนี้จะใช้สำหรับบรรจุคำสั่งในส่วนที่ต้องกาให้โปรแกรมทำงานเพียงรอบเดียวตอนเริ่มต้นทำงานของโปรแกรมครั้งแรกเท่านั้น ซึ่งได้แก่คำสั่งเกี่ยวกับการ Setup ค่าการทำงานต่างๆ เช่น การกำหนดหน้าที่การใช้งานของ PinMode และการกำหนดค่า Baudrate สำหรับใช้งานพอร์ตสื่อสารอนุกรม เป็นต้น
3.loop() เป็นส่วนฟังก์ชั่นบังคับที่ต้องกำหนดให้มีในทุกๆโปรแกรมเช่นเดียวกันกับฟังก์ชั่น setup() โดยฟังก์ชั่น loop() นี้จะใช้บรรจุคำสั่งที่ต้องการให้โปรแกรมทำงานเป็นวงรอลซ้ำๆกันไปไม่รู้จบ ซึ่งถ้าเปรียบเทียบกับรูปแบบของ ANSI-C ส่วนนี้ก็คือ ฟังก์ชั่น main() นั่นเอง
#include <header.h>
เมื่อพบคำสั่ง #include ตัวแปลภาษาของ Arduino จะไปค้นหาไฟล์ที่ระบุไว้ในเครื่องหมาย <> หลังคำสั่ง #include จากตำแหน่ง Directory ที่เก็บไฟล์ Library ของโปรแกรม Arduino ไว้
ซึ่งแน่นอนว่าส่วนของ Header จะนับรวมไปถึง คำสั่งส่วนที่ใช้ประกาศสร้าง ตัวแปร(Variable Declaration)และค่าคงที่(Constant Declaration) รวมทั้ง ฟังก์ชั่นต่างๆ (Function Declaration) ด้วย ซึ่งจากตัวอย่างได้แก่ส่วนที่เป็นคำสั่ง
int Servo1=9;
Servo myservo
สำหรับส่วนที่สำคัญที่สุดและขาดไม่ได้ คือ ฟังก์ชั่น setup() และ ฟังก์ชั่น loop() ซึ่งฟังก์ชั่น ทั้ง 2 ส่วนนี้มีรูปแบบโครงสร้างที่เหมือนกัน แต่ถูกกำหนดด้วยชื่อฟังก์ช่ั่นเป็นการเฉพาะ คือ setup() และ loop() โดย setup() จะเขียนไว้ก่อน loop() ซึ่งทัง 2 ฟังก์ชั่นนี้ มีขอบเขต เริ่มต้นและสิ้นสุด อยู่ภายใต้เครื่องหมาย{}
void setup()
{
คำสั่งต่างๆ ที่ต้องการเขียนไว้ภายใต้ฟังก์ชั่น setup()
}
หน้าที่ของฟังก์ชั่น setup() ใน Arduino คือ ใช้ทำหน้าที่เป็นส่วนของโปรแกรมย่อยสำหรับใช้บรรจุคำสั่งต่างๆที่ใช้สำหรับกำหนดกาทำงานของระบบ หรือ กำหนดคุณสมบัติการทำงานให้กับอุปกรณ์ต่างๆซึ่งคำสั่งทั้งหมดที่บรรจุไว้ภายใต้ฟังก์ชั่นของ Setup() นี้ จะถูกเรียกขึ้นมาทำงานเพียงรอบเดียวคือตอนเริ่มต้นการทำงานของโปรแกรม โดยคำสั่งที่นิยมบรรจุไว้ในฟังก์ชั่นส่วนนี้ ได้แก้ คำสั่งสำหรับกำหนดโหมดการทำงานของ Digital Pin หรือ คำสั่งสำหรับ กำหนดคุณสมบัติของพอร์ตสื่อสารอนุกรม เป็นต้น
void loop()
{
คำสั่งต่างๆที่ต้องการให้ทำงานภายใต้ฟังก์ชั่น loop()
}
หน้าที่ของฟังก์ชั่น loop() ใน Arduino คือใช้ทำหน้าที่เป็นส่วนของโปรแกรมหลัก สำหรับใช้บรรจุคำสั่งควบคุมการทำงานต่างๆของโปรแกรม ที่ต้องการใช้โปรแกรมทำงาน โดยคำสั่งที่บรรจุไว้ในฟังก์ชั่นนี้จะถูกเรียกขึ้นมาทำงานซ้ำๆกันตามลำดับและเงื่อนไขที่กำหนดไว้3
เริ่มต้นใช้งาน Arduino UNO เบื้องต้น
Arduino UNO R3
Arduino เป็นบอร์ดไมโครคอนโทรเลอร์ตระกูล AVR ที่มีการพัฒนาแบบ Open Source ตัวบอร์ดถูกออกแบบมาให้ใช้งานง่ายจึงเหมาะสำหรับผู้ที่เริ่มศึกษาการเขียนโปรแกรม
Arduino เป็นบอร์ดไมโครคอนโทรเลอร์ตระกูล AVR ที่มีการพัฒนาแบบ Open Source ตัวบอร์ดถูกออกแบบมาให้ใช้งานง่ายจึงเหมาะสำหรับผู้ที่เริ่มศึกษาการเขียนโปรแกรม
Arduino ต้องใช้โปรแกรมในการเขียน
สามารถโหลดโปรแกรมได้ที่ https://www.arduino.cc/en/Main/Software
สามารถโหลดโปรแกรมได้ที่ https://www.arduino.cc/en/Main/Software
Pin Description
- Power สามารถเสียบ adapter แปลงไฟ AC to DC รับแรงดันได้ 7–12 V ทนแรงดันไฟได้สูงสุด 6–20V
- Reset สำหรับ รีเซ็ตไมโครคอนโทรลเลอร์ เช่นเริ่มโปรแกรมจากจุดเริ่มต้น
- Analog Pins คือขา A0 ถึง A5 ใช้เพื่อให้อินพุตแบบอนาลอกในช่วง 0–5V
- Input/Output Pins คือขา ดิจิตอลpin 0 ถึง 13 สามารถใช้เป็นอินพุตหรือเอาต์พุต
- Serial คือขา ดิจิตอลpin 0 และ ดิจิตอลpin 1
- External Interrupts
- PWM คือขา ดิจิตอลpin (3,5,6,9,11) เป็นสัญญาน Pulse Width Modulation
- SPI คือขา 10(SS), 11(MOSI), 12(MISO) และ 13(SCK) ใช้สำหรับการสื่อสาร
- TWI คือขา A4(SDA), A5(SCA) ใช้สำหรับการสื่อสาร TWI
- Inbuilt LED คือขา ดิจิตอลpin13 ใช้ ในการเปิดไฟ LED บนบอร์ด
TIP: ช่อง Vin จ่ายไฟตามไฟตามไฟเลี้ยงวงจร
วิธีเริ่มเขียนโปรแกรม
การทำงานของ Arduinoมีฟังก์ชันหลักอยู่ 2 ฟังก์ชัน ได้แก่
- ฟังก์ชัน Setup คือฟังก์ชันหลักสำหรับการทำงาน จะทำงานเพียง 1 ครั้งหลังจากได้รันโปรแกรมและจะทำการไปทำงานในฟังก์ชันถัดไป คือ ฟังก์ชัน Loop
- ฟังก์ชัน Loop คือฟังก์ชันการทำงานของฟังก์ชัน Loop จะทำงานวนซ้ำไปเรื่อยๆ เรียนว่า infinite loop การทำงานที่ไม่มีสิ้นสุด
- ฟังก์ชัน Setup คือฟังก์ชันหลักสำหรับการทำงาน จะทำงานเพียง 1 ครั้งหลังจากได้รันโปรแกรมและจะทำการไปทำงานในฟังก์ชันถัดไป คือ ฟังก์ชัน Loop
- ฟังก์ชัน Loop คือฟังก์ชันการทำงานของฟังก์ชัน Loop จะทำงานวนซ้ำไปเรื่อยๆ เรียนว่า infinite loop การทำงานที่ไม่มีสิ้นสุด
มาลองเขียนโปรแกรมใน ฟังก์ชัน Setup และ ฟังก์ชัน Loop
- ก่อนจะทำการเขียนโปรแกรมจะต้องทำการตั้งค่า Port ให้ถูกต้องก่อน ดังรูป
ทำการเลือก Board ให้เป็น Arduino/Gernuino Uno กรณีที่ใช้ Board Arduino Uno R3 ตั้งค่าดังรูป
เมื่อเขียนโปรแกรมเสร็จแล้ว สังเกตที่วงสีแดงจุดที่ 1 และ จุดที่ 2
- จุดที่ 1 คือ การตรวจสอบการเขียนโปรแกรมว่าถูกต้องหรือไม่ ถ้าไม่ถูกต้องโปรแกรมจะมีการแจ้ง เตือน error ขึ้นมา
- จุดที่ 2 คือ การอัพโหลดโค้ดที่เราเขียนลงไปในตัว Board Arduino ถ้าเกิดไม่มีอะไรผิดพลาด ระบบจะทำการแจ้งเตือน ดังรูปที่
- จุดที่ 1 คือ การตรวจสอบการเขียนโปรแกรมว่าถูกต้องหรือไม่ ถ้าไม่ถูกต้องโปรแกรมจะมีการแจ้ง เตือน error ขึ้นมา
- จุดที่ 2 คือ การอัพโหลดโค้ดที่เราเขียนลงไปในตัว Board Arduino ถ้าเกิดไม่มีอะไรผิดพลาด ระบบจะทำการแจ้งเตือน ดังรูปที่
การทำงาน ฟังก์ชัน Setup และ อธิบาย code
- การทำงานจะทำการพิมพ์ Hello Word ออกทาง Serial Monitor เพียงหนึ่งครั้ง
- อธิบาย code
Serial.begin(9600) คือ การประกาศความเร็วในการรับส่งข้อมูล
Serial.print(“Hello Word”) คือ การสั่งพิมพ์ตัวอักษรที่มีชื่อว่า Hello Word ให้แสดงออกผ่านทาง Serial Monitor
- การทำงานจะทำการพิมพ์ Hello Word ออกทาง Serial Monitor เพียงหนึ่งครั้ง
- อธิบาย code
Serial.begin(9600) คือ การประกาศความเร็วในการรับส่งข้อมูล
Serial.print(“Hello Word”) คือ การสั่งพิมพ์ตัวอักษรที่มีชื่อว่า Hello Word ให้แสดงออกผ่านทาง Serial Monitor
void setup() {
Serial.begin(9600);
Serial.print("Hello Word");
}
void loop() {
}
ผลลัพท์ที่ได้ แสดงออกทาง Serial Monitor ดังรูป
การทำงาน ฟังก์ชัน Loop และ อธิบาย code
- การทำงานจะพิมพ์ Hello Word ออกทาง Serial Monitor เรื่อยๆ ทุกๆ 1วินาที
- อธิบาย code
Serial.println(“Hello Word”) คือการสั่งพิมพ์ตัวอักษรที่มีชื่อว่า Hello Word ให้แสดงออกผ่านทาง Serial Monitor
delay(1000) คือการหน่วงเวลา 1000ms = 1 s หรือ 1วินาที
- การทำงานจะพิมพ์ Hello Word ออกทาง Serial Monitor เรื่อยๆ ทุกๆ 1วินาที
- อธิบาย code
Serial.println(“Hello Word”) คือการสั่งพิมพ์ตัวอักษรที่มีชื่อว่า Hello Word ให้แสดงออกผ่านทาง Serial Monitor
delay(1000) คือการหน่วงเวลา 1000ms = 1 s หรือ 1วินาที
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hello Word");
delay(1000);
}
https://giphy.com/gifs/5dUwDfGnmjF9bk22sr
TIP : คำสั่ง Serial.print และ Serial.println ต่างกันยังไง
Serial.print คือการพิมพ์ตัวอักษรชุดต่อกัน
Serial.println คือการพิมพ์ชุดตัวอักษรและขึ้นบรรทัดใหม่
TIP : คำสั่ง Serial.print และ Serial.println ต่างกันยังไง
Serial.print คือการพิมพ์ตัวอักษรชุดต่อกัน
Serial.println คือการพิมพ์ชุดตัวอักษรและขึ้นบรรทัดใหม่
ไม่มีความคิดเห็น:
แสดงความคิดเห็น