คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์...

51

Upload: others

Post on 11-Mar-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร
Page 2: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino

โดย ผศ.ดร เดชฤทธิ์ มณีธรรม

สงวนลิขสิทธิ์ตามกฎหมาย โดย ผศ.ดร. เดชฤทธิ์ มณีธรรม ห้ามคัดลอก ลอกเลียน ดัดแปลง ท�าซ�า้ จัดพิมพ์ หรือกระท�าอื่นใด โดยวิธีการใดๆ ในรูปแบบใดๆ ไม่ว่าส่วนหนึ่งส่วนใดของหนังสือเล่มนี้ เพื่อเผยแพร่ในสื่อทุกประเภท หรือเพื่อวัตถุประสงค์ใดๆ นอกจากจะได้รับอนุญาต

ข้อมลูทางบรรณานกุรมของหอสมดุแห่งชาติเดชฤทธิ ์มณธีรรม, คมัภร์ีการใช้งาน ไมโครคอนโทรลเลอร์ Arduino. —กรงุเทพฯ : ซเีอด็ยเูคชัน่, 2560. 1. นวิแมตกิส์. I. ชื่อเรื่อง. 004.64

ISBN (e-book) : 978-616-08-3066-4

ผลิตและจัดจ�ำหนำยโดย

1858/87-90 ถนนบางนา-ตราด แขวงบางนา เขตบางนา กรุงเทพฯ 10260 โทรศัพท์ 0-2826-8000

หากมีค�าแนะน�าหรือติชม สามารถติดต่อได้ที่ [email protected]

Page 3: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

ในกรณีที่ตองการซื้อเปนจํานวนมาก เพ่ือใชในการสอน การฝกอบรม การสงเสริมการขาย หรือเปนของขวัญพิเศษ เปนตน กรุณาติดตอสอบถามราคาพิเศษไดที่ ฝา่ยขาย บริษัท ซีเอ็ดยูเคชั่น จํากัด (มหาชน) เลขที่ 1858/87-90 ถนนบางนา-ตราด แขวงบางนา เขตบางนา กรุงเทพฯ 10260 โทรศพัท 0-2826-8222 โทรสาร 0-2826-8359

หากมีคาํแนะนําหรือติชม สามารถติดต่อได้ท่ี [email protected] คมัภีรก์ารใช้งาน ไมโครคอนโทรลเลอร ์Arduino โดย ผศ.ดร. เดชฤทธิ์ มณีธรรม

ราคา 280 บาท สงวนลิขสิทธิ์ตามกฎหมาย โดย ผศ.ดร. เดชฤทธิ ์มณีธรรม หามคัดลอก ลอกเลียน ดัดแปลง ทําซ้ํา จัดพิมพ หรือกระทําอ่ืนใด โดยวิธีการใดๆ ในรูปแบบใดๆ ไมวาสวนหนึ่งสวนใดของหนังสือเลมนี้ เพื่อเผยแพรในสื่อทุกประเภท หรือเพื่อวัตถุประสงคใดๆ นอกจากจะไดรับอนุญาต 0 4 6 - 7 9 2 - 3 0 0 6 6 7 8 9 0 5 4 3 2 1

ข้อมูลทางบรรณานุกรมของสํานักหอสมุดแห่งชาติ เดชฤทธิ์ มณีธรรม. คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino. —กรุงเทพฯ : ซีเอ็ดยูเคชั่น, 2560. 376 หนา 1. นิวแมติกส. I. ชื่อเรื่อง. 004.64

ISBN 978-616-08-3031-2 จดัพมิพแ์ละจดัจาํหน่ายโดย

เลขท่ี 1858/87-90 ถนนบางนา-ตราด แขวงบางนา เขตบางนา กรุงเทพฯ 10260 โทรศัพท 0-2826-8000 พิมพที่ บริษัท วี.พร้ินท (1991) จํากัด เลขที่ 23/71-72 หมู 1 ซอยเทียนทะเล 10 ถนนบางขนุเทียน-ชายทะเล แขวงแสมดํา เขตบางขุนเทียน กรุงเทพฯ 10150 โทรศัพท 0-2451-3010 นายวิชัย กาญจนพัฒนา ผูพิมพผูโฆษณา พ.ศ. 2561

คํานํา คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino iii

คาํนาํ

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

หนังสือ “คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino” เลมนี้ มีจุดมุงหมายที่จะพัฒนาระบบควบคุมอัตโนมัติ (Automation Control System) ตลอดจนหุนยนตอุตสาหกรรม (Industrial Robotics) ใหมีการแขงขันและพัฒนาใหทันกับโลกปจจุบัน ที่มีการแขงขันทางดานการตลาด และระบบเศรษฐกิจที่สูง ตลอดจนเพื่อรองรับอุตสาหกรรม 4.0 (Industrial 4.0) โดยจะเร่ิมตนอธิบายเกี่ยวกับไมโครคอนโทรลเลอร Arduino การควบคุมการทํางานของอินพุตและเอาตพุต การควบคุมมอเตอรอุตสาหกรรม เซ็นเซอรและระบบอัจฉริยะ ซอฟตแวรประยุกตชวยในการทํางาน และจบดวยโครงงาน โดยหนังสือเลมนี้จึงเหมาะสําหรับนักศึกษาไดใชเรียน และคนควาเพิ่มเติม ทั้งในสาขาวิศวกรรมไฟฟากําลัง วิศวกรรมอิเล็กทรอนิกส วิศวกรรมเมคคาทรอนิกส รวมถึงวิศวกรโรงงาน ตลอดจนผูสนใจในงานควบคุมดวยไมโครคอนโทรลเลอร

คุณงามความดีของหนังสือเลมนี้ ขอมอบใหกับ บิดา-มารดา ครู-อาจารย พี่ๆ นองๆ คนใกลชิด ที่ไดมีสวนรวมในการสนับสนุน และเปนกําลังใจจนหนังสือเลมนี้สําเร็จลุลวงไปดวยดี หากหนังสือเลมนี้มีความผิดพลาด ผูเขียนยินดีนอมรับ คําแนะนํา คําติชม เพื่อนําไปพัฒนาและปรับปรุงใหดีย่ิงขึ้นตอไป ดวยความเคารพย่ิง

ผศ. ดร. เดชฤทธิ์ มณีธรรม e-mail: [email protected] หรือ [email protected]

Page 4: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

สารบัญ คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino v

สารบัญ หนา คํานํา iii บทที ่1 ไมโครคอนโทรลเลอร Arduino 1 1.1 ไมโครคอนโทรลเลอร Arduino 3 1.2 ไมโครโปรเซสเซอรกับไมโครคอนโทรลเลอร 9 1.2.1 หนวยประมวลผลกลาง หรือซีพีย ู(Central Processing Unit; CPU) 10 1.2.2 หนวยความจํา (Memory Unit) 10 1.2.3 ตัวแปรและการประกาศตัวแปร 11 1.3 โครงสรางของภาษา C 12 1.3.1 ขั้นตอนและการทํางานของตัวดําเนินการในภาษา C 13 1.3.2 โครงสรางของภาษา C 15 1.3.3 คําสั่ง if แบบทางเดียว 18 1.3.4 คําสั่ง if แบบสองทาง 19 1.3.5 คําสั่ง if แบบหลายทาง 21 1.3.6 คําสั่ง for 23 1.3.7 คําสั่ง for แบบลปูซอนลูป 23 1.3.8 คําสั่ง while 24 1.3.9 คําสั่ง while แบบลูปซอนลูป 25 1.3.10 คําสั่ง do..while 26 1.3.11 คําสั่ง do..while แบบลูปซอนลูป 27 1.3.12 คําสั่ง switch 29 1.3.13 อะเรย (Array) 29 1.4 โปรแกรม Arduino IDE 31

Page 5: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

สารบัญ คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino v

สารบัญ หนา คํานํา iii บทที ่1 ไมโครคอนโทรลเลอร Arduino 1 1.1 ไมโครคอนโทรลเลอร Arduino 3 1.2 ไมโครโปรเซสเซอรกับไมโครคอนโทรลเลอร 9 1.2.1 หนวยประมวลผลกลาง หรือซีพีย ู(Central Processing Unit; CPU) 10 1.2.2 หนวยความจํา (Memory Unit) 10 1.2.3 ตัวแปรและการประกาศตัวแปร 11 1.3 โครงสรางของภาษา C 12 1.3.1 ขั้นตอนและการทํางานของตัวดําเนินการในภาษา C 13 1.3.2 โครงสรางของภาษา C 15 1.3.3 คําสั่ง if แบบทางเดียว 18 1.3.4 คําสั่ง if แบบสองทาง 19 1.3.5 คําสั่ง if แบบหลายทาง 21 1.3.6 คําสั่ง for 23 1.3.7 คําสั่ง for แบบลปูซอนลูป 23 1.3.8 คําสั่ง while 24 1.3.9 คําสั่ง while แบบลูปซอนลูป 25 1.3.10 คําสั่ง do..while 26 1.3.11 คําสั่ง do..while แบบลูปซอนลูป 27 1.3.12 คําสั่ง switch 29 1.3.13 อะเรย (Array) 29 1.4 โปรแกรม Arduino IDE 31

Page 6: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

vi คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino สารบัญ

หนา บทที ่2 การควบคุมการทํางานของอินพทุและเอาตพทุ 35 2.1 การเชื่อมตอไมโครคอนโทรลเลอร Arduino กับหลอด LED 37 2.2 การเชื่อมตอไมโครคอนโทรลเลอร Arduino กับหลอด LED 7-segment 58 2.3 การเชื่อมตอไมโครคอนโทรลเลอร Arduino กับคียสวิตซแบบแมทริกซ (Keypad) 91 2.4 การเชื่อมตอไมโครคอนโทรลเลอร Arduino กับโมดูล LCD 101 2.4.1 สวนประกอบของโมดูล LCD 101 2.4.2 การจัด Address ของ DD RAM เพ่ือเขยีนขอมูลลงโมดูล LCD 102 2.4.3 การเขียนโปรแกรมควบคุมโมดูล LCD ในโหมด 8 บติ 103 2.4.4 การเขียนโปรแกรมควบคุมโมดูล LCD ในโหมด 4 บติ 105 สรุป 115 คําถามทายบท 116 บทที ่3 การควบคุมมอเตอรอุตสาหกรรม 117 3.1 สเต็ปปงมอเตอร (Stepping Motor) 119 3.1.1 การพันขดลวดของสเต็ปปงมอเตอร 120 3.1.2 การควบคุมการหมุนของสเต็ปปงมอเตอร 122 3.1.3 การควบคุมการทํางานของสเต็ปปงมอเตอร 124 3.2 ดีซีมอเตอร หรือ มอเตอรไฟฟากระแสตรง (Direct Current Motor; DC) 165 3.2.1 ชนิดของดีซีมอเตอร 165 สรุป 182 คําถามทายบท 185 บทที ่4 เซ็นเซอรและระบบอัจฉริยะ 187 4.1 อัลตราโซนิกเซ็นเซอร (Ultrasonic Sensor) 190 4.2 เซ็นเซอรวัดอุณหภูมิ (Temperature Sensor) 198 4.2.1 เทอรโมคัปเปล (Thermocouple) 198 4.2.2 อารทีดีเซ็นเซอร (RTD Sensor) 199

สารบัญ คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino vii

หนา

4.3 บลูทูธโมดูลเซ็นเซอร (XBee Module Sensor) 204 4.4 เซ็นเซอรไรสาย (Wireless Sensor) 207 4.5 เซ็นเซอรวัดมุม (Gyroscope Sensor) 221 4.6 การควบคุมดีซีมอเตอรและเอนโคเดอรดวยระบบ PID 228 4.6.1 การควบคุมแบบอัตราสวน หรือ P-Control (Proportional Control) 229 4.6.2 การควบคุมแบบอินทิกรัล หรือ I-Control (Integral Control) 231 4.6.3 การควบคุมแบบอนุพันธ หรือ D-Control (Derivative Control) 234 4.6.4 การควบคุมแบบ PI 235 4.6.5 การควบคุมแบบ PD 237 4.6.6 การควบคุมแบบ PID 239 4.7 เพนดูลัมผกผัน (Inverted Pendulum) 249 สรุป 258 คําถามทายบท 259 บทที ่5 ซอฟตแวรประยุกตชวยในการทาํงาน 261 5.1 ซอฟตแวร LabVIEW กับ Arduino IDE 263 5.1.1 การโหลด Firmware จาก LINX Firmware Wizard 265 5.1.2 การโหลด Firmware จาก LIFA Base (Tookit) 270 5.1.3 การเขียน LabVIEW 271 5.2 ซอฟตแวรภาษา C# กับ Arduino IDE 276 5.2.1 การควบคุมหลอดไฟฟา LED ใหติดและดับ (ON/OFF) ดวย C# 277 5.2.2 การควบคุมการหมุนของอารซีเซอรโวมอเตอร ดวย C# 283 5.3 ซอฟตแวรวิชวลเบสิก (Visual Basic) กับ Arduino IDE 290 5.3.1 การควบคุมหลอดไฟฟา LED ใหติดและดับ (ON/OFF) ดวย VB 291 5.3.2 การควบคุมการหมุนของอารซีเซอรโวมอเตอร ดวย VB 297

Page 7: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

vi คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino สารบัญ

หนา บทที ่2 การควบคุมการทํางานของอินพทุและเอาตพทุ 35 2.1 การเชื่อมตอไมโครคอนโทรลเลอร Arduino กับหลอด LED 37 2.2 การเชื่อมตอไมโครคอนโทรลเลอร Arduino กับหลอด LED 7-segment 58 2.3 การเชื่อมตอไมโครคอนโทรลเลอร Arduino กับคียสวิตซแบบแมทริกซ (Keypad) 91 2.4 การเชื่อมตอไมโครคอนโทรลเลอร Arduino กับโมดูล LCD 101 2.4.1 สวนประกอบของโมดูล LCD 101 2.4.2 การจัด Address ของ DD RAM เพ่ือเขยีนขอมูลลงโมดูล LCD 102 2.4.3 การเขียนโปรแกรมควบคุมโมดูล LCD ในโหมด 8 บติ 103 2.4.4 การเขียนโปรแกรมควบคุมโมดูล LCD ในโหมด 4 บติ 105 สรุป 115 คําถามทายบท 116 บทที ่3 การควบคุมมอเตอรอุตสาหกรรม 117 3.1 สเต็ปปงมอเตอร (Stepping Motor) 119 3.1.1 การพันขดลวดของสเต็ปปงมอเตอร 120 3.1.2 การควบคุมการหมุนของสเต็ปปงมอเตอร 122 3.1.3 การควบคุมการทํางานของสเต็ปปงมอเตอร 124 3.2 ดีซีมอเตอร หรือ มอเตอรไฟฟากระแสตรง (Direct Current Motor; DC) 165 3.2.1 ชนิดของดีซีมอเตอร 165 สรุป 182 คําถามทายบท 185 บทที ่4 เซ็นเซอรและระบบอัจฉริยะ 187 4.1 อัลตราโซนิกเซ็นเซอร (Ultrasonic Sensor) 190 4.2 เซ็นเซอรวัดอุณหภูมิ (Temperature Sensor) 198 4.2.1 เทอรโมคัปเปล (Thermocouple) 198 4.2.2 อารทีดีเซ็นเซอร (RTD Sensor) 199

