2024 Arduino ทำไม output ออกเป น ภาษาไรไม ร

ภาษาซีของ 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

การต่อวงจรภายในแผ่นโพโตบอร์ด (Breadboard) จะเป็นดังรูปกล่าวคือ ด้านบนและด้านล่างจะใช้สำหรับต่อไปเลี้ยงวงจรซึ่งวงจรด้านล่างจะต่อถึงกันทั้งแถว ส่วนการต่อวงจรด้านใน จะต่อถึงกันตามแนวตั้งดังภาพ

2024 Arduino ทำไม output ออกเป น ภาษาไรไม ร

และรูปด้านล่างคือรูปของการต่อวงจรด้วยอุปกรณ์ต่างๆบน Breadboard การต่อไม่จำเป็นต้องต่อตามภาพ สามารถจะตอเป็นรูปแบบไหนก็ได้ ขอเพียงให้ถูกต้องตามวงจร ก็จะสามารถทำงานได้เช่นเดียวกัน

2024 Arduino ทำไม output ออกเป น ภาษาไรไม ร

Arduino UNO มีขาที่เป็นแบบดิจิตอลให้เราใช้งานได้เบื้องต้นอยู่ 13 ขา ในกรอบสีเหลี่ยมสีแดงตามที่เห็นในรูปด้านล่าง

2024 Arduino ทำไม output ออกเป น ภาษาไรไม ร

ขาดิจิตอลของ Arduino สามารถส่งค่าที่เป็นดิจิตอลออกมาได้ โดยสัญญาณดิจิตอลนั้นถ้าอธิบายให้เข้าใจง่ายๆ มีอยู่ 2 รูปแบบคือ HIGH (มีไฟ) และ LOW (ไม่มีไฟ)

• pinMode(xx, OUTPUT); คือการตั้งค่าให้ให้ขาอะไรเป็นเอาท์พุท เช่น ขา 11 , 12 , 13 เป็นต้น

• digitalWrite() คือคำสั่งที่ใช้ควบคุมการจ่ายไฟ สำหรับแบบ Digital จะมีอยู่ 2 ค่าคือ HIGH (มีไฟ) และ LOW (ไม่มีไฟ)

• delay() คือคำสั่งที่ใช้หน่วงเวลา หรือนับเวลานั่นเองโดยจะมีหน่วยเป็น มิลลิวินาที (1 วินาที = 1000 มิลลิวินาที) 500 จึงเท่ากับ ครึ่งวินาที

เปิดโปรแกรม Arduino (IDE) เขียน โค้ดดังนี้

void setup()

{

pinMode(11, OUTPUT);

pinMode(12, OUTPUT);

pinMode(13, OUTPUT);

}

void loop()

{

digitalWrite(11, HIGH);

delay(500);

digitalWrite(11, LOW);

delay(500);

digitalWrite(12, HIGH);

delay(500);

digitalWrite(12, LOW);

delay(500);

digitalWrite(13, HIGH);

delay(500);

digitalWrite(13, LOW);

delay(500);

}

เมื่อเขียนเสร็จแล้วให้เรากด Upload เพื่อตรวจสอบโค้ดโปรแกรมที่เราเขียนว่าถูกต้องหรือไม่พร้อมทั้งส่งโค้ดโปรแกรมที่เราเขียนไปยังบอร์ด Arduino UNO ผ่านทางสาย USB

2024 Arduino ทำไม output ออกเป น ภาษาไรไม ร

ถ้าวงจรที่เราต่ออยู่ถูกต้อง จะพบว่าหลอด LED ที่เราต่อนั้นสว่าง และ กระพริบ เรียงกันตามลำดับ (ถ้า LED ไฟไม่ติด .ให้ตรวจสอบการต่อวงจร หรือ ลองกลับขั้ว LED ซึ่งอาจจะต่อผิดอยู่)

2024 Arduino ทำไม output ออกเป น ภาษาไรไม ร

และในหัวข้อนี้มาเรียนรู้ตัวแปรภาษา C เพิ่มเติมด้วยครับ

