การใช้งาน Arduino เบื้องต้น

การเขียนโปรแกรมเบื้องต้นกับ 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 UNO เบื้องต้น


Arduino UNO R3
Arduino เป็นบอร์ดไมโครคอนโทรเลอร์ตระกูล AVR ที่มีการพัฒนาแบบ Open Source ตัวบอร์ดถูกออกแบบมาให้ใช้งานง่ายจึงเหมาะสำหรับผู้ที่เริ่มศึกษาการเขียนโปรแกรม
Arduino ต้องใช้โปรแกรมในการเขียน
สามารถโหลดโปรแกรมได้ที่ 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 และ ฟังก์ชัน Loop
  • ก่อนจะทำการเขียนโปรแกรมจะต้องทำการตั้งค่า Port ให้ถูกต้องก่อน ดังรูป

ทำการเลือก Board ให้เป็น Arduino/Gernuino Uno กรณีที่ใช้ Board Arduino Uno R3 ตั้งค่าดังรูป

เมื่อเขียนโปรแกรมเสร็จแล้ว สังเกตที่วงสีแดงจุดที่ 1 และ จุดที่ 2
- จุดที่ 1 คือ การตรวจสอบการเขียนโปรแกรมว่าถูกต้องหรือไม่ ถ้าไม่ถูกต้องโปรแกรมจะมีการแจ้ง เตือน error ขึ้นมา
- จุดที่ 2 คือ การอัพโหลดโค้ดที่เราเขียนลงไปในตัว Board Arduino ถ้าเกิดไม่มีอะไรผิดพลาด ระบบจะทำการแจ้งเตือน ดังรูปที่


การทำงาน ฟังก์ชัน Setup และ อธิบาย code
การทำงานจะทำการพิมพ์ 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วินาที

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 คือการพิมพ์ชุดตัวอักษรและขึ้นบรรทัดใหม่

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

ComputerNetwork

ลักษณะรายวิชา รหัสและชื่อวิชา : 05-051-202 เครือข่ายคอมพิวเตอร์เบื้องต้น Introduction to Computer Network สภาพรายวิชา : วิชาเอกเลื...