1 of 27

หน่วยที่ 3

ชุดคำสั่งไมโครคอนโทรเลอร์ Arduino

2 of 27

1. ชุดคำสั่งที่ใช้ในการเขียนโปรแกรมไมโครคอนโทรลเลอร์ Arduino

การเขียนโปรแกรมไมโครคอนโทรลเลอร์ Arduino สามารถเขียนได้ทั้งภาษาแอสเซมบลี และภาษาระดับสูงได้แก่ ภาษาซี ขึ้นอยู่กับว่าผู้พัฒนาโปรแกรมเลือกใช้ภาษาใดมาใช้สำหรับเขียนโปรแกรมเพื่อควบคุมการทำงานของไมโครคอนโทรลเลอร์ Arduino

3 of 27

2. ภาษาแอสเซมบลีสำหรับไมโครคอนโทรลเลอร์ Arduino

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

4 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

โครงสร้างภาษาซีของไมโครคอนโทรลเลอร์ Arduino

โครงสร้างภาษาซีของไมโครคอนโทรลเลอร์ Arduino ใช้รูปแบบการเขียนโปรแกรมของภาษา C++ แต่ละโปรแกรมต้องมีฟังก์ชั่นหลักอย่างน้อย 2 ฟังก์ชั่น ได้แก่

1. ฟังก์ชั่น setup() เป็นฟังก์ชั่นการกำหนดค่าต่างๆ ในส่วนนี้มีการกำหนดค่าเพียงครั้งเดียวเท่านั้น

2. ฟังก์ชั่น loop () เป็นส่วนในการเขียนโปรแกรมและสั่งให้โปรแกรมทำงาน ซึ่งมีการทำงานเป็นแบบวนลูปไปเรื่อยๆ

5 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

3.1 คำสั่งการควบคุม เป็นคำสั่งให้ไมโครคอนโทรลเลอร์ทำงานตามเงื่อนไข

- คำสั่ง if เป็นคำสั่งในการตรวจสอบเงื่อนไขการทำงานของโปรแกรม ถ้าเงื่อนไขเป็นจริงให้ทำงานตามคำสั่งที่กำหนดนั้น

- คำสั่ง if...else เป็นคำสั่งกำหนดเงื่อนไขการทำงานของโปรแกรม โดยมี 2 เงื่อนไข ถ้าเงื่อนไขเป็นจริงทำงานตามคำสั่งที่กำหนดแบบหนึ่ง ถ้าเงื่อนไขเป็นเท็จทำงานตามคำสั่งที่กำหนด อีกแบบหนึ่ง

- คำสั่ง for เป็นคำสั่งให้โปรแกรมทำงานซ้ำตามจำนวนรอบที่ต้องการ

6 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

- คำสั่ง switch case เป็นคำสั่งเพื่อกำหนดการทำงานของโปรแกรมหลายๆ เงื่อนไข ถ้าตัวแปรที่กำหนดตรงกับเงื่อนไขนั้นๆ ทำให้โปรแกรมทำงานตามที่กำหนดไว้แต่และเงื่อนไข

- คำสั่ง while เป็นคำสั่งทำซ้ำแบบวนรอบ ถ้าเงื่อนไขเป็นจริงโปรแกรมทำงานตามคำสั่งที่เขียนไว้ในวงเล็บปีกกา แต่ถ้าเงื่อนไขเป็นเท็จโปรแกรมจบการทำงาน

- คำสั่ง do...while เป็นคำสั่งทำซ้ำแบบวนรอบ โดยมีการทำงานตรงกันข้ามกับคำสั่ง while คือทำงานตามคำสั่งที่เขียนไว้ในวงเล็บปีกกา แล้วจึงมาตรวจสอบเงื่อนไข แต่ถ้าเงื่อนไขเป็นเท็จโปรแกรมจบการทำงาน

7 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

- คำสั่ง break เป็นคำสั่งใช้ร่วมกับคำสั่งการทำงานแบบวนรอบ

- คำสั่ง continue เป็นคำสั่งใช้สำหรับข้ามการทำงานของคำสั่งถัดไป

- คำสั่ง return เป็นคำสั่งจบการทำงานในโปรแกรมย่อย

- คำสั่ง goto เป็นคำสั่งกระโดดโดยไม่มีเงื่อนไขไปยังตำแหน่งที่กำหนด โดยอ้างถึงตำแหน่ง Label ที่กระโดดไป

8 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

3.2 ข้อกำหนดของไวยากรณ์ เป็นกฎเกณฑ์ ในการสร้างประโยคขึ้นมาอธิบายความหมายของโปรแกรม