ตัวแปร (Variables) จะเป็นชื่อที่ใช้ในการบอกจำนวนหรือปริมาณ ซึ่งสามารถที่จะทำการเปลี่ยนแปลงจำนวนได้ด้วยโปรแกรมคอมพิวเตอร์ การตั้งชื่อตัวแปร จะต้องตั้งชื่อให้แตกต่างไปจากชื่อของตัวแปรอื่นๆ ยกตัวอย่างชื่อของตัวแปร ได้แก่ x, y, peter, num_of_points และ streetnum เป็นต้น โดยปกติการเขียนโปรแกรมที่ดี ควรจะตั้งชื่อตัวแปรให้สอดคล้องกับการทำงานหรือหน้าที่ของตัวแปรนั้นๆ เพราะเมื่อถึงเวลาต้องมาทำการปรับปรุงแก้ไขโปรแกรม จะสามารถทำได้โดยไม่ยากนัก

int เป็นชนิดตัวแปรที่สามารถแทนค่าจำนวนเต็มได้ทั้งบวกและลบ

ดังนั้นเราจะลองใช้ ตัวแปร int แทนขาดิจิตอลต่างๆ ของ บอร์ด Arduino UNO เช่น

int LED1 = 13;

int คือประกาศตัวแปรเป็นชนิดจำนวนเต็ม และให้ชื่อตัวแปรว่า LED1 และกำหนดค่าให้เป็น 13 ด้วย

จากนั้น นำโค้ดเดิมด้านบนมาแก้ไขโค้ดดังนี้

int LED1 = 13; //เพิ่มเข้ามา เพื่อ ประกาศตัวแปร ให้ LED1 แทนด้วยตัวเลข 13 int LED2 = 12; //เพิ่มเข้ามา เพื่อ ประกาศตัวแปร ให้ LED2 แทนด้วยตัวเลข 12 int LED3 = 11; //เพิ่มเข้ามา เพื่อ ประกาศตัวแปร ให้ LED3 แทนด้วยตัวเลข 11

void setup() { pinMode(LED3, OUTPUT); //เปลี่ยนเลข 11 เป็น LED3 pinMode(LED2, OUTPUT); //เปลี่ยนเลข 12 เป็น LED2 pinMode(LED1, OUTPUT); //เปลี่ยนเลข 13 เป็น LED1 }

void loop() { digitalWrite(LED3, HIGH); //เปลี่ยนเลข 11 เป็น LED3 delay(500); digitalWrite(LED3, LOW); //เปลี่ยนเลข 11 เป็น LED3 delay(500);

digitalWrite(LED2, HIGH); //เปลี่ยนเลข 12 เป็น LED2 delay(500); digitalWrite(LED2, LOW); //เปลี่ยนเลข 12 เป็น LED2 delay(500);

digitalWrite(LED1, HIGH); //เปลี่ยนเลข 13 เป็น LED1 delay(500); digitalWrite(LED1, LOW); //เปลี่ยนเลข 13 เป็น LED1 delay(500); }

// (เครื่องหมายทับสองอัน) สิ่งที่พิมพ์ตามมาในบรรทัดนั้น จะไม่ถูกนำมาแปลภาษาเพื่ออัพโหลดให้กับบอร์ด จึงใช้เขียนอธิบายการทำงาน หรือ บันทึกช่วยจำ ต่างๆเป็นต้น

Upload โปรแกรมลงบอร์ด Arduino UNO อีกครั้ง

2024 Arduino ทำไม output ออกเป น ภาษาไรไม ร

ก็จะเห็นการทำงานของวงจร ติด-ดับของหลอดไฟ LED ทำงานเหมือนกับโปรแกรมแรก

แต่.. ข้อดีของการเขียนโปรแกรม แบบมีตัวแปร คือ เมื่อเราต้องการแก้ไขการต่อวงจรของเรา เช่น ต้องการแก้ไข วงจร จาก ขาดิจิตอล จาก ขา 13 เป็น ขา 5 เมื่อเราย้ายสาย การต่อวงจรเรียบร้อยแล้ว เราก็เพียงไป แก้ไข ค่าตัวแปร

int LED1 = 13;

เป็น

int LED1 = 5;

ซึ่งเป็นการแก้ไขเพียงจุดเดียว โปรแกรมก็จะทำงานตามความต้องการของเรา ต่างจากการเขียนแบบแรก ซึงต้องไปแก้ทุกจุดที่ เป็น ขา 13 และ ยังลดความผิดพลาดในการแก้ไขโปรแกรมไม่ครบทุกจุดอีกด้วย