สารบัญ คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino vii

หนา

4.3 บลูทูธโมดูลเซ็นเซอร (XBee Module Sensor) 204 4.4 เซ็นเซอรไรสาย (Wireless Sensor) 207 4.5 เซ็นเซอรวัดมุม (Gyroscope Sensor) 221 4.6 การควบคุมดีซีมอเตอรและเอนโคเดอรดวยระบบ PID 228 4.6.1 การควบคุมแบบอัตราสวน หรือ P-Control (Proportional Control) 229 4.6.2 การควบคุมแบบอินทิกรัล หรือ I-Control (Integral Control) 231 4.6.3 การควบคุมแบบอนุพันธ หรือ D-Control (Derivative Control) 234 4.6.4 การควบคุมแบบ PI 235 4.6.5 การควบคุมแบบ PD 237 4.6.6 การควบคุมแบบ PID 239 4.7 เพนดูลัมผกผัน (Inverted Pendulum) 249 สรุป 258 คําถามทายบท 259 บทที ่5 ซอฟตแวรประยุกตชวยในการทาํงาน 261 5.1 ซอฟตแวร LabVIEW กับ Arduino IDE 263 5.1.1 การโหลด Firmware จาก LINX Firmware Wizard 265 5.1.2 การโหลด Firmware จาก LIFA Base (Tookit) 270 5.1.3 การเขียน LabVIEW 271 5.2 ซอฟตแวรภาษา C# กับ Arduino IDE 276 5.2.1 การควบคุมหลอดไฟฟา LED ใหติดและดับ (ON/OFF) ดวย C# 277 5.2.2 การควบคุมการหมุนของอารซีเซอรโวมอเตอร ดวย C# 283 5.3 ซอฟตแวรวิชวลเบสิก (Visual Basic) กับ Arduino IDE 290 5.3.1 การควบคุมหลอดไฟฟา LED ใหติดและดับ (ON/OFF) ดวย VB 291 5.3.2 การควบคุมการหมุนของอารซีเซอรโวมอเตอร ดวย VB 297

Page 8: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

สารบัญ คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino ix

สารบัญรปู หนา รูปที่ 1.1 ไมโครคอนโทรลเลอร Arduino UNO 3 1.2 ไมโครคอนโทรลเลอร Arduino UNO 5 1.3 ไมโครคอนโทรลเลอร Arduino UNO SMD 5 1.4 ไมโครคอนโทรลเลอร Arduino Mega 2560 R3 5 1.5 ไมโครคอนโทรลเลอร Arduino Mega 2560 ADK 6 1.6 ไมโครคอนโทรลเลอร Arduino Leonardo 6 1.7 ไมโครคอนโทรลเลอร Arduino Mini 05 6 1.8 ไมโครคอนโทรลเลอร Arduino Pro Mini 328 3.3V 7 1.9 ไมโครคอนโทรลเลอร Arduino Pro Mini 328 5V 7 1.10 ไมโครคอนโทรลเลอร Arduino Ethernet with PoE module 7 1.11 ไมโครคอนโทรลเลอร Arduino Ethernet without PoE module 8 1.12 ไมโครคอนโทรลเลอร Arduino Due Duo 8 1.13 ไมโครคอนโทรลเลอร Arduino Micro 8 1.14 ไมโครคอนโทรลเลอร Arduino Nano 8 1.15 โครงสรางพ้ืนฐานของไมโครโปรเซสเซอร 9 1.16 โครงสรางพ้ืนฐานของไมโครคอนโทรลเลอร 9 1.17 แสดงคําสั่ง if แบบทางเดียว 18 1.18 แสดงคําสั่ง if แบบสองทาง 20 1.19 แสดงคําสั่ง while 24 1.20 แสดงคําสั่ง do..while 27 1.21 สัญลักษณโปรแกรม Arduino IDE 31

viii คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino สารบัญ

สรุป 302 คําถามทายบท 303 บทที ่6 โครงงาน (Project) 305 6.1 โครงงาน: การสรางหุนยนต SCARA Robot เคลื่อนท่ีดวยสเต็ปปงมอเตอร

ควบคุมดวยไมโครคอนโทรลเลอร 309

6.2 ภาษา C : สําหรับควบคุม SCARA Robot เคลื่อนที่ดวยสเต็ปปงมอเตอร ควบคุมดวยไมโครคอนโทรลเลอร

328

บรรณานกุรม 357

Page 9: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

สารบัญ คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino ix

สารบัญรปู หนา รูปที่ 1.1 ไมโครคอนโทรลเลอร Arduino UNO 3 1.2 ไมโครคอนโทรลเลอร Arduino UNO 5 1.3 ไมโครคอนโทรลเลอร Arduino UNO SMD 5 1.4 ไมโครคอนโทรลเลอร Arduino Mega 2560 R3 5 1.5 ไมโครคอนโทรลเลอร Arduino Mega 2560 ADK 6 1.6 ไมโครคอนโทรลเลอร Arduino Leonardo 6 1.7 ไมโครคอนโทรลเลอร Arduino Mini 05 6 1.8 ไมโครคอนโทรลเลอร Arduino Pro Mini 328 3.3V 7 1.9 ไมโครคอนโทรลเลอร Arduino Pro Mini 328 5V 7 1.10 ไมโครคอนโทรลเลอร Arduino Ethernet with PoE module 7 1.11 ไมโครคอนโทรลเลอร Arduino Ethernet without PoE module 8 1.12 ไมโครคอนโทรลเลอร Arduino Due Duo 8 1.13 ไมโครคอนโทรลเลอร Arduino Micro 8 1.14 ไมโครคอนโทรลเลอร Arduino Nano 8 1.15 โครงสรางพ้ืนฐานของไมโครโปรเซสเซอร 9 1.16 โครงสรางพ้ืนฐานของไมโครคอนโทรลเลอร 9 1.17 แสดงคําสั่ง if แบบทางเดียว 18 1.18 แสดงคําสั่ง if แบบสองทาง 20 1.19 แสดงคําสั่ง while 24 1.20 แสดงคําสั่ง do..while 27 1.21 สัญลักษณโปรแกรม Arduino IDE 31

viii คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino สารบัญ

สรุป 302 คําถามทายบท 303 บทที ่6 โครงงาน (Project) 305 6.1 โครงงาน: การสรางหุนยนต SCARA Robot เคลื่อนที่ดวยสเต็ปปงมอเตอร

ควบคุมดวยไมโครคอนโทรลเลอร 309

6.2 ภาษา C : สําหรับควบคุม SCARA Robot เคลื่อนท่ีดวยสเต็ปปงมอเตอร ควบคุมดวยไมโครคอนโทรลเลอร

328

บรรณานกุรม 357

Page 10: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

x คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino สารบัญ

รูปที่ 2.1 การตอหลอดวงจรแบบ Active Low และ Active High 37 2.2 การตอหลอดไฟ LED และสั่งผานปุมกด (Pushbutton) 38 2.3 การตอหลอดไฟ LED โดยใชไอซบีฟัเฟอร (74HC595) เปนตัวชวยขบักระแส 39 2.4 การตอหลอดไฟ LED ใหติดและดับ 42 2.5 การตอหลอดไฟ LED ใหแสดง Shift Bit 45 2.6 การควบคุมหลอดไฟ LED ดวย Pushbutton 49 2.7 การควบคุมหลอดไฟ LED ดวย Pushbutton แบบ Toggle 53 2.8 การควบคุมหลอดไฟ LED ดวย Pushbutton แบบ Shift Bit 57 2.9 การตอหลอด LED 7–Segment โดยใชไอซีบัฟเฟอร (74LS245) 58 2.10 แสดงการตอหลอด LED 7–Segment 59 2.11 แสดงการตอหลอด LED 7-Segment แบบแคโทดรวม 66 2.12 แสดงการตอหลอด LED 7-Segment แบบแอโนดรวม 70 2.13 แสดงการตอหลอด LED 7-Segment แบบแคโทดรวม 74 2.14 แสดงการตอหลอด LED 7-Segment แบบแอโนดรวม

ใหทํางาน Count Up & Count Down 78

2.15 แสดงการตอหลอด LED 7-Segment 2 หลัก แบบแอโนดรวม 83 2.16 แสดงการตอปุมกด 2 ปุม เพ่ือควบคุมหลอดไฟ LED 7-Segment ใหนับคาเพ่ิมขึ้นและนับลง 90 2.17 คียสวิตชแบบแมทริกซ 43 91 2.18 แสดงรหัสประจําคียของ Keypad 93 2.19 แสดงการตอ LED 7-Segment ควบคุมดวย Keypad 100 2.20 โมดูล LCD ขนาด 161 บรรทัด 101 2.21 แสดงวงจรการตอขาสัญญาณโมดูล LCD ในโหมด 4 บิต (Module 16x2) 105 2.22 แสดงวงจรการตอขาสัญญาณโมดูล LCD ในโหมด 4 บิต(Module 20x4) 105 2.23 แสดงตัวอักษรแบบกะพริบออกทางโมดูล LCD 109 2.24 แสดงตัวอักษรและตัวเลขออกทางโมดูล LCD 111 2.25 แสดงผลออกทางโมดูล LCD ดวยการกด Keypad 114

สารบัญ คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino xi

รูปที่ 3.1 แสดงสเต็ปปงมอเตอรและโครงสรางภายใน 120 3.2 แสดงการพันขดลวดและวงจรสวิตชิ่งแบบไบโพลาร 121 3.3 แสดงการพันขดลวดและการควบคุมวงจรสวิตช่ิงแบบยูนิโพลาร 121 3.4 แสดงการควบคุมสเต็ปปงมอเตอร แบบฟูล-สเต็ป 1 เฟส 122 3.5 แสดงการควบคุมสเต็ปปงมอเตอร แบบฟูล-สเต็ป 2 เฟส 123 3.6 แสดงการควบคุมสเต็ปปงมอเตอร แบบฮาลฟสเต็ป 124 3.7 แสดงไดอะแกรมการควบคุมสเต็ปปงมอเตอร 124 3.8 แสดงชุดไมโครคอนโทรลเลอรควบคุมสเต็ปปงมอเตอร 125 3.9 สเต็ปปงมอเตอรหมุนทิศทางเดียว 128 3.10 สเต็ปปงมอเตอรหมุนดวยการกด Pushbutton 131 3.11 สเต็ปปงมอเตอรหมุนดวยการกด Pushbutton 2 ปุมกด 135 3.12 สเต็ปปงมอเตอรหมุนกลับทิศทางดวย Limit Switch 139 3.13 สเต็ปปงมอเตอรหมุนกลับทิศทางดวย Keypad (แบบท่ี 1) 145 3.14 สเต็ปปงมอเตอรหมุนกลับทิศทางดวย Keypad (แบบท่ี 2) 154 3.15 สเต็ปปงมอเตอรหมุนกลับทิศทางดวย Keypad และแสดงผลออกทาง LCD 164 3.16 โครงสรางของดีซมีอเตอร 165 3.17 ดีซีมอเตอรแบบอนุกรม 166 3.18 ดีซีมอเตอรแบบขนาน 167 3.19 ดีซีมอเตอรแบบผสม 167 3.20 ดีซีมอเตอรเคลือ่นท่ีขวา-ซาย ดวยการกด Pushbutton (A & B) 170 3.21 ดีซีมอเตอรและสเต็ปปงมอเตอรหมุนและหยุด ดวยการกดปุมจาก Keypad และแสดงผล

ออกทีห่นาจอแสดงผล LCD 175

3.22 เซอรโวมอเตอรหมุนตามองศาท่ีกําหนด และแสดงผลออกท่ีหนาจอแสดงผลออกท่ีหนาจอแสดงผล LCD

178

3.23 เซอรโวมอเตอรหมุนตามองศาท่ีกําหนด ดวยการปรับคาจากโพเทนชโิอมิเตอร และแสดงผลออกที่หนาจอแสดงผล LCD

181

Page 11: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

x คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino สารบัญ

รูปที่ 2.1 การตอหลอดวงจรแบบ Active Low และ Active High 37 2.2 การตอหลอดไฟ LED และสั่งผานปุมกด (Pushbutton) 38 2.3 การตอหลอดไฟ LED โดยใชไอซบีฟัเฟอร (74HC595) เปนตัวชวยขบักระแส 39 2.4 การตอหลอดไฟ LED ใหติดและดับ 42 2.5 การตอหลอดไฟ LED ใหแสดง Shift Bit 45 2.6 การควบคุมหลอดไฟ LED ดวย Pushbutton 49 2.7 การควบคุมหลอดไฟ LED ดวย Pushbutton แบบ Toggle 53 2.8 การควบคุมหลอดไฟ LED ดวย Pushbutton แบบ Shift Bit 57 2.9 การตอหลอด LED 7–Segment โดยใชไอซีบัฟเฟอร (74LS245) 58 2.10 แสดงการตอหลอด LED 7–Segment 59 2.11 แสดงการตอหลอด LED 7-Segment แบบแคโทดรวม 66 2.12 แสดงการตอหลอด LED 7-Segment แบบแอโนดรวม 70 2.13 แสดงการตอหลอด LED 7-Segment แบบแคโทดรวม 74 2.14 แสดงการตอหลอด LED 7-Segment แบบแอโนดรวม

ใหทํางาน Count Up & Count Down 78

2.15 แสดงการตอหลอด LED 7-Segment 2 หลัก แบบแอโนดรวม 83 2.16 แสดงการตอปุมกด 2 ปุม เพ่ือควบคุมหลอดไฟ LED 7-Segment ใหนับคาเพ่ิมขึ้นและนับลง 90 2.17 คียสวิตชแบบแมทริกซ 43 91 2.18 แสดงรหัสประจําคียของ Keypad 93 2.19 แสดงการตอ LED 7-Segment ควบคุมดวย Keypad 100 2.20 โมดูล LCD ขนาด 161 บรรทัด 101 2.21 แสดงวงจรการตอขาสัญญาณโมดูล LCD ในโหมด 4 บิต (Module 16x2) 105 2.22 แสดงวงจรการตอขาสัญญาณโมดูล LCD ในโหมด 4 บิต(Module 20x4) 105 2.23 แสดงตัวอักษรแบบกะพริบออกทางโมดูล LCD 109 2.24 แสดงตัวอักษรและตัวเลขออกทางโมดูล LCD 111 2.25 แสดงผลออกทางโมดูล LCD ดวยการกด Keypad 114

