หน่วยที่ 3
ชุดคำสั่งไมโครคอนโทรเลอร์ Arduino
1. ชุดคำสั่งที่ใช้ในการเขียนโปรแกรมไมโครคอนโทรลเลอร์ Arduino
การเขียนโปรแกรมไมโครคอนโทรลเลอร์ Arduino สามารถเขียนได้ทั้งภาษาแอสเซมบลี และภาษาระดับสูงได้แก่ ภาษาซี ขึ้นอยู่กับว่าผู้พัฒนาโปรแกรมเลือกใช้ภาษาใดมาใช้สำหรับเขียนโปรแกรมเพื่อควบคุมการทำงานของไมโครคอนโทรลเลอร์ Arduino
2. ภาษาแอสเซมบลีสำหรับไมโครคอนโทรลเลอร์ Arduino
ภาษาแอสเซมบลีจัดจัดเป็นภาษาในระดับล่าง เป็นภาษาที่มี ความใกล้เคียงกับภาษาเครื่องและฮาร์ดแวร์ของซีพียู โครงสร้างของภาษา แอสเซมบลีสำหรับไมโครคอนโทรลเลอร์ Arduino ไม่แตกต่างจากภาษา แอสเซมบลีของสถาปัตยกรรมไมโครคอนโทรลเลอร์อื่นๆ ส่วนการเขียนโปรแกรมภาษาแอสเซมบลีต้องทำการใช้ชุดคำสั่งของซีพียูเพื่อเข้าถึงหน่วยความจำและข้อมูลในรีจิสเตอร์ซึ่งมีโดยตรง ส่งผลให้ภาษา แอสเซมบลีมีความยุ่งยากในการใช้งานมากกว่าภาษาระดับสูง
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
โครงสร้างภาษาซีของไมโครคอนโทรลเลอร์ Arduino
โครงสร้างภาษาซีของไมโครคอนโทรลเลอร์ Arduino ใช้รูปแบบการเขียนโปรแกรมของภาษา C++ แต่ละโปรแกรมต้องมีฟังก์ชั่นหลักอย่างน้อย 2 ฟังก์ชั่น ได้แก่
1. ฟังก์ชั่น setup() เป็นฟังก์ชั่นการกำหนดค่าต่างๆ ในส่วนนี้มีการกำหนดค่าเพียงครั้งเดียวเท่านั้น
2. ฟังก์ชั่น loop () เป็นส่วนในการเขียนโปรแกรมและสั่งให้โปรแกรมทำงาน ซึ่งมีการทำงานเป็นแบบวนลูปไปเรื่อยๆ
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
3.1 คำสั่งการควบคุม เป็นคำสั่งให้ไมโครคอนโทรลเลอร์ทำงานตามเงื่อนไข
- คำสั่ง if เป็นคำสั่งในการตรวจสอบเงื่อนไขการทำงานของโปรแกรม ถ้าเงื่อนไขเป็นจริงให้ทำงานตามคำสั่งที่กำหนดนั้น
- คำสั่ง if...else เป็นคำสั่งกำหนดเงื่อนไขการทำงานของโปรแกรม โดยมี 2 เงื่อนไข ถ้าเงื่อนไขเป็นจริงทำงานตามคำสั่งที่กำหนดแบบหนึ่ง ถ้าเงื่อนไขเป็นเท็จทำงานตามคำสั่งที่กำหนด อีกแบบหนึ่ง
- คำสั่ง for เป็นคำสั่งให้โปรแกรมทำงานซ้ำตามจำนวนรอบที่ต้องการ
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
- คำสั่ง switch case เป็นคำสั่งเพื่อกำหนดการทำงานของโปรแกรมหลายๆ เงื่อนไข ถ้าตัวแปรที่กำหนดตรงกับเงื่อนไขนั้นๆ ทำให้โปรแกรมทำงานตามที่กำหนดไว้แต่และเงื่อนไข
- คำสั่ง while เป็นคำสั่งทำซ้ำแบบวนรอบ ถ้าเงื่อนไขเป็นจริงโปรแกรมทำงานตามคำสั่งที่เขียนไว้ในวงเล็บปีกกา แต่ถ้าเงื่อนไขเป็นเท็จโปรแกรมจบการทำงาน
- คำสั่ง do...while เป็นคำสั่งทำซ้ำแบบวนรอบ โดยมีการทำงานตรงกันข้ามกับคำสั่ง while คือทำงานตามคำสั่งที่เขียนไว้ในวงเล็บปีกกา แล้วจึงมาตรวจสอบเงื่อนไข แต่ถ้าเงื่อนไขเป็นเท็จโปรแกรมจบการทำงาน
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
- คำสั่ง break เป็นคำสั่งใช้ร่วมกับคำสั่งการทำงานแบบวนรอบ
- คำสั่ง continue เป็นคำสั่งใช้สำหรับข้ามการทำงานของคำสั่งถัดไป
- คำสั่ง return เป็นคำสั่งจบการทำงานในโปรแกรมย่อย
- คำสั่ง goto เป็นคำสั่งกระโดดโดยไม่มีเงื่อนไขไปยังตำแหน่งที่กำหนด โดยอ้างถึงตำแหน่ง Label ที่กระโดดไป
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
3.2 ข้อกำหนดของไวยากรณ์ เป็นกฎเกณฑ์ ในการสร้างประโยคขึ้นมาอธิบายความหมายของโปรแกรม
- เครื่องหมาย ; (เซมิโคล่อน) เป็นการจบคำสั่ง ในบรรทัดนั้นๆ
- เครื่องหมาย { } (วงเล็บปีกกา) เป็นการกำหนดบล็อกของคำสั่ง ใช้กับคำสั่ง if, else, while หรือ for
- เครื่องหมาย // (หมายเหตุบรรทัดเดียว) เป็นส่วนของผู้เขียนโปรแกรมอธิบายเพิ่มเติม ในคำสั่งต่างๆ ว่าโปรแกรมทำงานอย่างไรในแต่ละบรรทัด
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
- เครื่องหมาย /* */ (หมายเหตุหลายบรรทัด) เป็นส่วนของผู้เขียนโปรแกรมอธิบายเพิ่มเติม ในคำสั่งต่างๆ ว่าโปรแกรมทำงานอย่างไรสามารถอธิบายได้หลายบรรทัด
- เครื่องหมาย #define เป็นคำสั่งในการกำหนดค่าคงที่ ให้กับโปรแกรม
- เครื่องหมาย #include เป็นคำสั่งให้นำไฟล์อื่นเข้ามาร่วมกับไฟล์โปรแกรมหลัก
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
3.3 การดำเนินการทางคณิตศาสตร์ เป็นเครื่องหมายทางคณิตศาสตร์ ในการเขียนโปรแกรม เพื่อหาผลลัพธ์จากการคำนวณซึ่งสามารถกระทำกับข้อมูลได้หลายรูปแบบ
- เครื่องหมาย + เป็นการบวกของตัวถูกกระทำสองตัว
- เครื่องหมาย – เป็นการลบของตัวถูกกระทำสองตัว
- เครื่องหมาย * เป็นการคูณของตัวถูกกระทำสองตัว
- เครื่องหมาย / เป็นการหารของตัวถูกกระทำสองตัว
- เครื่องหมาย % เป็นการหารเอาเศษ ใช้หาค่าเศษที่ได้จากการหาร
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
3.4 การดำเนินการเปรียบเทียบ เป็นเครื่องหมายที่ใช้ในการเปรียบเทียบทางคณิตศาสตร์ มีเครื่องหมายดังต่อไปนี้
- เครื่องหมาย == เป็นการเปรียบเทียบเท่ากับ
- เครื่องหมาย != เป็นการเปรียบเทียบไม่เท่ากับ
- เครื่องหมาย < เป็นการเปรียบเทียบน้อยกว่า
- เครื่องหมาย > เป็นการเปรียบเทียบมากกว่า
- เครื่องหมาย <= เป็นการเปรียบเทียบน้อยกว่าหรือเท่ากับ
- เครื่องหมาย >= เป็นการเปรียบเทียบมากกว่าหรือเท่ากับ
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
3.5 การดำเนินการทางตรรกะ เป็นเครื่องหมายที่ใช้เชื่อมเงื่อนไข 2 เงื่อนไข หรือมากกว่า เพื่อให้การเปรียบเทียบมีความละเอียดมากขึ้น โดยใช้สัญลักษณ์แทนในแต่ละเครื่องหมาย มีเครื่องหมายดังต่อไปนี้
- เครื่องหมาย && ให้ค่าเป็นจริง เมื่อผลการเปรียบเทียบค่าทั้งสองเป็นจริงทั้งคู่
- เครื่องหมาย || ให้ค่าเป็นจริง เมื่อผลการเปรียบเทียบค่าทั้งสองเป็นจริง ทั้งคู่ หรือตัวแปรใดตัวหนึ่งเป็นจริง
- เครื่องหมาย ! ให้ค่าเป็นจริง เมื่อผลการเปรียบเทียบเป็นเท็จ
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
3.6 การดำเนินการระดับบิต เป็นนำค่าแต่ละบิตของตัวแปรเดียวหรือ 2 ตัวมากระทำกันในระดับบิต
- เครื่องหมาย & เป็นการแอนด์ระดับบิต
- เครื่องหมาย | เป็นการออร์ระดับบิต
- เครื่องหมาย ^ เป็นการเอ็กคลูซีฟออร์ระดับบิต
- เครื่องหมาย ~ เป็นการน็อตระดับบิต
- เครื่องหมาย << เป็นการเลื่อนบิตไปทางซ้าย
- เครื่องหมาย >> เป็นการเลื่อนบิตไปทางขวา
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
3.7 ตัวดำเนินการ เป็นเครื่องหมายทางคณิตศาสตร์ของตัวแปรเดียว เพื่อหาผลลัพธ์จากการคำนวณนั้น
เครื่องหมาย ++, เครื่องหมาย -- , เครื่องหมาย +=, เครื่องหมาย -=
เครื่องหมาย *=, เครื่องหมาย /= , เครื่องหมาย %=, เครื่องหมาย &=
เครื่องหมาย |=, เครื่องหมาย ^=, เครื่องหมาย <<=, เครื่องหมาย >>=
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
3.7 ตัวดำเนินการ เป็นเครื่องหมายทางคณิตศาสตร์ของตัวแปรเดียว เพื่อหาผลลัพธ์จากการคำนวณนั้น
เครื่องหมาย ++, เครื่องหมาย -- , เครื่องหมาย +=, เครื่องหมาย -=
เครื่องหมาย *=, เครื่องหมาย /= , เครื่องหมาย %=, เครื่องหมาย &=
เครื่องหมาย |=, เครื่องหมาย ^=, เครื่องหมาย <<=, เครื่องหมาย >>=
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
4. ตัวแปร เป็นชื่อเรียกแทนพื้นที่เก็บข้อมูลในหน่วยความจำของไมโครคอนโทรลเลอร์
4.1 ค่าคงที่ เป็นคำสั่งข้อความที่กำหนดไว้ในโปรแกรม Arduino
- คำสั่ง HIGH/LOW แทนสานะลอจิก “1” กับลอจิก “0”
- คำสั่ง INPUT/OUTPUT ใช้สำหรับกำหนดค่าอินพุตกับเอาต์พุต
- คำสั่ง true/false เป็นค่าคงที่แบบบูลีน โดย true แทนสภาวะค่าใดๆที่ไม่ใช่ 0 ถือว่า เป็นจริง ส่วน false มีค่าเป็น 0 หรือเป็นเท็จ
- คำสั่ง integer constants เป็นค่าคงที่ของเลขจำนวนเต็ม
- คำสั่ง floating point constants เป็นค่าคงที่ของเลขทศนิยม
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
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 ตัวแปรหลายตัว ที่ถูกเก็บรวมไว้ในตัวแปรชื่อเดียวกัน
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
5. ชุดคำสั่ง เป็นชุดคำสั่งในการเขียนโปรแกรมโดยมีคำสั่งต่างๆ ดังนี้
5.1 คำสั่งดิจิตอล อินพุต/เอาต์พุต
- คำสั่ง pinMode() เป็นการกำหนดพอร์ตเป็นอินพุตหรือเอาต์พุต
- คำสั่ง digitalWrite() เป็นการเขียนข้อมูลออกพอร์ตที่กำหนด
- คำสั่ง digitalRead() เป็นการอ่านข้อมูลเข้าพอร์ตที่กำหนด
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
5.2 คำสั่งอนาล็อก อินพุต/เอาต์พุต
- คำสั่ง analogReference() เป็นการกำหนดค่าแรงดันอ้างอิงที่ใช้สำหรับอนาล็อกอินพุต
- คำสั่ง analogRead() เป็นการอ่านแรงดันไฟฟ้าแบบอนาล็อกและแปลงเป็นจำนวนเต็มมีค่าระหว่าง 0 ถึง 1023
- คำสั่ง analogWrite() เป็นการใช้ PWM เขียนค่าออกทางพอร์ตที่กำหนด
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
5.3 คำสั่งเวลา
- คำสั่ง millis() เป็นการหน่วงเวลามีหน่วยเป็นมิลลิวินาทีของ Arduino ทันทีที่มีไฟเลี้ยงเข้า Arduino
- คำสั่ง micros() เป็นการหน่วงเวลามีหน่วยเป็นไมโครวินาทีของ Arduino ทันทีที่มีไฟเลี้ยงเข้า Arduino
- คำสั่ง delay() เป็นการหน่วงเวลาตามค่าที่กำหนด มีหน่วยเป็นมิลลิวินาที
- คำสั่ง delayMicroseconds() เป็นการหน่วงเวลาตามค่าที่กำหนด มีหน่วยเป็นไมโครวินาที
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
5.4 คำสั่งคณิตศาสตร์
- คำสั่ง min() เป็นการหาค่าต่ำสุด
- คำสั่ง max() เป็นการหาค่ามากสุด
- คำสั่ง abs() เป็นการหาค่าสมบูรณ์ของตัวแปร
- คำสั่ง constrain() เป็นการตรวจสอบและการปรับค่าตัวแปรที่กำหนด
- คำสั่ง map() เป็นการปรับค่าตัวแปรจากเดิมให้อยู่ระหว่างค่าที่กำหนด
- คำสั่ง pow() เป็นการหาค่าของตัวเลขยกกำลัง
- คำสั่ง sqrt() เป็นการหาค่าของรากที่สองของตัวเลข
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
5.5 คำสั่งตรีโกณมิติ
- คำสั่ง sin() เป็นการคำนวณหาค่า sin
- คำสั่ง cos() เป็นการคำนวณหาค่า cos
- คำสั่ง tan() เป็นการคำนวณหาค่า tan
5.6 คำสั่งสุ่มตัวเลข
- คำสั่ง randomSeed() เป็นการกำหนดค่าเริ่มต้นของฟังชั่น random
- คำสั่ง random() เป็นการสุ่มค่าตัวเลขระหว่างตัวเลขที่กำหนด
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
5.7 คำสั่งบิต และไบต์
- คำสั่ง lowByte() เป็นตัวแปรของไบต์ต่ำสุด
- คำสั่ง highByte() เป็นตัวแปรของไบต์สูงสุด
- คำสั่ง bitRead() เป็นการอ่านบิตของตัวแปร
- คำสั่ง bitWrite() เป็นการเขียนบิตของตัวแปร
- คำสั่ง bitSet() เป็นการตั้งบิตของตัวแปรเท่ากับ 1
- คำสั่ง bitClear() เป็นการตั้งบิตของตัวแปรเท่ากับ 0
- คำสั่ง bit() เป็นการตั้งค่าบิตตามค่าที่กำหนด
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
5.8 คำสั่งอินเตอร์รัพท์ภายนอก
- คำสั่ง attachInterrupt() เป็นคำสั่งกำหนด และสร้างอินเตอร์รัพท์
- คำสั่ง detachInterrupt() เป็นคำสั่งปิดการรับอินเตอร์รัพท์
5.9 คำสั่งการอินเตอร์รัพท์
- คำสั่ง interrupts() เป็นการเปิดการใช้งานอินเตอร์รัพท์
- คำสั่ง noInterrupts() เป็นการปิดการใช้งานอินเตอร์รัพท์
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
5.10 คำสั่งการติดต่อสื่อสาร
- คำสั่ง Serial.begin() เป็นการกำหนดอัตราการส่งข้อมูล
- คำสั่ง Serial.end() เป็นการปิดใช้งานการสื่อสารแบบอนุกรม
- คำสั่ง Serial.available() เป็นการตรวจสอบการรับข้อมูลจากการสื่อสารแบบอนุกรม
- คำสั่ง Serial.read() เป็นการอ่านข้อมูลจากการสื่อสารแบบอนุกรมที่ เข้ามา
- คำสั่ง Serial.peek() เป็นการส่งกลับไบต์ต่อไปของข้อมูลการสื่อสารแบบอนุกรม
3. ภาษาซีสำหรับไมโครคอนโทรลเลอร์ Arduino
5.10 คำสั่งการติดต่อสื่อสาร
- คำสั่ง Serial.flush() เป็นการลบข้อมูลทั้งหมดในบัฟเฟอร์
- คำสั่ง Serial.print() เป็นการพิมพ์ข้อมูลไปยังพอร์ตอนุกรม
- คำสั่ง Serial.println() เป็นการพิมพ์ข้อมูลไปยังพอร์ตอนุกรม และขึ้นบรรทัดใหม่
- คำสั่ง Serial.write() เป็นการส่งข้อมูลไบต์ไปยังพอร์ตอนุกรม