- เครื่องหมาย ; (เซมิโคล่อน) เป็นการจบคำสั่ง ในบรรทัดนั้นๆ

- เครื่องหมาย { } (วงเล็บปีกกา) เป็นการกำหนดบล็อกของคำสั่ง ใช้กับคำสั่ง if, else, while หรือ for

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

9 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

- เครื่องหมาย /* */ (หมายเหตุหลายบรรทัด) เป็นส่วนของผู้เขียนโปรแกรมอธิบายเพิ่มเติม ในคำสั่งต่างๆ ว่าโปรแกรมทำงานอย่างไรสามารถอธิบายได้หลายบรรทัด

- เครื่องหมาย #define เป็นคำสั่งในการกำหนดค่าคงที่ ให้กับโปรแกรม

- เครื่องหมาย #include เป็นคำสั่งให้นำไฟล์อื่นเข้ามาร่วมกับไฟล์โปรแกรมหลัก

10 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

3.3 การดำเนินการทางคณิตศาสตร์ เป็นเครื่องหมายทางคณิตศาสตร์ ในการเขียนโปรแกรม เพื่อหาผลลัพธ์จากการคำนวณซึ่งสามารถกระทำกับข้อมูลได้หลายรูปแบบ

- เครื่องหมาย + เป็นการบวกของตัวถูกกระทำสองตัว

- เครื่องหมาย – เป็นการลบของตัวถูกกระทำสองตัว

- เครื่องหมาย * เป็นการคูณของตัวถูกกระทำสองตัว

- เครื่องหมาย / เป็นการหารของตัวถูกกระทำสองตัว

- เครื่องหมาย % เป็นการหารเอาเศษ ใช้หาค่าเศษที่ได้จากการหาร

11 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

3.4 การดำเนินการเปรียบเทียบ เป็นเครื่องหมายที่ใช้ในการเปรียบเทียบทางคณิตศาสตร์ มีเครื่องหมายดังต่อไปนี้

- เครื่องหมาย == เป็นการเปรียบเทียบเท่ากับ

- เครื่องหมาย != เป็นการเปรียบเทียบไม่เท่ากับ

- เครื่องหมาย < เป็นการเปรียบเทียบน้อยกว่า

- เครื่องหมาย > เป็นการเปรียบเทียบมากกว่า

- เครื่องหมาย <= เป็นการเปรียบเทียบน้อยกว่าหรือเท่ากับ

- เครื่องหมาย >= เป็นการเปรียบเทียบมากกว่าหรือเท่ากับ

12 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

3.5 การดำเนินการทางตรรกะ เป็นเครื่องหมายที่ใช้เชื่อมเงื่อนไข 2 เงื่อนไข หรือมากกว่า เพื่อให้การเปรียบเทียบมีความละเอียดมากขึ้น โดยใช้สัญลักษณ์แทนในแต่ละเครื่องหมาย มีเครื่องหมายดังต่อไปนี้

- เครื่องหมาย && ให้ค่าเป็นจริง เมื่อผลการเปรียบเทียบค่าทั้งสองเป็นจริงทั้งคู่

- เครื่องหมาย || ให้ค่าเป็นจริง เมื่อผลการเปรียบเทียบค่าทั้งสองเป็นจริง ทั้งคู่ หรือตัวแปรใดตัวหนึ่งเป็นจริง

- เครื่องหมาย ! ให้ค่าเป็นจริง เมื่อผลการเปรียบเทียบเป็นเท็จ

13 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

3.6 การดำเนินการระดับบิต เป็นนำค่าแต่ละบิตของตัวแปรเดียวหรือ 2 ตัวมากระทำกันในระดับบิต

- เครื่องหมาย & เป็นการแอนด์ระดับบิต

- เครื่องหมาย | เป็นการออร์ระดับบิต

- เครื่องหมาย ^ เป็นการเอ็กคลูซีฟออร์ระดับบิต

- เครื่องหมาย ~ เป็นการน็อตระดับบิต

- เครื่องหมาย << เป็นการเลื่อนบิตไปทางซ้าย

- เครื่องหมาย >> เป็นการเลื่อนบิตไปทางขวา

14 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

3.7 ตัวดำเนินการ เป็นเครื่องหมายทางคณิตศาสตร์ของตัวแปรเดียว เพื่อหาผลลัพธ์จากการคำนวณนั้น

เครื่องหมาย ++, เครื่องหมาย -- , เครื่องหมาย +=, เครื่องหมาย -=