สารบัญ คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino xi

รูปที่ 3.1 แสดงสเต็ปปงมอเตอรและโครงสรางภายใน 120 3.2 แสดงการพันขดลวดและวงจรสวิตชิ่งแบบไบโพลาร 121 3.3 แสดงการพันขดลวดและการควบคุมวงจรสวิตช่ิงแบบยูนิโพลาร 121 3.4 แสดงการควบคุมสเต็ปปงมอเตอร แบบฟูล-สเต็ป 1 เฟส 122 3.5 แสดงการควบคุมสเต็ปปงมอเตอร แบบฟูล-สเต็ป 2 เฟส 123 3.6 แสดงการควบคุมสเต็ปปงมอเตอร แบบฮาลฟสเต็ป 124 3.7 แสดงไดอะแกรมการควบคุมสเต็ปปงมอเตอร 124 3.8 แสดงชุดไมโครคอนโทรลเลอรควบคุมสเต็ปปงมอเตอร 125 3.9 สเต็ปปงมอเตอรหมุนทิศทางเดียว 128 3.10 สเต็ปปงมอเตอรหมุนดวยการกด Pushbutton 131 3.11 สเต็ปปงมอเตอรหมุนดวยการกด Pushbutton 2 ปุมกด 135 3.12 สเต็ปปงมอเตอรหมุนกลับทิศทางดวย Limit Switch 139 3.13 สเต็ปปงมอเตอรหมุนกลับทิศทางดวย Keypad (แบบที ่1) 145 3.14 สเต็ปปงมอเตอรหมุนกลับทิศทางดวย Keypad (แบบที ่2) 154 3.15 สเต็ปปงมอเตอรหมุนกลับทิศทางดวย Keypad และแสดงผลออกทาง LCD 164 3.16 โครงสรางของดีซมีอเตอร 165 3.17 ดีซีมอเตอรแบบอนุกรม 166 3.18 ดีซีมอเตอรแบบขนาน 167 3.19 ดีซีมอเตอรแบบผสม 167 3.20 ดีซีมอเตอรเคลือ่นท่ีขวา-ซาย ดวยการกด Pushbutton (A & B) 170 3.21 ดีซีมอเตอรและสเต็ปปงมอเตอรหมุนและหยุด ดวยการกดปุมจาก Keypad และแสดงผล

ออกท่ีหนาจอแสดงผล LCD 175

3.22 เซอรโวมอเตอรหมุนตามองศาท่ีกําหนด และแสดงผลออกท่ีหนาจอแสดงผลออกท่ีหนาจอแสดงผล LCD

178

3.23 เซอรโวมอเตอรหมุนตามองศาท่ีกําหนด ดวยการปรับคาจากโพเทนชโิอมิเตอร และแสดงผลออกท่ีหนาจอแสดงผล LCD

181

Page 12: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

xii คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino สารบัญ

3.24 สเต็ปปงมอเตอร 182 3.25 ดีซีมอเตอร 183 3.26 เซอรโวมอเตอร 183

รูปที่ 4.1 เซ็นเซอรชนิดตางๆ ที่สามารถควบคุมดวย Arduino UNO 189 4.2 อัลตราโซนิกเซ็นเซอร 191 4.3 Timing Diagram 191 4.4 การควบคุมอัลตราโซนิกเซ็นเซอร (แบบท่ี 1) 194 4.5 การควบคุมอัลตราโซนิกเซ็นเซอร (แบบท่ี 2) 197 4.6 เทอรโมคัปเปล (Thermocouple) 198 4.7 อารทีดีเซ็นเซอร (RTD Sensor) 199 4.8 การตอ Arduino Uno กับเซ็นเซอรวัดอุณหภูมิ 200 4.9 DHT11 (Temperature Sensor) 200 4.10 การควบคุมเซ็นเซอรวัดอุณหภูมิ 203 4.11 บลูทูธโมดูลเซ็นเซอร (XBee Module Sensor) 204 4.12 แสดงผลทาง Serial Monitor 206 4.13 เซ็นเซอรไรสาย (Wireless Sensor) 207 4.14 ไมโครคอนโทรลเลอรตอกบัเซ็นเซอรไรสาย 207 4.15 ขาโมดูล nRF24L01 208 4.16 เซ็นเซอรวัดมุม รุน MPU6050 221 4.17 ไมโครคอนโทรลเลอรตอกบัเซ็นเซอรวัดมุม 221 4.18 แสดงผลการวัดมุมเอียงท้ัง 3 แกน ของเซ็นเซอรวัดมุม 224 4.19 แสดงการทิศทางการหมุนของอารซีเซอรโว 227 4.20 แสดงแผนภาพการควบคุมระบบปด แบบ PID 228 4.21 แสดงคาความผิดพลาด 229 4.22 แสดงการควบคุมความเร็วดวยการควบคุมแบบอัตราสวน 230

สารบัญ คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino xiii

4.23 แสดงความสัมพันธระหวางสัญญาณเอาตพุตกับเกนของตัวควบคุมแบบอัตราสวน 231 4.24 แสดงการควบคุมความเร็วดวยการควบคุมแบบอินทิกรัล 232 4.25 แสดงความสัมพันธระหวางสัญญาณเอาตพุทกับเกนของตัวควบคุมแบบอินทิกรัล 233 4.26 แสดงความสัมพันธของสัญญาณการควบคุมแบบ PI 236 4.27 แสดงความสัมพันธของสัญญาณการควบคุมแบบ PD 238 4.28 แสดงความสัมพันธของสัญญาณการควบคุมแบบ PID 240 4.29 แสดงการตําแหนงของดีซีมอเตอรและเอนโคดเดอร ดวยการควบคุมแบบ PID 247 4.30 แสดงการตออุปกรณ Arduino, DC Motor, Encoder, R-Variable 247 4.31 การควบคุมตําแหนงของดีซีมอเตอรและเอนโคดเดอร ดวยการควบคุมแบบ PID 248 4.32 การประยุกตใชงานเพนดูลัมผกผัน 249 4.33 เพนดูลัมผกผัน 250 รูปที่ 5.1 แสดงซอฟตแวร LabVIEW 2013 264 5.2 การประยุกตใชงานอารซีเซอรโวมอเตอร 284 รูปที่ 6.1 โครงงานนักศึกษา 308 6.2 ตัวอยางอุปกรณที่ใชในระบบ 310 6.3 ขอตอท่ี 1 (IAI Linear Actuator) 312 6.4 ขอตอท่ี 4 (IAI Linear Actuator) 313 6.5 ขอตอท่ี 2 สเต็ปปงมอเตอร Nema34 313 6.6 ขอตอท่ี 3 สเต็ปปงมอเตอร Nema23 314 6.7 แกนที1่ (Link 1) 315 6.8 แกนที ่2 (Link 2) 315 6.9 แกนที ่3 (Link 3) 315 6.10 แกนที ่4 (Link 4) 316 6.11 โครงสรางทางกลของหุนยนต SCARA (Mechanical Structure of SCARA Robot) 316 6.12 ภาพ 2 มิติของหุนยนต SCARA 317

Page 13: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

xii คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino สารบัญ

3.24 สเต็ปปงมอเตอร 182 3.25 ดีซีมอเตอร 183 3.26 เซอรโวมอเตอร 183

รูปที่ 4.1 เซ็นเซอรชนิดตางๆ ที่สามารถควบคุมดวย Arduino UNO 189 4.2 อัลตราโซนิกเซ็นเซอร 191 4.3 Timing Diagram 191 4.4 การควบคุมอัลตราโซนิกเซ็นเซอร (แบบที ่1) 194 4.5 การควบคุมอัลตราโซนิกเซ็นเซอร (แบบที ่2) 197 4.6 เทอรโมคัปเปล (Thermocouple) 198 4.7 อารทีดีเซ็นเซอร (RTD Sensor) 199 4.8 การตอ Arduino Uno กับเซ็นเซอรวัดอุณหภูมิ 200 4.9 DHT11 (Temperature Sensor) 200 4.10 การควบคุมเซ็นเซอรวัดอุณหภูมิ 203 4.11 บลูทูธโมดูลเซ็นเซอร (XBee Module Sensor) 204 4.12 แสดงผลทาง Serial Monitor 206 4.13 เซ็นเซอรไรสาย (Wireless Sensor) 207 4.14 ไมโครคอนโทรลเลอรตอกบัเซ็นเซอรไรสาย 207 4.15 ขาโมดูล nRF24L01 208 4.16 เซ็นเซอรวัดมุม รุน MPU6050 221 4.17 ไมโครคอนโทรลเลอรตอกบัเซ็นเซอรวัดมุม 221 4.18 แสดงผลการวัดมุมเอียงท้ัง 3 แกน ของเซ็นเซอรวัดมุม 224 4.19 แสดงการทิศทางการหมุนของอารซีเซอรโว 227 4.20 แสดงแผนภาพการควบคุมระบบปด แบบ PID 228 4.21 แสดงคาความผิดพลาด 229 4.22 แสดงการควบคุมความเร็วดวยการควบคุมแบบอัตราสวน 230

สารบัญ คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino xiii

4.23 แสดงความสัมพันธระหวางสัญญาณเอาตพุตกับเกนของตัวควบคุมแบบอัตราสวน 231 4.24 แสดงการควบคุมความเร็วดวยการควบคุมแบบอินทิกรัล 232 4.25 แสดงความสัมพันธระหวางสัญญาณเอาตพุทกับเกนของตัวควบคุมแบบอินทิกรัล 233 4.26 แสดงความสัมพันธของสัญญาณการควบคุมแบบ PI 236 4.27 แสดงความสัมพันธของสัญญาณการควบคุมแบบ PD 238 4.28 แสดงความสัมพันธของสัญญาณการควบคุมแบบ PID 240 4.29 แสดงการตําแหนงของดีซีมอเตอรและเอนโคดเดอร ดวยการควบคุมแบบ PID 247 4.30 แสดงการตออุปกรณ Arduino, DC Motor, Encoder, R-Variable 247 4.31 การควบคุมตําแหนงของดีซีมอเตอรและเอนโคดเดอร ดวยการควบคุมแบบ PID 248 4.32 การประยุกตใชงานเพนดูลัมผกผัน 249 4.33 เพนดูลัมผกผัน 250 รูปที่ 5.1 แสดงซอฟตแวร LabVIEW 2013 264 5.2 การประยุกตใชงานอารซีเซอรโวมอเตอร 284 รูปที่ 6.1 โครงงานนักศึกษา 308 6.2 ตัวอยางอุปกรณที่ใชในระบบ 310 6.3 ขอตอท่ี 1 (IAI Linear Actuator) 312 6.4 ขอตอท่ี 4 (IAI Linear Actuator) 313 6.5 ขอตอท่ี 2 สเต็ปปงมอเตอร Nema34 313 6.6 ขอตอท่ี 3 สเต็ปปงมอเตอร Nema23 314 6.7 แกนที1่ (Link 1) 315 6.8 แกนที ่2 (Link 2) 315 6.9 แกนที ่3 (Link 3) 315 6.10 แกนที ่4 (Link 4) 316 6.11 โครงสรางทางกลของหุนยนต SCARA (Mechanical Structure of SCARA Robot) 316 6.12 ภาพ 2 มิติของหุนยนต SCARA 317

Page 14: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

xiv คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino สารบัญ

6.13 ภาพรวมของระบบ 318 6.14 วงจรชุดประมวลผลและส่ังงาน 319 6.15 วงจรชุดบอรดควบคุมตําแหนงแกนหุนยนตที่ 1 319 6.16 วงจรชุดบอรดควบคุมตําแหนงแกนหุนยนตที่ 2 320 6.17 วงจรชุดบอรดควบคุมตําแหนงแกนหุนยนตที่ 3 และ 4 320 6.18 วงจรไดรฟขับเซอรโวมอเตอร 321 6.19 วงจรไดรฟขับสเต็ปปงมอเตอร 1 321 6.20 วงจรไดรฟขับสเต็ปปงมอเตอร 2 322 6.21 วงจรไดรฟขับสเต็ปปงมอเตอร 3 322 6.22 แสดงวงจรควบคุม SCARA Robot ดวยไมโครคอนโทรลเลอร Arduino 356

สารบัญ คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino xv

สารบัญตาราง

หนา ตารางท่ี 1.1 ไมโครคอนโทรลเลอร Arduino 4 1.2 ประเภทขอมูลและขนาดตัวแปร 11 1.3 ตัวดําเนินการเลขคณิตในภาษา C 12 1.4 ตัวดําเนินการในภาษา C 14 ตารางท่ี 2.1 แสดงผลคาของพอรตแบบแคโทดรวม 60 2.2 แสดงผลคาของพอรตแบบแอโนดรวม 60 2.3 แสดงผลการสแกน Column ที่ 1 92 2.4 แสดงผลการสแกน Column ที่ 2 92 2.5 แสดงผลการสแกน Column ที่ 3 92 2.6 ขาโมดูล LCD ขนาด 16 ตัวอักษร 1 บรรทัด 102

2.7 แสดงชุดคําสั่งควบคุมการทํางานของโมดูล LCD 106 ตารางท่ี 4.1 ขาโมดูล nRF24L01 ตอกบั Arduino UNO กับ Arduino Mega 208 4.2 ขาโมดูล MPU6050 ตอกบั Arduino UNO กับ Arduino Mega 222 4.3 คุณสมบัติของตัวควบคุมแบบ PI, PD, PID 234 4.4 การเปรียบเทียบขอดีขอเสียของตัวควบคุมแบบ P, I, D 234 ตารางท่ี 6.1 พารามิเตอรของเดนาวิต-ฮารเทนเบิรก (D-H Parameters) 323

Page 15: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

xiv คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino สารบัญ

6.13 ภาพรวมของระบบ 318 6.14 วงจรชุดประมวลผลและส่ังงาน 319 6.15 วงจรชุดบอรดควบคุมตําแหนงแกนหุนยนตที่ 1 319 6.16 วงจรชุดบอรดควบคุมตําแหนงแกนหุนยนตที่ 2 320 6.17 วงจรชุดบอรดควบคุมตําแหนงแกนหุนยนตที่ 3 และ 4 320 6.18 วงจรไดรฟขับเซอรโวมอเตอร 321 6.19 วงจรไดรฟขับสเต็ปปงมอเตอร 1 321 6.20 วงจรไดรฟขับสเต็ปปงมอเตอร 2 322 6.21 วงจรไดรฟขับสเต็ปปงมอเตอร 3 322 6.22 แสดงวงจรควบคุม SCARA Robot ดวยไมโครคอนโทรลเลอร Arduino 356

สารบัญ คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino xv

สารบัญตาราง

หนา ตารางท่ี 1.1 ไมโครคอนโทรลเลอร Arduino 4 1.2 ประเภทขอมูลและขนาดตัวแปร 11 1.3 ตัวดําเนินการเลขคณิตในภาษา C 12 1.4 ตัวดําเนินการในภาษา C 14 ตารางท่ี 2.1 แสดงผลคาของพอรตแบบแคโทดรวม 60 2.2 แสดงผลคาของพอรตแบบแอโนดรวม 60 2.3 แสดงผลการสแกน Column ที่ 1 92 2.4 แสดงผลการสแกน Column ที่ 2 92 2.5 แสดงผลการสแกน Column ที่ 3 92 2.6 ขาโมดูล LCD ขนาด 16 ตัวอักษร 1 บรรทัด 102

2.7 แสดงชุดคําสั่งควบคุมการทํางานของโมดูล LCD 106 ตารางท่ี 4.1 ขาโมดูล nRF24L01 ตอกบั Arduino UNO กับ Arduino Mega 208 4.2 ขาโมดูล MPU6050 ตอกบั Arduino UNO กับ Arduino Mega 222 4.3 คุณสมบัติของตัวควบคุมแบบ PI, PD, PID 234 4.4 การเปรียบเทียบขอดีขอเสียของตัวควบคุมแบบ P, I, D 234 ตารางท่ี 6.1 พารามิเตอรของเดนาวิต-ฮารเทนเบิรก (D-H Parameters) 323

Page 16: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร
Page 17: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 1

1.1 ไมโครคอนโทรลเลอร์ Arduino

1.2 ไมโครโปรเซสเซอร์กับไมโครคอนโทรลเลอร์

1.3 โครงสร้างของภาษา C

1.4 โปรแกรม Arduino IDE

ไมโครคอนโทรลเลอร์Arduino ไมโครโปรเซสเซอร์กับไมโครคอนโทรลเลอร์ โครงสร้างของภาษาC โปรแกรมArduinoIDE

1ไมโครคอนโทรลเลอร์ Arduino

Page 18: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

2 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 3

ปจจ ุบ ัน เค รื ่อ ง ใช ไฟฟ าอ ุปกรณอ ิเ ล ็กทรอน ิกส ตลอดจนระบบโรงงานอ ุตสาหกรรมจะใชไมโครคอนโทรลเลอรซึ่งติดต้ังอยูภายในเปนตัวควบคุมเกือบทั้งหมด ทําใหไมโครคอนโทรลเลอรกลายเปนอีกหนึ ่งอุปกรณที ่ผู ผลิตสารกึ ่งตัวนําหลายๆ บริษัทใหความสนใจ และมีการแขงขันสูงมาก อุปกรณที ่ใชไมโครคอนโทรลเลอรควบคุมมีมากมายหลายชนิด เชน อุปกรณเครื่องใชภายในบาน สัญญาณไฟจราจร รถยนต ตลอดจนระบบอุตสาหกรรม PLC, CNC, Robot เปนตน 1.1 ไมโครคอนโทรลเลอร์ Arduino

บอรดไมโครคอนโทรลเลอร Arduino หรือ อาดูอิโน ถือวาเปนบอรดไมโครคอนโทรลเลอรยอดนิยม และใชกันอยางแพรหลาย ที่สามารถนําไปพัฒนาโปรเจ็กต (Project) ไดหลากหลาย เรียนรูไดงาย และเหมาะสําหรับผูเร่ิมตน ไมโครคอนโทรลเลอร Auduino จะใชชิป AVR เปนหลักในไมโครคอนโทรลเลอร Auduino ทุกรุน เนื่องจากไมโครคอนโทรเลอรของตระกูล AVR นั้นมีความทันสมัย ในชิปในบางตัวสามารถเชื่อมตอผาน USB ไดโดยตรง สามารถใชกับคอมพิวเตอรไดเปนอยางดี และในไมโครคอนโทรเลอรตระกูล AVR ยังมีสวนของโปรแกรมพิเศษที่เรียกวา บูตโหลดเดอร (Boot loader) โดยจะเปนสวนโปรแกรมที่จะถูกเรียกขึ้นมากอนการเรียกโปรแกรมปกติ ทําใหสามารถเขียนส่ังการทํางานไดกอนการเรียกโปรแกรมปกติ ทําใหไมโครคอนโทรลเลอร Arduino นั้นอาศัยสวนโปรแกรมพิเศษนี้ในการทําใหชิปสามารถโปรแกรมผานพอรตอนุกรมชนิด UART ได จึงทําใหการเขียนโปรแกรมลงไปในชิปใชเพียง USB ติดตอกับ UART ก็สามารถทํางานได

รูปที ่1.1 ไมโครคอนโทรลเลอร Arduino UNO

Page 19: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

2 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 3

ปจจ ุบ ัน เค รื ่อ ง ใช ไฟฟ าอ ุปกรณอ ิเ ล ็กทรอน ิกส ตลอดจนระบบโรงงานอ ุตสาหกรรมจะใชไมโครคอนโทรลเลอรซึ่งติดต้ังอยูภายในเปนตัวควบคุมเกือบทั้งหมด ทําใหไมโครคอนโทรลเลอรกลายเปนอีกหนึ ่งอุปกรณที ่ผู ผลิตสารกึ ่งตัวนําหลายๆ บริษัทใหความสนใจ และมีการแขงขันสูงมาก อุปกรณที ่ใชไมโครคอนโทรลเลอรควบคุมมีมากมายหลายชนิด เชน อุปกรณเครื่องใชภายในบาน สัญญาณไฟจราจร รถยนต ตลอดจนระบบอุตสาหกรรม PLC, CNC, Robot เปนตน 1.1 ไมโครคอนโทรลเลอร์ Arduino

บอรดไมโครคอนโทรลเลอร Arduino หรือ อาดูอิโน ถือวาเปนบอรดไมโครคอนโทรลเลอรยอดนิยม และใชกันอยางแพรหลาย ที่สามารถนําไปพัฒนาโปรเจ็กต (Project) ไดหลากหลาย เรียนรูไดงาย และเหมาะสําหรับผูเร่ิมตน ไมโครคอนโทรลเลอร Auduino จะใชชิป AVR เปนหลักในไมโครคอนโทรลเลอร Auduino ทุกรุน เน่ืองจากไมโครคอนโทรเลอรของตระกูล AVR นั้นมีความทันสมัย ในชิปในบางตัวสามารถเชื่อมตอผาน USB ไดโดยตรง สามารถใชกับคอมพิวเตอรไดเปนอยางดี และในไมโครคอนโทรเลอรตระกูล AVR ยังมีสวนของโปรแกรมพิเศษที่เรียกวา บูตโหลดเดอร (Boot loader) โดยจะเปนสวนโปรแกรมที่จะถูกเรียกขึ้นมากอนการเรียกโปรแกรมปกติ ทําใหสามารถเขียนส่ังการทํางานไดกอนการเรียกโปรแกรมปกติ ทําใหไมโครคอนโทรลเลอร Arduino นั้นอาศัยสวนโปรแกรมพิเศษนี้ในการทําใหชิปสามารถโปรแกรมผานพอรตอนุกรมชนิด UART ได จึงทําใหการเขียนโปรแกรมลงไปในชิปใชเพียง USB ติดตอกับ UART ก็สามารถทํางานได

รูปที ่1.1 ไมโครคอนโทรลเลอร Arduino UNO

Page 20: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

4 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

ไมโครคอนโทรลเลอร Arduino UNO เปนบอรดไมโครคอนโทรเลอรตระกูล AVR โดยมีขาในการทํางานทั้งหมด 14 ขา คือ Pin 0 – 13 โดยแตละขามีการทํางานที่แตกตางกันออกไป เชน ขาสัญญาณที่ติดตอทางพอรตอนุกรม (Serial Port) คือ Pin 0, 1 เปนขา Rx, Tx สวนขาสัญญาณที่ใชติดตอสัญญาณอินพุตและเอาตพุต (Input and Output) คือ Pin 2,3,4,5,6,7,8,9,10,11,12,13 และบางขาสัญญาณยังทําหนาที่นอกเหนือจากขาสัญญาณอินพุตและเอาตพุต เชน Pin 3,5,6,9,10,11 ซึ่งสามารถทําหนาที่เปนขาสัญญาณพัลสวิดทมอดูเลชั่น (Pulse Width Modulation) หรือที่เรียกกันทั่วไปคือ PWM และยังมีขาที่รับสัญญาณ แอนะล็อกอีก 6 ขา คือ Pin A0, A1, A2, A3, A4 และ A5 อีกดวย

ตารางท่ี 1.1 ไมโครคอนโทรลเลอร Arduino

บอร์ด Arduino ตวัประมวลผล (Processor)

หนว่ยความจาํขอ้มูล (Data Memory)

อนิพุต/เอาต์พุต (I/O Port)

แอนะลอ็กอนิพุต/เอาต์พุต

(Analog I/O Port) Arduino UNO Arduino DUE Arduino Maga Arduino Leonardo

16 MHz ATmaga328

84 MHz

AT91SAM3X8E

16 MHz ATmaga2560

16 MHz

ATmaga32u4

2 KB SRAM 32 KB Flash

96 KB SRAM 512 KB Flash

8 KB SRAM

256 KB Flash

2.5 KB SRAM 32 KB Flash

14

54

54

20

6 Input, 0 Output

12 Input, 2 Output

16 Input, 0 Output

12 Input, 0 Output

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 5

รูปที ่1.2 ไมโครคอนโทรลเลอร Arduino UNO R3

รูปที่ 1.3 ไมโครคอนโทรลเลอร Arduino UNO SMD

รูปที ่1.4 ไมโครคอนโทรลเลอร Arduino Mega 2560 R3

Page 21: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

4 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

ไมโครคอนโทรลเลอร Arduino UNO เปนบอรดไมโครคอนโทรเลอรตระกูล AVR โดยมีขาในการทํางานทั้งหมด 14 ขา คือ Pin 0 – 13 โดยแตละขามีการทํางานที่แตกตางกันออกไป เชน ขาสัญญาณที่ติดตอทางพอรตอนุกรม (Serial Port) คือ Pin 0, 1 เปนขา Rx, Tx สวนขาสัญญาณที่ใชติดตอสัญญาณอินพุตและเอาตพุต (Input and Output) คือ Pin 2,3,4,5,6,7,8,9,10,11,12,13 และบางขาสัญญาณยังทําหนาที่นอกเหนือจากขาสัญญาณอินพุตและเอาตพุต เชน Pin 3,5,6,9,10,11 ซึ่งสามารถทําหนาที่เปนขาสัญญาณพัลสวิดทมอดูเลชั่น (Pulse Width Modulation) หรือที่เรียกกันทั่วไปคือ PWM และยังมีขาที่รับสัญญาณ แอนะล็อกอีก 6 ขา คือ Pin A0, A1, A2, A3, A4 และ A5 อีกดวย

ตารางท่ี 1.1 ไมโครคอนโทรลเลอร Arduino

บอร์ด Arduino ตวัประมวลผล (Processor)

หนว่ยความจาํขอ้มูล (Data Memory)

อนิพุต/เอาต์พุต (I/O Port)

แอนะลอ็กอนิพุต/เอาต์พุต

(Analog I/O Port) Arduino UNO Arduino DUE Arduino Maga Arduino Leonardo

16 MHz ATmaga328

84 MHz

AT91SAM3X8E

16 MHz ATmaga2560

16 MHz

ATmaga32u4

2 KB SRAM 32 KB Flash

96 KB SRAM 512 KB Flash

8 KB SRAM

256 KB Flash

2.5 KB SRAM 32 KB Flash

14

54

54

20

6 Input, 0 Output

12 Input, 2 Output

16 Input, 0 Output

12 Input, 0 Output

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 5

รูปที ่1.2 ไมโครคอนโทรลเลอร Arduino UNO R3

รูปที่ 1.3 ไมโครคอนโทรลเลอร Arduino UNO SMD

รูปที ่1.4 ไมโครคอนโทรลเลอร Arduino Mega 2560 R3

Page 22: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

6 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

รูปที่ 1.5 ไมโครคอนโทรลเลอร Arduino Mega ADK

รูปที่ 1.6 ไมโครคอนโทรลเลอร Arduino Leonardo

รูปที่ 1.7 ไมโครคอนโทรลเลอร Arduino Mini 05

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 7

รูปที ่1.8 ไมโครคอนโทรลเลอร Arduino Pro Mini 328 3.3V

รูปที ่1.9 ไมโครคอนโทรลเลอร Arduino Pro Mini 328 5V

รูปที่ 1.10 ไมโครคอนโทรลเลอร Arduino Ethernet with PoE module

Page 23: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

6 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

รูปที่ 1.5 ไมโครคอนโทรลเลอร Arduino Mega ADK

รูปที่ 1.6 ไมโครคอนโทรลเลอร Arduino Leonardo

รูปที่ 1.7 ไมโครคอนโทรลเลอร Arduino Mini 05

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 7

รูปที ่1.8 ไมโครคอนโทรลเลอร Arduino Pro Mini 328 3.3V

รูปที ่1.9 ไมโครคอนโทรลเลอร Arduino Pro Mini 328 5V

รูปที่ 1.10 ไมโครคอนโทรลเลอร Arduino Ethernet with PoE module

Page 24: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

8 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

รูปที ่1.11 ไมโครคอนโทรลเลอร Arduino Ethernet without PoE module

รูปที ่1.12 ไมโครคอนโทรลเลอร Arduino Due Duo

รูปที ่1.13 ไมโครคอนโทรลเลอร Arduino Micro

รูปที ่1.14 ไมโครคอนโทรลเลอร Arduino Nano

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 9

1.2 ไมโครโปรเซสเซอร์กับไมโครคอนโทรลเลอร์ไมโครโปรเซสเซอรที่ใชอยูในปจจุบัน เชน ซีพียูเบอร Z80 เปนตน จะไมมีหนวยความจํา RAM, ROM

และ Port อยูในตัวชิป ทําใหตองตอหนวยความจําโปรแกรมภายนอกเพิ่ม และตองใช ICs ขยายพอรตเพิ่มเติม ขอดีคือ สามารถเพ่ิมหนวยความจําไดตลอด สวนไมโครคอนโทรลเลอรจะมีวงจรพื้นฐานประกอบอยูภายในชิป เชน หนวยความจํา RAM, ROM และ I/O Port ดังนั้น ในระบบไมโครคอนโทรลเลอรจึงมีขนาดเล็กกวาและราคาต่ํากวาระบบไมโครโปรเซสเซอร

รูปที ่1.15 โครงสรางพื้นฐานของไมโครโปรเซสเซอร

รูปที ่1.16 โครงสรางพื้นฐานของไมโครคอนโทรลเลอร

Page 25: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

8 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

รูปที ่1.11 ไมโครคอนโทรลเลอร Arduino Ethernet without PoE module