เครื่องหมาย *=, เครื่องหมาย /= , เครื่องหมาย %=, เครื่องหมาย &=

เครื่องหมาย |=, เครื่องหมาย ^=, เครื่องหมาย <<=, เครื่องหมาย >>=

15 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

3.7 ตัวดำเนินการ เป็นเครื่องหมายทางคณิตศาสตร์ของตัวแปรเดียว เพื่อหาผลลัพธ์จากการคำนวณนั้น

เครื่องหมาย ++, เครื่องหมาย -- , เครื่องหมาย +=, เครื่องหมาย -=

เครื่องหมาย *=, เครื่องหมาย /= , เครื่องหมาย %=, เครื่องหมาย &=

เครื่องหมาย |=, เครื่องหมาย ^=, เครื่องหมาย <<=, เครื่องหมาย >>=

16 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

4. ตัวแปร เป็นชื่อเรียกแทนพื้นที่เก็บข้อมูลในหน่วยความจำของไมโครคอนโทรลเลอร์

4.1 ค่าคงที่ เป็นคำสั่งข้อความที่กำหนดไว้ในโปรแกรม Arduino

- คำสั่ง HIGH/LOW แทนสานะลอจิก “1” กับลอจิก “0”

- คำสั่ง INPUT/OUTPUT ใช้สำหรับกำหนดค่าอินพุตกับเอาต์พุต

- คำสั่ง true/false เป็นค่าคงที่แบบบูลีน โดย true แทนสภาวะค่าใดๆที่ไม่ใช่ 0 ถือว่า เป็นจริง ส่วน false มีค่าเป็น 0 หรือเป็นเท็จ

- คำสั่ง integer constants เป็นค่าคงที่ของเลขจำนวนเต็ม

- คำสั่ง floating point constants เป็นค่าคงที่ของเลขทศนิยม

17 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

4.2 ชนิดของข้อมูล สามารถแบ่งชนิดของข้อมูลได้ดังนี้

- void ใช้เฉพาะในการประกาศฟังก์ชั่น

- boolean มีค่าจริงหรือเท็จ

- char มีค่าตั้งแต่ -127 ถึง 127

- unsigned char มีค่าตั้งแต่ 0 ถึง 255

- byte มีค่าตั้งแต่ 0 ถึง 255

- int มีค่าตั้งแต่ -32,7678 ถึง 32,767

- unsigned int มีค่าตั้งแต่ 0 ถึง 65,555

18 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

4.2 ชนิดของข้อมูล สามารถแบ่งชนิดของข้อมูลได้ดังนี้

- word มีค่าตั้งแต่ 0 ถึง 65,555

- long มีค่าตั้งแต่ -2,147,483,648 ถึง 2,147,483,647

- unsigned long มีค่าตั้งแต่ 0 ถึง 4,294,967,295

- float มีค่าตั้งแต่ -3.4028235E+38 ถึง 3.4028235E+38

- double มีค่าตั้งแต่ -3.4028235E+38 ถึง 3.4028235E+38

- string ตัวแปรสำหรับเก็บข้อความ

- array ตัวแปรหลายตัว ที่ถูกเก็บรวมไว้ในตัวแปรชื่อเดียวกัน

19 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

5. ชุดคำสั่ง เป็นชุดคำสั่งในการเขียนโปรแกรมโดยมีคำสั่งต่างๆ ดังนี้

5.1 คำสั่งดิจิตอล อินพุต/เอาต์พุต

- คำสั่ง pinMode() เป็นการกำหนดพอร์ตเป็นอินพุตหรือเอาต์พุต

- คำสั่ง digitalWrite() เป็นการเขียนข้อมูลออกพอร์ตที่กำหนด

- คำสั่ง digitalRead() เป็นการอ่านข้อมูลเข้าพอร์ตที่กำหนด

20 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

5.2 คำสั่งอนาล็อก อินพุต/เอาต์พุต

- คำสั่ง analogReference() เป็นการกำหนดค่าแรงดันอ้างอิงที่ใช้สำหรับอนาล็อกอินพุต

- คำสั่ง analogRead() เป็นการอ่านแรงดันไฟฟ้าแบบอนาล็อกและแปลงเป็นจำนวนเต็มมีค่าระหว่าง 0 ถึง 1023

- คำสั่ง analogWrite() เป็นการใช้ PWM เขียนค่าออกทางพอร์ตที่กำหนด

21 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

5.3 คำสั่งเวลา

- คำสั่ง millis() เป็นการหน่วงเวลามีหน่วยเป็นมิลลิวินาทีของ Arduino ทันทีที่มีไฟเลี้ยงเข้า Arduino