รูปที ่1.12 ไมโครคอนโทรลเลอร Arduino Due Duo

รูปที ่1.13 ไมโครคอนโทรลเลอร Arduino Micro

รูปที ่1.14 ไมโครคอนโทรลเลอร Arduino Nano

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 9

1.2 ไมโครโปรเซสเซอร์กับไมโครคอนโทรลเลอร์ไมโครโปรเซสเซอรที่ใชอยูในปจจุบัน เชน ซีพียูเบอร Z80 เปนตน จะไมมีหนวยความจํา RAM, ROM

และ Port อยูในตัวชิป ทําใหตองตอหนวยความจําโปรแกรมภายนอกเพิ่ม และตองใช ICs ขยายพอรตเพิ่มเติม ขอดีคือ สามารถเพ่ิมหนวยความจําไดตลอด สวนไมโครคอนโทรลเลอรจะมีวงจรพื้นฐานประกอบอยูภายในชิป เชน หนวยความจํา RAM, ROM และ I/O Port ดังนั้น ในระบบไมโครคอนโทรลเลอรจึงมีขนาดเล็กกวาและราคาต่ํากวาระบบไมโครโปรเซสเซอร

รูปที ่1.15 โครงสรางพื้นฐานของไมโครโปรเซสเซอร

รูปที ่1.16 โครงสรางพื้นฐานของไมโครคอนโทรลเลอร

Page 26: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

10 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

1.2.1 หน่วยประมวลผลกลาง หรือซีพยูี (Central Processing Unit; CPU)

ซีพียูเปรียบไดกับสมองของคนเรานั่นเอง เพราะการคํานวณตางๆ เกิดขึ้นที่นี่ ซีพียูประกอบดวยวงจรตางๆ หลายวงจร เชน วงจรควบคุมเวลาและระบบการทํางาน (Timing and Control Unit) ซึ่งจะทําหนาที่จัดการทั้งหมดของวงจรทั้งประมวลผลและควบคุมตามคําสั่งที่ไดรับ การคํานวณทางคณิตศาสตรและลอจิก (ALU ; Arithmetic and Logic Unit) โดยจะทําหนาที่คํานวณและประมวลผลทางคณิตศาสตรและระบบลอจิก วงจรถอดรหัสคําสั่ง (Instruction Decoder) จะทําหนาที่แปลงคําสั่งทั้งหมดใหเปนภาษาเครื่อง (Machine Language) วงจรควบคุมการทํางานของ Counter (Program Counter) วงจรควบคุมสัญญาณนาฬิกา (Oscillator) ตลอดจนหนวยความจําภายใน Register, Adder, Subtraction, Buffer และอื่นๆ ที่ใชในการเก็บขอมูลและการประมวลของซีพียู เปนตน

1.2.2 หน่วยความจาํ (Memory Unit)

ในการเขียนโปรแกรมดวยภาษา C ใหกับไมโครคอนโทรลเลอรนั้นตองคํานึงถึงชนิดของหนวยความจําและวิธีการเขาถึงดวย ซึ่งตางจากการเขียนบนเครื่องคอมพิวเตอร (PC ; Personal Computer) ที่สนใจเพียงชนิดของตัวแปรวาจะใชเก็บขอมูลประเภทใด สําหรับหนวยความจําในระบบไมโครคอนโทรลเลอร PIC นั้น จะมีหนวยความจําในการใชงาน 3 ประเภท ดังนี้

หน่วยความจาํโปรแกรมแบบแฟลช (Flash Program Memory) ปจจุบันหนวยความจําแบบแฟลช (Flash ROM) ไดถูกนํามาใชกับไมโครคอนโทรลเลอรหลายบริษัทหลายรุน โดยมีคุณสมบัติในการเขียนโปรแกรมและลบโปรแกรมไดมากกวา 100,000 คร้ัง ซึ่งการทํางานจะมีความเร็วสูงมาก เหมาะกับการพัฒนางานที่มีขนาดใหญ

หน่วยความจาํโปรแกรม (Data Memory RAM) หนวยความจําสวนน้ีมีไวใชเก็บขอมูลขณะประมวลผลโปรแกรม สามารถอานและเขียนขอมูลไดขณะมีไฟเลี้ยง แตเม่ือไมจายไฟเลี้ยงขอมูลตางๆ จะสลายไป หากหนวยความจําสวนนี้ไมพอใชงานจะตองตอหนวยความจําแรมภายนอกเพ่ิม (External RAM หรือ Data Memory) ปจจุบันเทคโนโลยีกาวหนาขึ้นมาก ชิปบางตัวจะมีการบรรจุหนวยความจําประเภท Data Memory เขาไปในชิปเลย

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 11

หน่วยความจาํแบบอีอีพรอม (EEPROM Data Memory) หนวยความจําแบบ EEPROM เปนหนวยความจําที่สามารถเขียนและลบโปรแกรมดวยกระแสไฟฟา ในหนวยความจําถาวรของ PROM (Programmable Read Only Memory) โดยภายในมีการพัฒนาให RAM (Random Access Memory) ที่มีหนวยความจําชั่วคราวใหเก็บขอมูลไดถาวรแบบหนวยความจํา ROM (Read Only Memory) โดยสามารถเขียนและลบโปรแกรมจํานวนหลายๆ คร้ังได

1.2.3 ตัวแปรและการประกาศตัวแปร

หนวยความจําแบบตัวแปร (Variable) คือ การใชแทนตัวเลข ตัวอักษร หรือขอความ เพื่อใชนํามาประมวลผลตามคําส่ังตางๆ ในโปรแกรม

การประกาศตัวแปร (Declaration) คือ การบอกใหคอมไพเลอรรูตัวแปรที่ใชปนชนิดอะไร ชื่ออะไร และเก็บไวที่สวนไหนของหนวยความจํา

ตารางท่ี 1.2 ประเภทขอมูลและขนาดตัวแปร ประเภทขอ้มูล ขนาด ค่าท ีเ่กบ็ได้

char 8 -128 ถึง +127signed char 8 -128 ถึง +127unsigned char 8 0 ถึง 255int 16 -32768 ถึง +32767signed int 16 -32768 ถึง +32767unsigned int 16 0 ถึง 65535short int 16 -32768 ถึง +32767signed short int 16 -32768 ถึง +32767unsigned short int 16 0 ถึง 65535long int 32 -2147483648 ถึง +2147483647 float 32 3.4E-38 ถึง 3.4E+38double 64 1.7E-308 ถึง 1.7E+308

Page 27: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

10 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

1.2.1 หน่วยประมวลผลกลาง หรือซีพยูี (Central Processing Unit; CPU)

ซีพียูเปรียบไดกับสมองของคนเรานั่นเอง เพราะการคํานวณตางๆ เกิดขึ้นที่นี่ ซีพียูประกอบดวยวงจรตางๆ หลายวงจร เชน วงจรควบคุมเวลาและระบบการทํางาน (Timing and Control Unit) ซึ่งจะทําหนาที่จัดการทั้งหมดของวงจรทั้งประมวลผลและควบคุมตามคําสั่งที่ไดรับ การคํานวณทางคณิตศาสตรและลอจิก (ALU ; Arithmetic and Logic Unit) โดยจะทําหนาท่ีคํานวณและประมวลผลทางคณิตศาสตรและระบบลอจิก วงจรถอดรหัสคําสั่ง (Instruction Decoder) จะทําหนาที่แปลงคําสั่งทั้งหมดใหเปนภาษาเครื่อง (Machine Language) วงจรควบคุมการทํางานของ Counter (Program Counter) วงจรควบคุมสัญญาณนาฬิกา (Oscillator) ตลอดจนหนวยความจําภายใน Register, Adder, Subtraction, Buffer และอื่นๆ ที่ใชในการเก็บขอมูลและการประมวลของซีพียู เปนตน

1.2.2 หน่วยความจาํ (Memory Unit)

ในการเขียนโปรแกรมดวยภาษา C ใหกับไมโครคอนโทรลเลอรนั้นตองคํานึงถึงชนิดของหนวยความจําและวิธีการเขาถึงดวย ซึ่งตางจากการเขียนบนเครื่องคอมพิวเตอร (PC ; Personal Computer) ที่สนใจเพียงชนิดของตัวแปรวาจะใชเก็บขอมูลประเภทใด สําหรับหนวยความจําในระบบไมโครคอนโทรลเลอร PIC นั้น จะมีหนวยความจําในการใชงาน 3 ประเภท ดังน้ี

หน่วยความจาํโปรแกรมแบบแฟลช (Flash Program Memory) ปจจุบันหนวยความจําแบบแฟลช (Flash ROM) ไดถูกนํามาใชกับไมโครคอนโทรลเลอรหลายบริษัทหลายรุน โดยมีคุณสมบัติในการเขียนโปรแกรมและลบโปรแกรมไดมากกวา 100,000 คร้ัง ซึ่งการทํางานจะมีความเร็วสูงมาก เหมาะกับการพัฒนางานที่มีขนาดใหญ

หน่วยความจาํโปรแกรม (Data Memory RAM) หนวยความจําสวนน้ีมีไวใชเก็บขอมูลขณะประมวลผลโปรแกรม สามารถอานและเขียนขอมูลไดขณะมีไฟเลี้ยง แตเม่ือไมจายไฟเล้ียงขอมูลตางๆ จะสลายไป หากหนวยความจําสวนนี้ไมพอใชงานจะตองตอหนวยความจําแรมภายนอกเพ่ิม (External RAM หรือ Data Memory) ปจจุบันเทคโนโลยีกาวหนาขึ้นมาก ชิปบางตัวจะมีการบรรจุหนวยความจําประเภท Data Memory เขาไปในชิปเลย

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 11

หน่วยความจาํแบบอีอีพรอม (EEPROM Data Memory) หนวยความจําแบบ EEPROM เปนหนวยความจําที่สามารถเขียนและลบโปรแกรมดวยกระแสไฟฟา ในหนวยความจําถาวรของ PROM (Programmable Read Only Memory) โดยภายในมีการพัฒนาให RAM (Random Access Memory) ที่มีหนวยความจําชั่วคราวใหเก็บขอมูลไดถาวรแบบหนวยความจํา ROM (Read Only Memory) โดยสามารถเขียนและลบโปรแกรมจํานวนหลายๆ คร้ังได

1.2.3 ตัวแปรและการประกาศตัวแปร

หนวยความจําแบบตัวแปร (Variable) คือ การใชแทนตัวเลข ตัวอักษร หรือขอความ เพื่อใชนํามาประมวลผลตามคําส่ังตางๆ ในโปรแกรม

การประกาศตัวแปร (Declaration) คือ การบอกใหคอมไพเลอรรูตัวแปรที่ใชปนชนิดอะไร ชื่ออะไร และเก็บไวที่สวนไหนของหนวยความจํา

ตารางท่ี 1.2 ประเภทขอมูลและขนาดตัวแปร ประเภทขอ้มูล ขนาด ค่าท ีเ่กบ็ได้

char 8 -128 ถึง +127signed char 8 -128 ถึง +127unsigned char 8 0 ถึง 255int 16 -32768 ถึง +32767signed int 16 -32768 ถึง +32767unsigned int 16 0 ถึง 65535short int 16 -32768 ถึง +32767signed short int 16 -32768 ถึง +32767unsigned short int 16 0 ถึง 65535long int 32 -2147483648 ถึง +2147483647 float 32 3.4E-38 ถึง 3.4E+38double 64 1.7E-308 ถึง 1.7E+308

Page 28: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

12 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

ประเภทของขอมูลที่ใชในการเก็บคาเลขจํานวนเต็ม มีความหมายดังนี้ Signed หมายถึง ใชเก็บคาตัวเลขจํานวนเต็มทั้งบวกและลบ เชน - Signed char เก็บคาขอมูล 8 บิต คือ -128 ถึง +127 - Signed int เก็บคาขอมูล 16 บิต คือ -32768 ถึง +32767 Unsigned หมายถึง ใชเก็บคาตัวเลขจํานวนเต็มเฉพาะคาบวกเทานั้น Short หมายถึง ใชเก็บคาตัวเลขจํานวนเต็มที่มีคานอยกวา int Long หมายถึง ใชเก็บคาตัวเลขจํานวนเต็มที่มีคามากกวา int ถึง 2 เทา Int หมายถึง ใชเก็บคาตัวเลขจํานวนเต็มทั้งบวกและลบ คือ เก็บคาขอมูล 16 บิต คือ

-32768 ถึง +32767 1.3 โครงสร้างของภาษา C

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

ตารางท่ี 1.3 ตัวดําเนินการเลขคณิตในภาษา C ตัวดาํเนินการ ความหมาย ตัวอย่าง

- การลบ X – Y + การบวก X + Y * การคูณ X * Y / การหาร X / Y

% การหารจะเอาเฉพาะเศษไว 8 % 5 = เศษ 3 เปนผลลัพธ -- การลดคาคร้ังละ 1 X -- หรือ -- X เหมือนกับ X = X - 1

++ การเพ่ิมคาคร้ังละ 1 X ++ หรือ ++ Y เหมอืนกบั Y = Y+1

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 13

ตัวอย่างท่ี 1.1 แสดงการใชตัวดําเนินการ

ตัวอย่าง การประเมนิผลตัวดาํเนินการ1. y= x + (z++); y = x + z 2. y = x + (++z); y = x + z +3. y+ = z; y = y + z4. y+ = (z++); y = y + z5. y- = 5; y = -56. y* = 5; y = y * 57. y* = 5 * (z++); y = y * 5 * z8. y/ = z; y = y / z9. y% = 5; y = y % 5

1.3.1 ข้ันตอนการทาํงานของตัวดาํเนินการในภาษา C

ในบางคร้ังนิพจนประกอบดวยตัวดําเนินการมากมาย ทําใหเกิดความยุงยากในการพิจารณาขั้นตอนการทํางานของตัวดําเนินการ ภาษา C จึงไดต้ังกฎเกี่ยวกับลําดับการทํางานกอนหลังของตัวดําเนินการ (Operator)

ตัวดาํเนินการ ลาํดับท่ี( ) 1++, -- 2* / % 3+- 4+=, -=, *=, /=, %= 5

Page 29: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

12 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

ประเภทของขอมูลที่ใชในการเก็บคาเลขจํานวนเต็ม มีความหมายดังนี้ Signed หมายถึง ใชเก็บคาตัวเลขจํานวนเต็มทั้งบวกและลบ เชน - Signed char เก็บคาขอมูล 8 บิต คือ -128 ถึง +127 - Signed int เก็บคาขอมูล 16 บิต คือ -32768 ถึง +32767 Unsigned หมายถึง ใชเก็บคาตัวเลขจํานวนเต็มเฉพาะคาบวกเทานั้น Short หมายถึง ใชเก็บคาตัวเลขจํานวนเต็มที่มีคานอยกวา int Long หมายถึง ใชเก็บคาตัวเลขจํานวนเต็มที่มีคามากกวา int ถึง 2 เทา Int หมายถึง ใชเก็บคาตัวเลขจํานวนเต็มทั้งบวกและลบ คือ เก็บคาขอมูล 16 บิต คือ

-32768 ถึง +32767 1.3 โครงสร้างของภาษา C

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

ตารางท่ี 1.3 ตัวดําเนินการเลขคณิตในภาษา C ตัวดาํเนินการ ความหมาย ตัวอย่าง

- การลบ X – Y + การบวก X + Y * การคูณ X * Y / การหาร X / Y

% การหารจะเอาเฉพาะเศษไว 8 % 5 = เศษ 3 เปนผลลัพธ -- การลดคาคร้ังละ 1 X -- หรือ -- X เหมือนกับ X = X - 1

++ การเพ่ิมคาคร้ังละ 1 X ++ หรือ ++ Y เหมอืนกบั Y = Y+1

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 13

ตัวอย่างท่ี 1.1 แสดงการใชตัวดําเนินการ

ตัวอย่าง การประเมนิผลตัวดาํเนินการ1. y= x + (z++); y = x + z 2. y = x + (++z); y = x + z +3. y+ = z; y = y + z4. y+ = (z++); y = y + z5. y- = 5; y = -56. y* = 5; y = y * 57. y* = 5 * (z++); y = y * 5 * z8. y/ = z; y = y / z9. y% = 5; y = y % 5

1.3.1 ข้ันตอนการทาํงานของตัวดาํเนินการในภาษา C

ในบางคร้ังนิพจนประกอบดวยตัวดําเนินการมากมาย ทําใหเกิดความยุงยากในการพิจารณาขั้นตอนการทํางานของตัวดําเนินการ ภาษา C จึงไดต้ังกฎเกี่ยวกับลําดับการทํางานกอนหลังของตัวดําเนินการ (Operator)

ตัวดาํเนินการ ลาํดับท่ี( ) 1++, -- 2* / % 3+- 4+=, -=, *=, /=, %= 5

Page 30: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

14 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

ตัวอย่างท่ี 1.2 แสดงลําดับการทํางานของตัวดําเนินการ

ตัวอย่าง ความหมาย1+2*3= 1+6

ตัวดําเนินการ * อยูลําดับสูงกวา + จงึตองคูณตัวเลขกอน (2*3) แลว จึงบวกเลข 1 ตามลําดับ

6/3+2-1= 2+2+1 = 3

ตัวดําเนินการ / อยูลําดับสูงกวา + และ – จึงใหทําจากซายไปขวา

6/3+2*3-4= 2+6-4

ตัวดําเนินการ / และ * อยูลําดับเดียวกัน โดยอยูสูงกวา + และ – จึงใหทําจากซายมือกอนคือ (/, *) และ (+, -) ตามลําดับ

ตารางท่ี 1.4 ตัวดําเนินการในภาษา C ตัวดาํเนินการ (Operator) ความหมาย (Description)

( ) Function call[ ] array element. structure member

- > pointer to a structure member! Logical~ one’s complement- Minus

++ Increment-- Decrement& address of= contents of* Multiply/ Divide

% Modulus+ Add

บทที่ 1 ไมโครคอนโทรลเลอร์ Arduino 15

ตัวดาํเนินการ (Operator) ความหมาย (Description) << (left shift) >> (right Shift) < less than

<= less than or equal to > greater than

>= greater than or equal to == (equality) != (not equal) & bit-by-bit AND ^ bit-by-bit XOR ! bit-by-bit-OR

&& logical AND II logical OR ?: Conditional = Assignment

* = /= %= += compound assignment -= <<= >>= compound assignment

&= ^= != compound assignment , comma operator

1.3.2 โครงสร้างของภาษา C คอมไพเลอร์ไดเร็คทีฟ (Compiler Directive)

เป็นส่วนของโปรแกรมท่ีบอกให้คอมไพเลอร์รวมไฟล์ต่างๆ ท่ีกําหนดไว้ในส่วนนีเ้ข้ากับโปรแกรมท่ีเขียนขึน้ โดยมีรูปแบบดงันี ้

Page 31: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

14 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

ตัวอย่างท่ี 1.2 แสดงลําดับการทํางานของตัวดําเนินการ

ตัวอย่าง ความหมาย1+2*3= 1+6

ตัวดําเนินการ * อยูลําดับสูงกวา + จงึตองคูณตัวเลขกอน (2*3) แลว จึงบวกเลข 1 ตามลําดับ

6/3+2-1= 2+2+1 = 3

ตัวดําเนินการ / อยูลําดับสูงกวา + และ – จึงใหทําจากซายไปขวา

6/3+2*3-4= 2+6-4

ตัวดําเนินการ / และ * อยูลําดับเดียวกัน โดยอยูสูงกวา + และ – จึงใหทําจากซายมือกอนคือ (/, *) และ (+, -) ตามลําดับ

ตารางท่ี 1.4 ตัวดําเนินการในภาษา C ตัวดาํเนินการ (Operator) ความหมาย (Description)

( ) Function call[ ] array element. structure member

- > pointer to a structure member! Logical~ one’s complement- Minus

++ Increment-- Decrement& address of= contents of* Multiply/ Divide

% Modulus+ Add

บทที่ 1 ไมโครคอนโทรลเลอร์ Arduino 15

ตัวดาํเนินการ (Operator) ความหมาย (Description) << (left shift) >> (right Shift) < less than

<= less than or equal to > greater than

>= greater than or equal to == (equality) != (not equal) & bit-by-bit AND ^ bit-by-bit XOR ! bit-by-bit-OR

&& logical AND II logical OR ?: Conditional = Assignment

* = /= %= += compound assignment -= <<= >>= compound assignment

&= ^= != compound assignment , comma operator

1.3.2 โครงสร้างของภาษา C คอมไพเลอร์ไดเร็คทีฟ (Compiler Directive)

เป็นส่วนของโปรแกรมท่ีบอกให้คอมไพเลอร์รวมไฟล์ต่างๆ ท่ีกําหนดไว้ในส่วนนีเ้ข้ากับโปรแกรมท่ีเขียนขึน้ โดยมีรูปแบบดงันี ้

Page 32: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

16 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

#include <ชื่อไฟล.h>

เชน #include <Servo.h> #include<Keypad.h> #include<LiquidCrystal.h>

ตัวโปรแกรม (Body) เปนสวนที่ผูใชตองเขียนขึ้นเอง ประกอบดวยคําส่ังตางๆ หรือฟงกชันตางๆ รวมกันเปนโปรแกรม โดยอยางนอยตองมีฟงกชัน void setup() , void loop () ในโปรแกรมการทํางาน

void setup () { คําสั่งตางๆ ทําหนาท่ีเปนเหมือน โปรแกรมยอย โดยจะถูกเรยีกใช เพียงครั้งเดียวตอนโปรแกรมเริ่มทาํงาน } void loop () { คําสั่งตางๆ ทําหนาท่ีเปนเหมือน โปรแกรมหลัก โดยจะถกูเรียกใช งานซ้ําๆ ตามเงือ่นไขที่เขียนไวในโปรแกรม }

ส่วนคาํอธิบายโปรแกรม (Comment Line) สวนนี้ใชอธิบายโปรแกรมเพื่อใหผูที่อานโปรแกรมเขาใจโปรแกรมไดงายขึ้น ดังตัวอยางตอไปนี้

/* ขอความอธบิายโปรแกรม */

เชน digitalWrite (LED1, HIGH) /*กําหนดคา LED1 ใหมีสถานะเปน 1 */ หรือ digitalWrite (LED1, LOW) // กําหนดคา LED1 ใหมีสถานะเปน 0

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 17

ตัวอย่างท่ี 1.3 แสดงโปรแกรมภาษา C และคําอธิบายโปรแกรม

1. //========Program Servo Motor ========2. #include <Servo.h> //เรียกไลบรารี servo.h 3. #include <LiquidCrystal.h> //เรียกไลบรารี liquidCrystal.h 4. LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 5. Servo setservo; 6. int pin = 5; 7. int val; 8. void setup() 9. { 10. lcd.begin(16, 2); //ใช lcd ขนาด 16 ตัวอักษร 2 แถว 11. lcd.print("SERVO MOTOR"); 12. setservo.attach(9); 13. } 14. void loop() 15. { 16. lcd.display(); //ให lcd แสดงผล 17. lcd.print(""); 18. delay(100); //หนวงเวลา 100 ms 19. val = analogRead(pin); 20. val = map(val, 0, 1023, 0, 179); //สเกลคา 10 บิตใหไดคามุมแลวเก็บคาไวที่ val 21. setservo.write(val); 22. delay(100); 23. lcd.noDisplay(); // lcd ไมแสดงผล 24. delay(100);25. }

Page 33: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

16 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

#include <ชื่อไฟล.h>

เชน #include <Servo.h> #include<Keypad.h> #include<LiquidCrystal.h>

ตัวโปรแกรม (Body) เปนสวนที่ผูใชตองเขียนขึ้นเอง ประกอบดวยคําส่ังตางๆ หรือฟงกชันตางๆ รวมกันเปนโปรแกรม โดยอยางนอยตองมีฟงกชัน void setup() , void loop () ในโปรแกรมการทํางาน

void setup () { คําสั่งตางๆ ทําหนาที่เปนเหมือน โปรแกรมยอย โดยจะถูกเรยีกใช เพียงครั้งเดียวตอนโปรแกรมเริ่มทาํงาน } void loop () { คําสั่งตางๆ ทําหนาที่เปนเหมือน โปรแกรมหลัก โดยจะถกูเรียกใช งานซ้ําๆ ตามเงือ่นไขที่เขียนไวในโปรแกรม }

ส่วนคาํอธิบายโปรแกรม (Comment Line) สวนนี้ใชอธิบายโปรแกรมเพื่อใหผูที่อานโปรแกรมเขาใจโปรแกรมไดงายขึ้น ดังตัวอยางตอไปนี้

/* ขอความอธบิายโปรแกรม */

เชน digitalWrite (LED1, HIGH) /*กําหนดคา LED1 ใหมีสถานะเปน 1 */ หรือ digitalWrite (LED1, LOW) // กําหนดคา LED1 ใหมีสถานะเปน 0

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 17

ตัวอย่างท่ี 1.3 แสดงโปรแกรมภาษา C และคําอธิบายโปรแกรม

1. //========Program Servo Motor ========2. #include <Servo.h> //เรียกไลบรารี servo.h 3. #include <LiquidCrystal.h> //เรียกไลบรารี liquidCrystal.h 4. LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 5. Servo setservo; 6. int pin = 5; 7. int val; 8. void setup() 9. { 10. lcd.begin(16, 2); //ใช lcd ขนาด 16 ตัวอักษร 2 แถว 11. lcd.print("SERVO MOTOR"); 12. setservo.attach(9); 13. } 14. void loop() 15. { 16. lcd.display(); //ให lcd แสดงผล 17. lcd.print(""); 18. delay(100); //หนวงเวลา 100 ms 19. val = analogRead(pin); 20. val = map(val, 0, 1023, 0, 179); //สเกลคา 10 บิตใหไดคามุมแลวเก็บคาไวที่ val 21. setservo.write(val); 22. delay(100); 23. lcd.noDisplay(); // lcd ไมแสดงผล 24. delay(100);25. }

Page 34: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

18 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

1.3.3 คาํส่ัง if แบบทางเดียว

ใชตรวจสอบนิพจนเง่ือนไข ถาเง่ือนไขเปนจริง หรือกลาวอีกนัยหนึ่งวาเง่ือนไขมีคาเปน 1 คอมพิวเตอรทําคําส่ังหลังนิพจนเงื่อนไขทันที

ตรวจสอบเงื่อนไข

จริง

เท็จ

คําส่ังภายใต IF

คําส่ังถัดไป

รูปที ่1.17 แสดงคําส่ัง if แบบทางเดียว

รปูแบบ

if (นิพจนเงื่อนไข) คําสั่ง ;

เชน if (x < y) printf (“%f < %f \ n”, x, y);

กรณีที่ตองการทํางานตามเงื่อนไขครั้งละหลายๆ คําส่ัง มีรูปแบบการเขียนโปรแกรม ดังนี้

รปูแบบ

if (นิพจนเงื่อนไข) { คําสั่งที่ 1 ;

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 19

คอมพิวเตอรจะปฏิบัติตามคําสั่งกลุมนี้หากนิพจนเงื่อนไขเปนจริง

คําสั่งที่ 2 ; - -

คําสั่งที่ n ; }

เชน

if(x<y) { clrscr(); gotoxy(20, 5); printf(“%f<%f\n”, x, y); }

1.3.4 คาํส่ัง if แบบสองทาง

ใชกําหนดเงื่อนไขดวยตัวดําเนินการเปรียบเทียบ แลวส่ังใหคอมพิวเตอรปฏิบัติตามเงื่อนไขที่กําหนดไวเงื่อนไขใดเงื่อนไขหนึ่ง ซึ่งมีรูปแบบดังนี้

รปูแบบ

if (นิพจนเงื่อนไข) { คําสั่งที่ 1 ; คําสั่งที่ 2 ; -

-

คําสั่งที่ n ; }

Page 35: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

18 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

1.3.3 คาํส่ัง if แบบทางเดียว

ใชตรวจสอบนิพจนเงื่อนไข ถาเง่ือนไขเปนจริง หรือกลาวอีกนัยหนึ่งวาเง่ือนไขมีคาเปน 1 คอมพิวเตอรทําคําส่ังหลังนิพจนเงื่อนไขทันที

ตรวจสอบเงื่อนไข

จริง

เท็จ

คําส่ังภายใต IF

คําส่ังถัดไป

รูปที ่1.17 แสดงคําส่ัง if แบบทางเดียว

รปูแบบ

if (นิพจนเงื่อนไข) คําสั่ง ;

เชน if (x < y) printf (“%f < %f \ n”, x, y);

กรณีที่ตองการทํางานตามเงื่อนไขครั้งละหลายๆ คําส่ัง มีรูปแบบการเขียนโปรแกรม ดังนี้

รปูแบบ

if (นิพจนเงื่อนไข) { คําสั่งที่ 1 ;

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 19

คอมพิวเตอรจะปฏิบัติตามคําสั่งกลุมนี้หากนิพจนเงื่อนไขเปนจริง

คําสั่งที่ 2 ; - -

คําสั่งที่ n ; }

เชน

if(x<y) { clrscr(); gotoxy(20, 5); printf(“%f<%f\n”, x, y); }

1.3.4 คาํส่ัง if แบบสองทาง

ใชกําหนดเงื่อนไขดวยตัวดําเนินการเปรียบเทียบ แลวส่ังใหคอมพิวเตอรปฏิบัติตามเงื่อนไขที่กําหนดไวเงื่อนไขใดเงื่อนไขหนึ่ง ซึ่งมีรูปแบบดังนี้