- คำสั่ง micros() เป็นการหน่วงเวลามีหน่วยเป็นไมโครวินาทีของ Arduino ทันทีที่มีไฟเลี้ยงเข้า Arduino

- คำสั่ง delay() เป็นการหน่วงเวลาตามค่าที่กำหนด มีหน่วยเป็นมิลลิวินาที

- คำสั่ง delayMicroseconds() เป็นการหน่วงเวลาตามค่าที่กำหนด มีหน่วยเป็นไมโครวินาที

22 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

5.4 คำสั่งคณิตศาสตร์

- คำสั่ง min() เป็นการหาค่าต่ำสุด

- คำสั่ง max() เป็นการหาค่ามากสุด

- คำสั่ง abs() เป็นการหาค่าสมบูรณ์ของตัวแปร

- คำสั่ง constrain() เป็นการตรวจสอบและการปรับค่าตัวแปรที่กำหนด

- คำสั่ง map() เป็นการปรับค่าตัวแปรจากเดิมให้อยู่ระหว่างค่าที่กำหนด

- คำสั่ง pow() เป็นการหาค่าของตัวเลขยกกำลัง

- คำสั่ง sqrt() เป็นการหาค่าของรากที่สองของตัวเลข

23 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

5.5 คำสั่งตรีโกณมิติ

- คำสั่ง sin() เป็นการคำนวณหาค่า sin

- คำสั่ง cos() เป็นการคำนวณหาค่า cos

- คำสั่ง tan() เป็นการคำนวณหาค่า tan

5.6 คำสั่งสุ่มตัวเลข

- คำสั่ง randomSeed() เป็นการกำหนดค่าเริ่มต้นของฟังชั่น random

- คำสั่ง random() เป็นการสุ่มค่าตัวเลขระหว่างตัวเลขที่กำหนด

24 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

5.7 คำสั่งบิต และไบต์

- คำสั่ง lowByte() เป็นตัวแปรของไบต์ต่ำสุด

- คำสั่ง highByte() เป็นตัวแปรของไบต์สูงสุด

- คำสั่ง bitRead() เป็นการอ่านบิตของตัวแปร

- คำสั่ง bitWrite() เป็นการเขียนบิตของตัวแปร

- คำสั่ง bitSet() เป็นการตั้งบิตของตัวแปรเท่ากับ 1

- คำสั่ง bitClear() เป็นการตั้งบิตของตัวแปรเท่ากับ 0

- คำสั่ง bit() เป็นการตั้งค่าบิตตามค่าที่กำหนด

25 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

5.8 คำสั่งอินเตอร์รัพท์ภายนอก

- คำสั่ง attachInterrupt() เป็นคำสั่งกำหนด และสร้างอินเตอร์รัพท์

- คำสั่ง detachInterrupt() เป็นคำสั่งปิดการรับอินเตอร์รัพท์

5.9 คำสั่งการอินเตอร์รัพท์

- คำสั่ง interrupts() เป็นการเปิดการใช้งานอินเตอร์รัพท์

- คำสั่ง noInterrupts() เป็นการปิดการใช้งานอินเตอร์รัพท์

26 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

5.10 คำสั่งการติดต่อสื่อสาร

- คำสั่ง Serial.begin() เป็นการกำหนดอัตราการส่งข้อมูล

- คำสั่ง Serial.end() เป็นการปิดใช้งานการสื่อสารแบบอนุกรม

- คำสั่ง Serial.available() เป็นการตรวจสอบการรับข้อมูลจากการสื่อสารแบบอนุกรม

- คำสั่ง Serial.read() เป็นการอ่านข้อมูลจากการสื่อสารแบบอนุกรมที่ เข้ามา

- คำสั่ง Serial.peek() เป็นการส่งกลับไบต์ต่อไปของข้อมูลการสื่อสารแบบอนุกรม

27 of 27

3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino

5.10 คำสั่งการติดต่อสื่อสาร

- คำสั่ง Serial.flush() เป็นการลบข้อมูลทั้งหมดในบัฟเฟอร์

- คำสั่ง Serial.print() เป็นการพิมพ์ข้อมูลไปยังพอร์ตอนุกรม

- คำสั่ง Serial.println() เป็นการพิมพ์ข้อมูลไปยังพอร์ตอนุกรม และขึ้นบรรทัดใหม่

- คำสั่ง Serial.write() เป็นการส่งข้อมูลไบต์ไปยังพอร์ตอนุกรม