รปูแบบ

if (นิพจนเง่ือนไข) { คําสั่งที่ 1 ; คําสั่งที่ 2 ; -

-

คําสั่งที่ n ; }

Page 36: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

20 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

คอมพิวเตอรจะปฏิบัติตามคําสั่ง กลุมนี้หากนิพจนเงื่อนไขเปนเท็จ

else { คําสั่งที่ 1 ; คําสั่งที่ 2 ; - -

คําสั่งที่ n ; }

เชน

if(x<y) { clrscr(); gotoxy(20, 10); printf(“%f<%f\n”, x, y); } else { clrscr(); gotoxy(20, 10); printf(“%f >= %f\n”, x, y); }

ตรวจสอบเง่ือนไข

จริง

เท็จ

คําส่ังท่ี 1 คําสั่งท่ี 2

else

รูปที ่1.18 แสดงคําส่ัง if แบบสองทาง

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 21

จากไดอะแกรมในรูปที่ 1.18 หากคอมพิวเตอรพบนิพจนเงื่อนไขที่ทําใหผลลัพธเปนจริง จะไปปฏิบัติตามชุดคําส่ังที่ 1 หากไดผลลัพธเปนเท็จ จะทํางานตามชุดคําส่ังที่ 2 โดยคอมพิวเตอรจะตองเลือกปฏิบัติตามเงื่อนไขเพียงคําส่ังเดียวเทานั้น

1.3.5 คาํส่ัง if แบบหลายทาง

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

รปูแบบ

if (นิพจนเงื่อนไขที่ 1) { คําส่ังที่ 1 ; คําส่ังที่ 2 ; - - คําสั่งที่ n ; } else if (นิพจนเงื่อนไขที ่2) { คําส่ังที่ 1 ; คําส่ังที่ 2 ; - - คําส่ังที่ n ; }

คอมพิวเตอรปฏิบัติงานตามคําสั่งกลุมนี้เม่ือนิพจนเงื่อนไขที่ 1 เปนจริง

คอมพิวเตอรปฏิบัติงานตามคําสั่งกลุมนี้เม่ือนิพจนเงื่อนไขที่ 2 เปนจริง

Page 37: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

20 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

คอมพิวเตอรจะปฏิบัติตามคําสั่ง กลุมนี้หากนิพจนเงื่อนไขเปนเท็จ

else { คําส่ังที่ 1 ; คําส่ังที่ 2 ; - -

คําส่ังที่ n ; }

เชน

if(x<y) { clrscr(); gotoxy(20, 10); printf(“%f<%f\n”, x, y); } else { clrscr(); gotoxy(20, 10); printf(“%f >= %f\n”, x, y); }

ตรวจสอบเง่ือนไข

จริง

เท็จ

คําส่ังท่ี 1 คําสั่งท่ี 2

else

รูปที ่1.18 แสดงคําส่ัง if แบบสองทาง

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 21

จากไดอะแกรมในรูปที่ 1.18 หากคอมพิวเตอรพบนิพจนเงื่อนไขที่ทําใหผลลัพธเปนจริง จะไปปฏิบัติตามชุดคําส่ังที่ 1 หากไดผลลัพธเปนเท็จ จะทํางานตามชุดคําส่ังที่ 2 โดยคอมพิวเตอรจะตองเลือกปฏิบัติตามเงื่อนไขเพียงคําส่ังเดียวเทานั้น

1.3.5 คาํส่ัง if แบบหลายทาง

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

รปูแบบ

if (นิพจนเง่ือนไขที่ 1) { คําสั่งที่ 1 ; คําสั่งที่ 2 ; - - คําสั่งที่ n ; } else if (นิพจนเง่ือนไขที ่2) { คําสั่งที่ 1 ; คําสั่งที่ 2 ; - - คําสั่งที่ n ; }

คอมพิวเตอรปฏิบัติงานตามคําสั่งกลุมนี้เม่ือนิพจนเงื่อนไขที่ 1 เปนจริง

คอมพิวเตอรปฏิบัติงานตามคําสั่งกลุมนี้เม่ือนิพจนเงื่อนไขที่ 2 เปนจริง

Page 38: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

22 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

else if (นิพจนเงื่อนไขที ่n) { คําสั่งที่ 1 ; คําสั่งที่ 2 ; - - คําสั่งที่ n ; } else { คําสั่งที่ 1 ; คําสั่งที่ 2 ; - - คําสั่งที่ n ; }

เชน

if (x < y) { clrscr ( ); gotoxy (20, 10); printf (“%f < %f \ n”, x, y); } else if ((x > y) && (x > 0)) { clrscr ( ); gotoxy (20, 10); printf (“%f > %f and x > 0 \ n”, x, y); }

คอมพิวเตอรปฏิบัติงานตามคําสั่งกลุมนี้เม่ือเงื่อนไขทุกเงื่อนไขที่ผานมาเปนเท็จ

คอมพิวเตอรปฏิบัติงานตามคําสั่งกลุมนี้เม่ือนิพจนเงื่อนไขที่ n เปนจริง

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 23

else { clrscr ( ); gotoxy (20,10); printf (“%f = %f \ n”, x, y); }

1.3.6 คาํส่ัง for

คําส่ังนี้จะถูกนํามาใชในกรณีที่ตองการใหคอมพิวเตอรทํางานซํ้าโดยจะตองทราบคาจํานวนคร้ัง หรือเงื่อนไขที่แนนอนเพื่อควบคุมใหโปรแกรมหยุดทํางานซ้ํา

รปูแบบ

for (กําหนดคาเร่ิมตน ; นิพจนเงื่อนไข ; ปรับคาตัวนับเพ่ิมหรือลด) { คําส่ังที่ 1 ; คําส่ังที่ 2 ; - - คําส่ังที่ n ; }

เชน

for (X = 0 ; X < =10; X++) /*คาเพ่ิมขึ้น*/ for (X = 10 ; X > =0; X--) /*คาลดลง*/

1.3.7 คาํส่ัง for แบบลปูซ้อนลปู

ในกรณีที่ตองการประมวลผลงานที่มีลักษณะเปน 2 มิติ จําเปนที่จะตองใชคําส่ัง for แบบลูปซอนลูป ตัวอยางเชน หากตองการบวกเมตริก A ขนาด 4 x 4 กับเมตริก B ขนาด 4 x 4

Page 39: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

22 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

else if (นิพจนเงื่อนไขที ่n) { คําสั่งที่ 1 ; คําสั่งที่ 2 ; - - คําสั่งที่ n ; } else { คําส่ังที่ 1 ; คําส่ังที่ 2 ; - - คําสั่งที่ n ; }

เชน

if (x < y) { clrscr ( ); gotoxy (20, 10); printf (“%f < %f \ n”, x, y); } else if ((x > y) && (x > 0)) { clrscr ( ); gotoxy (20, 10); printf (“%f > %f and x > 0 \ n”, x, y); }

คอมพิวเตอรปฏิบัติงานตามคําสั่งกลุมนี้เม่ือเงื่อนไขทุกเงื่อนไขที่ผานมาเปนเท็จ

คอมพิวเตอรปฏิบัติงานตามคําสั่งกลุมนี้เม่ือนิพจนเงื่อนไขที่ n เปนจริง

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 23

else { clrscr ( ); gotoxy (20,10); printf (“%f = %f \ n”, x, y); }

1.3.6 คาํส่ัง for

คําส่ังนี้จะถูกนํามาใชในกรณีที่ตองการใหคอมพิวเตอรทํางานซํ้าโดยจะตองทราบคาจํานวนคร้ัง หรือเงื่อนไขที่แนนอนเพื่อควบคุมใหโปรแกรมหยุดทํางานซ้ํา

รปูแบบ

for (กําหนดคาเร่ิมตน ; นิพจนเง่ือนไข ; ปรับคาตัวนับเพ่ิมหรือลด) { คําสั่งที่ 1 ; คําสั่งที่ 2 ; - - คําสั่งที่ n ; }

เชน

for (X = 0 ; X < =10; X++) /*คาเพ่ิมขึ้น*/ for (X = 10 ; X > =0; X--) /*คาลดลง*/

1.3.7 คาํส่ัง for แบบลปูซ้อนลปู

ในกรณีที่ตองการประมวลผลงานที่มีลักษณะเปน 2 มิติ จําเปนที่จะตองใชคําส่ัง for แบบลูปซอนลูป ตัวอยางเชน หากตองการบวกเมตริก A ขนาด 4 x 4 กับเมตริก B ขนาด 4 x 4

Page 40: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

24 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

เชน

for (X = 0; X < 10 ; X++) { for (Y = 0; Y < 10 ; Y++) }

1.3.8 คาํส่ัง while

คําส่ังนี้เหมาะท่ีจะนํามาใชเม่ือตองการตรวจสอบเง่ือนไขกอน ถาเงื่อนไขเปนจริง จะเขาไปทํางานตามคําส่ังในลูป การวนรอบในลูปจะมีจํานวนรอบก่ีรอบก็ได การใชคําส่ังนี้ตองไมลืมเขียนคําส่ังสําหรับปรับเงื่อนไขใหเปนเท็จเมื่อตองการออกจากลูป มิฉะนั้นคอมพิวเตอรจะทํางานอยูในลูปตลอดไปแบบไมรูจบ

ตรวจสอบเงื่อนไข

จริง

เท็จ

คําส่ังในลูป

ออกจากลูป

รูปที ่1.19 แสดงคําส่ัง while

รปูแบบ

while (นิพจนเง่ือนไข) { คําสั่งที่ 1 ; คําสั่งที่ 2 ; - -

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 25

คําสั่งที่ n ; }

เชน

x = 1 ; while (x< 10) { beep=1; delay (100); beep=0; delay (100); }

ในกรณีที่มีคําส่ังเดียวไมจําเปนตองมีเคร่ืองหมาย { }

1.3.9 คาํส่ัง while แบบลปูซ้อนลปู

ในกรณีที่ใช while ลูปซอนกันเพื่อสรางขอมูลที่มีลักษณะ 2 มิติ เมื่อตองการยกเลิกการทํางานของลูปใน จะตองเปลี่ยนใหเงื่อนไขของลูปในเปนเท็จ หากตองการยกเลิกการทํางานของลูปนอกจะตองเปลี่ยนเงื่อนไขของลูปนอกใหเปนเท็จเชนกัน แตถาเงื่อนไขของลูปนอกเปนเท็จ จะหลุดออกจากการทํางานของทั้งสองลูปทันที

รปูแบบ กําหนดใหคําส่ัง while แบบลูปซอนลูปมีเงื่อนไขดังนี้

รอบท่ี A b c12 3 4 5 6

1 1 1 2 3 4

12 3 4 4 4

02 4 6 6 6

Page 41: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

24 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

เชน

for (X = 0; X < 10 ; X++) { for (Y = 0; Y < 10 ; Y++) }

1.3.8 คาํส่ัง while

คําส่ังนี้เหมาะท่ีจะนํามาใชเม่ือตองการตรวจสอบเง่ือนไขกอน ถาเง่ือนไขเปนจริง จะเขาไปทํางานตามคําส่ังในลูป การวนรอบในลูปจะมีจํานวนรอบก่ีรอบก็ได การใชคําส่ังนี้ตองไมลืมเขียนคําส่ังสําหรับปรับเงื่อนไขใหเปนเท็จเมื่อตองการออกจากลูป มิฉะนั้นคอมพิวเตอรจะทํางานอยูในลูปตลอดไปแบบไมรูจบ

ตรวจสอบเงื่อนไข

จริง

เท็จ

คําส่ังในลูป

ออกจากลูป

รูปที ่1.19 แสดงคําส่ัง while

รปูแบบ

while (นิพจนเงื่อนไข) { คําสั่งที่ 1 ; คําสั่งที่ 2 ; - -

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 25

คําสั่งที่ n ; }

เชน

x = 1 ; while (x< 10) { beep=1; delay (100); beep=0; delay (100); }

ในกรณีที่มีคําส่ังเดียวไมจําเปนตองมีเคร่ืองหมาย { }

1.3.9 คาํส่ัง while แบบลปูซ้อนลปู

ในกรณีที่ใช while ลูปซอนกันเพื่อสรางขอมูลที่มีลักษณะ 2 มิติ เม่ือตองการยกเลิกการทํางานของลูปใน จะตองเปลี่ยนใหเงื่อนไขของลูปในเปนเท็จ หากตองการยกเลิกการทํางานของลูปนอกจะตองเปลี่ยนเงื่อนไขของลูปนอกใหเปนเท็จเชนกัน แตถาเงื่อนไขของลูปนอกเปนเท็จ จะหลุดออกจากการทํางานของทั้งสองลูปทันที

รปูแบบ กําหนดใหคําส่ัง while แบบลูปซอนลูปมีเงื่อนไขดังนี้

รอบท่ี A b c12 3 4 5 6

1 1 1 2 3 4

12 3 4 4 4

02 4 6 6 6

Page 42: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

26 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

เชน

a = 1; b = 1; c = 0; while(a < = 3); { while(c < 5) { gotoxy (20, 10); printf ( “%d %d %d \ n”, a, b, c); c = c + 2; b++; } a++; gotoxy (20, 10); printf (“%d %d %d \ n”, a, b, c); }

1.3.10 คาํส่ัง do..while

คําส่ังนี้มีลักษณะคลายกับคําส่ัง while ตางกันตรงท่ีคอมพิวเตอรจะทําคําส่ังในลูปกอน 1 ครั้ง แลวจึงตรวจสอบนิพจนเงื่อนไข หากนิพจนเงื่อนไขเปนจริง จะกลับไปทําคําส่ังในลูปอีก แตถาเง่ือนไขเปนเท็จ จะออกจากลูปไปทํางานที่คําส่ังถัดไปทันที

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 27

ตรวจสอบเงื่อนไข

ชุดคําส่ังที่มีการทํางานกอนตรวจสอบเงื่อนไข

จริง

เท็จ

รูปที ่1.20 แสดงคําส่ัง do..while

รปูแบบ

do { คําสั่ง ; } while (ตรวจสอบเงื่อนไข)

จากที่กลาวมาแลว การใชลูปซอนลูปอาจใชโครงสรางลูปนอกและลูปในเปนคนละคําส่ังกันก็ได เชน ลูปในอาจใชคําส่ัง while ลูปนอกใชคําส่ัง do..while หรืออาจใชลูปนอกเปนคําส่ัง while ลูปในใชคําส่ัง for เปนตน ขึ้นอยูกับความตองการของผูเขียนโปรแกรม

1.3.11 คาํส่ัง do..while แบบลปูซ้อนลปู

คําส่ัง do..while แบบลูปซอนลูปจะตางจากคําส่ัง while แบบลูปซอนลูป คือ การทํางานในลูปนอกหรือลูปใน จะตองทํางานอยางนอย 1 คร้ังเสมอ ผูเขียนโปรแกรมไมสามารถบังคับหรือควบคุมใหผานลูปไปทําคําส่ังถัดไปไดเหมือนกรณีของคําส่ัง while ถึงแมวาเงื่อนไขครั้งแรกจะเปนเท็จก็ตาม

Page 43: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

26 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

เชน

a = 1; b = 1; c = 0; while(a < = 3); { while(c < 5) { gotoxy (20, 10); printf ( “%d %d %d \ n”, a, b, c); c = c + 2; b++; } a++; gotoxy (20, 10); printf (“%d %d %d \ n”, a, b, c); }

1.3.10 คาํส่ัง do..while

คําส่ังนี้มีลักษณะคลายกับคําส่ัง while ตางกันตรงท่ีคอมพิวเตอรจะทําคําส่ังในลูปกอน 1 ครั้ง แลวจึงตรวจสอบนิพจนเงื่อนไข หากนิพจนเงื่อนไขเปนจริง จะกลับไปทําคําส่ังในลูปอีก แตถาเง่ือนไขเปนเท็จ จะออกจากลูปไปทํางานที่คําส่ังถัดไปทันที

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 27

ตรวจสอบเงื่อนไข

ชุดคําส่ังที่มีการทํางานกอนตรวจสอบเงื่อนไข

จริง

เท็จ

รูปที ่1.20 แสดงคําส่ัง do..while

รปูแบบ

do { คําสั่ง ; } while (ตรวจสอบเงื่อนไข)

จากที่กลาวมาแลว การใชลูปซอนลูปอาจใชโครงสรางลูปนอกและลูปในเปนคนละคําส่ังกันก็ได เชน ลูปในอาจใชคําส่ัง while ลูปนอกใชคําส่ัง do..while หรืออาจใชลูปนอกเปนคําส่ัง while ลูปในใชคําส่ัง for เปนตน ขึ้นอยูกับความตองการของผูเขียนโปรแกรม

1.3.11 คาํส่ัง do..while แบบลปูซ้อนลปู

คําส่ัง do..while แบบลูปซอนลูปจะตางจากคําส่ัง while แบบลูปซอนลูป คือ การทํางานในลูปนอกหรือลูปใน จะตองทํางานอยางนอย 1 คร้ังเสมอ ผูเขียนโปรแกรมไมสามารถบังคับหรือควบคุมใหผานลูปไปทําคําส่ังถัดไปไดเหมือนกรณีของคําส่ัง while ถึงแมวาเงื่อนไขครั้งแรกจะเปนเท็จก็ตาม

Page 44: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

28 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

รปูแบบ กําหนดใหคําส่ัง do..while แบบลูปซอนลูป มีเงื่อนไขดังนี้

รอบท่ี A B C1 1 1 52 1 2 73 1 3 94 2 4 115 3 5 136 4 6 15

เชน

c = 5; a = b = 1; do { do { gotoxy (20, 10); printf (“%d %d %d \ n”, a, b, c); c = c + 2; b = b++; } while (b < 4); a++ } while (a < 5);

จากที่กลาวมาแลว การใชลูปซอนลูปอาจใชโครงสรางลูปนอกและลูปในเปนคนละคําส่ังกันก็ได เชน ลูปในอาจใชคําสั่ง while ลูปนอกใชคําสั่ง do..while หรืออาจใชลูปนอกเปนคําสั่ง while ลูปในใชคําสั่ง for เหลานี้ เปนตน ขึ้นอยูกับความตองการของผูเขียนโปรแกรม

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 29

1.3.12 คาํส่ัง switch

มีลักษณะคลายกับคําส่ัง if แบบหลายทางผิดกันตรงที่เม่ือนิพจนเงื่อนไขใดเง่ือนไขหนึ่งเปนจริง แลวคอมพิวเตอรจะปฏิบัติตามคําส่ังชุดนั้น และชุดคําส่ังอื่นๆ ถัดไปไดดวย ถาชุดคําส่ังนั้นไมมีคําส่ัง break ตอทายในแตละชุด สวนนิพจนเงื่อนไขในการทดสอบ จะตองเปนตัวอักขระ หรือตัวเลขจํานวนเต็มเทานั้น เชน char, int, short long เปนตน

รปูแบบ

switch (นิพจนเงื่อนไข) { case นิพจนเงื่อนไขที ่1; คําสั่งชุดท่ี 1; break; case นิพจนเงื่อนไขที ่2; คําสั่งชุดท่ี 2; break; - - case นิพจนเงื่อนไขที ่n; คําสั่งชุดท่ี n; break; }

1.3.13 อะเรย์ (Array)

เมื่อตองการประกาศตัวแปรหลายๆ ตัว เพื่อใชในการเก็บขอมูลหรือแสดงผล สามารถใชตัวแปรอะเรย (Array) เก็บกลุมของตัวแปรดังกลาวได เพราะตัวแปรแบบอะเรยสามารถเก็บตัวแปรไดจํานวนมากและยังเขาถึงกลุมขอมูลไดรวดเร็ว โดยมีรูปแบบดังนี้

Page 45: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

28 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

รปูแบบ กําหนดใหคําส่ัง do..while แบบลูปซอนลูป มีเงื่อนไขดังนี้

รอบท่ี A B C1 1 1 52 1 2 73 1 3 94 2 4 115 3 5 136 4 6 15

เชน

c = 5; a = b = 1; do { do { gotoxy (20, 10); printf (“%d %d %d \ n”, a, b, c); c = c + 2; b = b++; } while (b < 4); a++ } while (a < 5);

จากที่กลาวมาแลว การใชลูปซอนลูปอาจใชโครงสรางลูปนอกและลูปในเปนคนละคําส่ังกันก็ได เชน ลูปในอาจใชคําสั่ง while ลูปนอกใชคําสั่ง do..while หรืออาจใชลูปนอกเปนคําสั่ง while ลูปในใชคําสั่ง for เหลานี้ เปนตน ขึ้นอยูกับความตองการของผูเขียนโปรแกรม

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 29

1.3.12 คาํส่ัง switch

มีลักษณะคลายกับคําส่ัง if แบบหลายทางผิดกันตรงที่เม่ือนิพจนเง่ือนไขใดเง่ือนไขหนึ่งเปนจริง แลวคอมพิวเตอรจะปฏิบัติตามคําส่ังชุดนั้น และชุดคําส่ังอื่นๆ ถัดไปไดดวย ถาชุดคําส่ังนั้นไมมีคําส่ัง break ตอทายในแตละชุด สวนนิพจนเงื่อนไขในการทดสอบ จะตองเปนตัวอักขระ หรือตัวเลขจํานวนเต็มเทานั้น เชน char, int, short long เปนตน

รปูแบบ

switch (นิพจนเง่ือนไข) { case นิพจนเง่ือนไขที ่1; คําสั่งชุดที่ 1; break; case นิพจนเง่ือนไขที ่2; คําสั่งชุดที่ 2; break; - - case นิพจนเง่ือนไขที ่n; คําสั่งชุดที่ n; break; }

1.3.13 อะเรย์ (Array)

เมื่อตองการประกาศตัวแปรหลายๆ ตัว เพื่อใชในการเก็บขอมูลหรือแสดงผล สามารถใชตัวแปรอะเรย (Array) เก็บกลุมของตัวแปรดังกลาวได เพราะตัวแปรแบบอะเรยสามารถเก็บตัวแปรไดจํานวนมากและยังเขาถึงกลุมขอมูลไดรวดเร็ว โดยมีรูปแบบดังนี้

Page 46: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

30 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

รปูแบบท่ี 1

ชนิดของตัวแปร ชื่ออะเรย [ขนาดของอะเรย] char number [5];

เปนการประกาศตัวแปรอะเรย number จํานวน 5 ตัว ซึ่งเปนตัวแปรชนิดจํานวนเต็ม ขนาด 8 บิต โดยแตละตัวจะเก็บขอมูลได 1 ไบต ซึ่งตัวแปรอะเรยสามารถเก็บคาไดดังนี้

number[0] number[1] number[2] number[3] number[4] 1 byte 1 byte 1 byte 1 byte 1 byte

รปูแบบท่ี 2

int number[5] = {0, 1, 2, 3, 4};

เปนการประกาศตัวแปรอะเรย จํานวน 5 ตัว คือ number[0] ถึง number[4] โดยใหตัวแปรอะเรยมีคาเทากับ 0, 1, 2, 3 และ 4 ตามลําดับ

number[0] number[1] number[2] number[3] number[4] 0 1 2 3 4

รปูแบบท่ี 3

unsigned char number [ ] = {D, E, C, H, R, I, T}; unsigned char number [ ] = “DECHRIT”;

เปนการประกาศตัวแปรอะเรย number ที่ไมมีการระบุขนาดของอะเรย ในระบบจะจองหนวยความจําเทากับคาที่ประกาศไว คือ number [0] จะเก็บคา D, number [1] จะเก็บคา E, จนถึง number [6] จะเก็บคา T โดยมีขนาด 1 ไบต ตามลําดับ

number[0] number[1] number[2] number[3] number[4] number[5] number[6] D E C H R I T

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 31

1.4 โปรแกรม Arduino IDE โปรแกรมที่ใชงานกับไมโครคอนโทรเลอร Arduino มีชื่อเปนทางการวา Arduino IDE (IDE ; Integrated

Development Environment) ซึ่งสามารถใชงานไดทั้งบนระบบปฏิบัติการ Window (XP Vista 7 8) ทั้ง 32 และ 64 บิต, Mac OS X และ Linux ก็สามารถใชได เรียกไดวาใชงานไดกับทุกระบบปฏิบัติการเลยทีเดียว และยังเปนอิสระจากการทํางานของระบบปฏิบัติการหรือ OS ทุกชนิด ทําใหไมตองมีการ Install โปรแกรม โดยโปรแกรมสามารถดาวนโหลด (Download) หลังจากนั้นทําการ Unzip โปรแกรม ไวใน Directory ที่ตองการ สําหรับการลงโปรแกรมมีขั้นตอนดังนี้

รูปที่ 1.21 สัญลักษณ์โปรแกรม Arduino IDE

1. ติดต้ังโปรแกรมแลวทําการคลิกที่ I Agree

Page 47: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

30 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

รปูแบบท่ี 1

ชนิดของตัวแปร ชื่ออะเรย [ขนาดของอะเรย] char number [5];

เปนการประกาศตัวแปรอะเรย number จํานวน 5 ตัว ซึ่งเปนตัวแปรชนิดจํานวนเต็ม ขนาด 8 บิต โดยแตละตัวจะเก็บขอมูลได 1 ไบต ซึ่งตัวแปรอะเรยสามารถเก็บคาไดดังนี้

number[0] number[1] number[2] number[3] number[4] 1 byte 1 byte 1 byte 1 byte 1 byte

รปูแบบท่ี 2

int number[5] = {0, 1, 2, 3, 4};

เปนการประกาศตัวแปรอะเรย จํานวน 5 ตัว คือ number[0] ถึง number[4] โดยใหตัวแปรอะเรยมีคาเทากับ 0, 1, 2, 3 และ 4 ตามลําดับ

number[0] number[1] number[2] number[3] number[4] 0 1 2 3 4

รปูแบบท่ี 3

unsigned char number [ ] = {D, E, C, H, R, I, T}; unsigned char number [ ] = “DECHRIT”;

เปนการประกาศตัวแปรอะเรย number ที่ไมมีการระบุขนาดของอะเรย ในระบบจะจองหนวยความจําเทากับคาที่ประกาศไว คือ number [0] จะเก็บคา D, number [1] จะเก็บคา E, จนถึง number [6] จะเก็บคา T โดยมีขนาด 1 ไบต ตามลําดับ

number[0] number[1] number[2] number[3] number[4] number[5] number[6] D E C H R I T

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 31

1.4 โปรแกรม Arduino IDE โปรแกรมที่ใชงานกับไมโครคอนโทรเลอร Arduino มีชื่อเปนทางการวา Arduino IDE (IDE ; Integrated

Development Environment) ซึ่งสามารถใชงานไดทั้งบนระบบปฏิบัติการ Window (XP Vista 7 8) ทั้ง 32 และ 64 บิต, Mac OS X และ Linux ก็สามารถใชได เรียกไดวาใชงานไดกับทุกระบบปฏิบัติการเลยทีเดียว และยังเปนอิสระจากการทํางานของระบบปฏิบัติการหรือ OS ทุกชนิด ทําใหไมตองมีการ Install โปรแกรม โดยโปรแกรมสามารถดาวนโหลด (Download) หลังจากนั้นทําการ Unzip โปรแกรม ไวใน Directory ที่ตองการ สําหรับการลงโปรแกรมมีขั้นตอนดังนี้

รูปที่ 1.21 สัญลักษณ์โปรแกรม Arduino IDE

1. ติดต้ังโปรแกรมแลวทําการคลิกที่ I Agree

Page 48: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

32 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

2. คลิกเลือกการติดต้ังโปรแกรม แลวทําการคลิกที่ Next

3. คลิก Browse เพื่อเลือกโฟลเดอรที่จะทําการติดต้ังโปรแกรม แลวทําการคลิกท่ี Install

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 33

4. เม่ือโปรแกรม Install อยู จะมีคําถามวาจะติดต้ัง Arduino USB หรือไม โดยใหกดคลิกเลือก Install เพื่อทําการติดต้ัง Driver ของ USB

5. โปรแกรม Arduino IDE ติดต้ังเสร็จเรียบรอย หลังจากนั้นคลิก Close

Page 49: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

32 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

2. คลิกเลือกการติดต้ังโปรแกรม แลวทําการคลิกท่ี Next

3. คลิก Browse เพื่อเลือกโฟลเดอรที่จะทําการติดต้ังโปรแกรม แลวทําการคลิกที่ Install

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 33

4. เม่ือโปรแกรม Install อยู จะมีคําถามวาจะติดต้ัง Arduino USB หรือไม โดยใหกดคลิกเลือก Install เพื่อทําการติดต้ัง Driver ของ USB

5. โปรแกรม Arduino IDE ติดต้ังเสร็จเรียบรอย หลังจากนั้นคลิก Close

Page 50: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร

34 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1

6. โปรแกรม Arduino IDE พรอมใชงาน

บทที่ 2 การควบคุมการทํางานของอินพุตและเอาตพุต 35

2.1 การเช่ือมต่อไมโครคอนโทรลเลอร์ Arduino กับหลอด LED

2.2 การเช่ือมต่อไมโครคอนโทรลเลอร์ Arduino กับ หลอด LED 7-segment

2.3 การเช่ือมต่อไมโครคอนโทรลเลอร์ Arduino กับคีย์สวิตช์แบบแมทริกซ์

2.4 การเช่ือมต่อไมโครคอนโทรลเลอร์ Arduino กับโมดลู LCD

Page 51: คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino · vi คัีร มภ งานการใชไมโครคอนโทรลเลอร