Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore ວິຊາ ไมโครคอนโทรลเลอร์และการประยุกต์

ວິຊາ ไมโครคอนโทรลเลอร์และการประยุกต์

Published by lavanh5579, 2021-08-24 08:41:58

Description: ວິຊາ ไมโครคอนโทรลเลอร์และการประยุกต์

Search

Read the Text Version

21 - ผลการทดสอบทัง้ ภาคทฤษฏแี ละปฏิบตั เิ ปนชว งๆ ไดแ ก สอบยอย สอบกลางภาค และสอบปลาย ภาค - ผลการประเมนิ ประสิทธผิ ลของรายวชิ า 3. การปรบั ปรุงการสอน - ทบทวนและปรบั ปรงุ วธิ ีการสอนจากผลการประเมินประสิทธผิ ลของรายวชิ า - รายงานผลการดำเนนิ การของรายวชิ า (มคอ. 5 ทุกภาคการศึกษา - มีการแลกเปล่ียนเรียนรูเพื่อหารือปญ หาการเรียนรูข องนักศกึ ษาและรว มกันหาแนวทางแกไ ขกับ คณาจารยในสาขาวชิ า - ตดิ ตามและเขารับการฝกอบรมเทคโนโลยที างดา นไมโครคอนโทรลเลอร เพอื่ นำองคค วามรทู ่ี ไดม าปรบั รายวชิ าใหทนั ตอสถานการณป จจบุ นั 4. การทวนสอบมาตรฐานผลสมั ฤทธร์ิ ายวชิ าของนักศกึ ษา - ทวนสอบจากคะแนนขอสอบ โดยการสงั เกตการณ สัมภาษณ สอบถาม และตรวจผลการประเมิน การเรยี นรขู องนักศกึ ษา หรอื จากงานที่มอบหมาย - ทวนสอบจากผลการเรยี นรูแตล ะดา นของรายวิชา โดยมีคณะกรรมการทวนสอบซ่ึงแตงต้ังจาก คณะเทคโนโลยี 5. การดำเนินการทบทวนและการวางแผนปรบั ปรุงประสิทธิผลของรายวิชา - วางแผนการปรับปรุงการสอนและรายละเอยี ดวิชา เพื่อใหทันสมัยและตามทันเทคโนโลยใี หม โดย ปรับปรุงรายวชิ าทุกป ตามแบบประเมนิ ผูสอน

แผนบรหิ ารการสอนประจำบทท่ี 1 ไมโครคอนโทรลเลอรเ บ้อื งตน หวั ขอเนื้อหา 1. ประเภทของไมโครคอนโทรลเลอร 1.1 ไมโครคอนโทรลเลอรต ระกูล MCS-51 1.2 ไมโครคอนโทรลเลอรต ระกูล PIC 1.3 ไมโครคอนโทรลเลอรต ระกลู AVR 1.4 Arduino 1.5 NodeMCU 2. โครงสรา งบอรด Arduino Uno R3 3. การดาวโหลดและใชง านโปรแกรม Arduino IDE 3.1 การดาวโหลดและใชง านโปรแกรม Arduino IDE แบบไมติดตงั้ 3.2 การดาวโหลดและใชง านโปรแกรม Arduino IDE แบบตดิ ต้งั 4. ขนั้ ตอนการพัฒนาโปรแกรมโดยใชโปรแกรม Arduino IDE และบอรด Arduino Uno R3 5. บทสรุป แบบฝก หดั ทายบท เอกสารอา งองิ วตั ถุประสงคเชงิ พฤติกรรม เมอ่ื ผูเรยี น เรยี นจบบทนแี้ ลวผูเ รยี นควรมคี วามสามารถ ดังนี้ 1. อธบิ ายเกยี่ วกับไมโครคอนโทรเลอรได 2. จำแนกประเภทของไมโครคอนโทรเลอรได 3. ตดิ ต้งั โปรแกรม Arduino IDE สำหรับการพัฒนาโปรแกรมได 4. เช่ือมปฏิสมั พันธการทำงานระหวางโปรแกรม Arduino IDE และ บอรด Arduino Uno R3 ได 5. มเี จตคติท่ดี ีตอการจดั การเรยี นการสอนในวชิ าไมโครคอนโทรลเลอรและการประยุกตใช งาน

24 วิธกี ารสอนและกิจกรรมการเรยี นการสอนประจําบท 1. บรรยายเนือ้ หาในแตล ะหวั ขอ พรอมยกตวั อยา งประกอบ โดยใชเ อกสารคำสอน และสื่อ power point 2. ทดลองปฏบิ ัตจิ รงิ เร่ืองการติดตง้ั โปรแกรม Arduino IDE 3. ทดลองปฏบิ ตั จิ ริง เร่ืองการอัพโหลดไฟลโ ปรแกรมจาก Arduino IDE ลงโปรแกรม Proteus 4. ผูสอนสรปุ เนอื้ หา 5. ทำแบบฝก หดั เพ่ือทบทวนบทเรยี น 6. เปดโอกาสใหผ เู รียนถามขอสงสัย 7. ผูส อนทำการซักถาม สื่อการเรยี นการสอน 1. เอกสารคำสอนวิชาการประยุกตใชง านไมโครคอนโทรลเลอร 2. สอ่ื power point การวัดผลและการประเมิน 1. การเขาเรยี นตรงตอ เวลา และการแตง กาย 2. ความรว มมือและความรับผิดชอบตอ การเรียน 3. การถาม-ตอบ 4. การสง งานที่ไดรบั มอบหมายภายในเวลาทกี่ ำหนด 5. การทำแบบฝกหดั ทม่ี ีความถูกตองไมนอ ยกวา 80%

บทท่ี 1 ไมโครคอนโทรลเลอรเบือ้ งตน ไมโครคอนโทรลเลอร (Microcontroller) เกิดจากคำศัพท 2 คำคือ ไมโคร (µ) และ คอนโทรลเลอร โดยที่ความหมายของไมโครคือคาของ 10-6 หรือ 0.000001 ซึ่งเปนหนวยที่มีขนาด เล็กมาก และความหมายของคอนโทรลเลอรคือ หนวยประมวลผล ดังนั้นไมโครคอนโทรลเลอรคือ หนวยประมวลผลที่มีขนาดเล็กที่สามารถนำไปใชสำหรับควบคุมอุปกรณอิเล็กทรอนิกสเพื่อชวยลด ความซับซอนของวงจร และเปนตัวชวยแกไขการทำงานของวงจรใหงายมากยิ่งขึ้น (สนธยา นงนุช, 2560) ยกตัวอยางเชนสัญญาณไฟตามสี่แยกไฟแดงที่ใชแอลอีดี 7 สวนเปนอุปกรณสำหรับนับเวลา ถอยหลังเพื่อกำหนดสัญญาณไฟของแตละแยก หากตัวควบคุมสัญญาณไฟเปนเพียงอุปกรณ อิเล็กทรอนิกสทั่วไปที่ไมไดใชไมโครคอนโทรลเลอร และตองการปรับเวลาควบคุมการทำงานใหม จำเปน ตองปรับแกว งจรใหม แตใ นทางกลบั กนั หากตัวควบคุมการใชง านเปนไมโครคอนโทรลเลอรแลว การปรับแกจะเปนเพียงปรับคำสั่งที่ชิฟของไมโครคอนโทรลเลอรโดยไมจำเปนตองปรับแกวงจร ซึ่ง จากตัวอยางที่อธิบายขางตนสรุปไดวาหากไมมีไมโครคอนโทรลเลอรแลวอุปกรณอิเล็กทรอนิกสทุก ประเภทยังคงสามารถใชงานไดตรงตามวัตถุประสงคข องผูใ ชงาน แตข อดขี องไมโครคอนโทรลเลอรคือ จะชว ยใหก ารควบคมุ การทำงานอปุ กรณอิเลก็ ทรอนกิ สส ามารถทำไดงา ยมากย่ิงขึ้น เนื่องจากสวนประกอบที่สำคัญประกอบไปดวย หนวยประมวลผล หนวยความจำชั่วคราว (RAM) หนวยความจำถาวร (ROM หรือ หนวยความจำแบบแฟลช พอรตอินพุต (สวนนำเขาของ สญั ญาณ และพอรต เอาตพุต (สวนสง ออกของสัญญาณ ถูกบรรจุไวภ ายในไมโครคอนโทรลเลอรครบ หมดแลว จึงชวยอำนวยความสะดวกแกผูใชงานเปนอยางมาก โดยผูใชงานเพียงแคตออุปกรณ ภายนอกเขากับตัวไมโครคอนโทรลเลอรเทานั้น แลวสามารถเขียนโปรแกรมลงที่ชิฟของ ไมโครคอนโทรลเลอรเ พือ่ ควบคุมการทำงานอุปกรณภ ายนอกดงั กลา วได นอกเหนือจากนั้นโครงสรางของไมโครคอนโทรลเลอรบางรุนยังมีโหมดการทำงานที่สำคัญ (Tero & Kimmo, 2011) เชน การเกิดอินเทอรรัพ หรือการขัดจังหวะการทำงานซึ่งเปนโหมดที่นิยม นำมาใชสำหรับควบคุมระบบงานที่ตองดำเนินการเมื่อมีเหตุการณบางอยางเกิดขึ้นโดยเหตุการณ ดังกลา วนีไ้ มสามารถคาดการณวัน และเวลาทจี่ ะเกิดข้ึนได การสรางไทมเมอร และเคานเตอร เพ่ือใช สำหรับจับหรือนับเวลา และการอาน และเขียนขอมูลผานหนวยความจำอีอีพรอมเพื่อใชสำหรับ จดั เกบ็ หรอื เรียกใชง านในภายหลังได เปนตน

26 การควบคุมไมโครคอนโทรลเลอรสามารถทำไดผานกระบวนการโปรแกรมคอมพิวเตอร ซึ่ง ภาษาทใี่ ชส ำหรับการเขียนโปรแกรมถูกพฒั นามาหลากหลายภาษาประกอบไปดว ย ภาษาแอสเซมบลี ภาษาเบสิก และภาษาซี เปน ตน โดยแตล ะภาษามีขอ ดี และขอ เสยี ทีแ่ ตกตางกัน เชนภาษาแอสเซมบลี (มงคล ลี้ประกอบบุญ, 2549) ที่เปนภาษาที่เกาแกที่สุดมีขอดีคือสามารถเขาถึงและจัดการกับระบบ ฮารด แวรไ ดเ ปนอยางดี สงผลใหความเร็วในการทำงานสูง แตข อเสียคอื ความซบั ซอ นของภาษาที่สูงซ่ึง หากนักพัฒนาตองการใชภาษาแอสเซมบลีสำหรับควบคุมไมโครคอนโทรลเลอรจำเปนตองเรียนรู รายละเอียดเชิงลกึ เก่ียวกับโครงสรา งของไมโครคอนโทรลเลอรร นุ ทต่ี องการควบคมุ เปน อยา งดี ในทาง กลับกันหากพัฒนาดวยภาษาซี หรือภาษาเบสิกพบวาความซับซอนของภาษาลดลงเปนอยางมาก เนื่องจากโครงสรางของตัวภาษามีความใกลเคียงกับภาษามนุษย ดังนั้นจึงงายแกการพัฒนาระบบ อยางไรก็ตามขอเสยี ของทงั้ สองภาษาคือความเร็วของการทำงานระบบลดลง โดยเอกสารคำสอนเลมน้ี เลือกใชบอรด Arduino Uno R3 เปนหลัก ซอฟแวรที่ใชสำหรับควบคุมบอรด Arduino ทุกตระกูล คือ Arduino IDE ที่ใชภาษาที่มีโครงสรางพื้นฐานมาจากภาษาซี ดังนั้นภาษาที่ใชสำหรับควบคุม ไมโครคอนโทรลเลอรสำหรับเอกสารคำสอนเลม นีจ้ ึงมีพน้ื ฐานจากภาษาซีท่มี ีขอดคี ืองา ยแกการพัฒนา (ประภาส พุมพวง, 2561) จึงเหมาะสำหรับผูเรียนที่จะนำไมโครคอนโทรลเลอรไปประยุกตใชงาน ตา งๆ ไดโ ดยงา ย เชนใชไ มโครคอนโทรลเลอรส ำหรับควบคุมอุปกรณอิเล็กทรอนิกส เปน ตน อยางไรก็ ตามเพื่อใหผูอานไดฝกใชบอรดตระกูลอื่นสำหรับควบคุมอุปกรณภายนอก ผูเขียนจึงไดเพิ่มเนื้อหา เกีย่ วกับการตดิ ตง้ั และใชง านบอรด Raspberry pi แบบเบื้องตน ไวใ นภาคผนวก ข การเขียนโปรแกรมสำหรบั ควบคุมบอรดไมโครคอนโทรลเลอรทุกประเภทจำเปนตองเขยี นผา น อุปกรณคอมพิวเตอร และนำไปผานกระบวนการแปลภาษาเพื่อแปลงจากภาษาเร่ิมตน ที่นักพัฒนาได เขียนไวเปนภาษาเครื่องเพื่อที่จะสงไปยังไมโครคอนโทรลเลอร เนื่องจากไมโครคอนโทรลเลอรจะ เขา ใจคำส่งั ทอ่ี ยใู นรปู แบบของภาษาเคร่ืองเทานนั้ 1. ประเภทของไมโครคอนโทรลเลอร ไมโครคอนโทรลเลอรถูกผลิตออกมาเปนจำนวนมากหลายตระกูล ซึ่งจะมีชื่อเรียกที่แตกตาง กนั ออกไปข้ึนอยูกับบริษัทผผู ลิต นอกเหนอื จากนั้นไมโครคอนโทรลเลอรท่ีอยูในตระกูลเดียวกันก็จะมี อีกหลายรนุ โดยท่แี ตละรุนจะมคี ุณสมบัตทิ ี่แตกตา งกนั ออกไป เชนความเร็วประมวลผล ขนาดความจุ ของหนวยความจำ หรือจำนวนพอรต เปนตน สำหรับหัวขอนี้จะกลาวถึงตัวอยางบางประเภทของ ไมโครคอนโทรลเลอร

27 1.1 ไมโครคอนโทรลเลอรตระกลู MCS-51 ไมโครคอนโทรลเลอรตระกูล MCS-51 ถูกพัฒนาโดยบริษัท Intel ในชวงป ค.ศ. 1980 ซึ่ง เปนยุคแรกๆ ของไมโครคอนโทรลเลอร จุดเดนคือมีสถาปตยกรรมและฟงกชันการใชงานไมซับซอน อยางไรก็ตามปญหาของไมโครคอนโทรลเลอรตระกูลนี้จะเกี่ยวกับความเร็วในการประมวลผล จึง ไดรับความนิยมลดลงในปจจุบัน ตัวอยางของไมโครคอนโทรลเลอรตระกูลนี้คือชิฟ ไมโครคอนโทรลเลอร MCS-51 เบอร AT89C51 รูปท่ี 1.1 ตวั อยา งชิฟไมโครคอนโทรลเลอร MCS-51 เบอร AT89C51 ทม่ี า: เดชฤทธ์ิ มณธี รรม, 2559 1.2 ไมโครคอนโทรลเลอรต ระกูล PIC PIC ยอ มาจากคำวา Peripheral Interface Controller เปนไมโครคอนโทรลเลอรอ กี ตระกูล หนึ่งที่ถูกพัฒนาโดยบริษัท General Instrument หรือ Microchip (ทีมงานสมารทเลิรนนิ่ง, 2554) ในปจ จบุ นั ซึ่งเกิดขนึ้ ในชว ง ป ค.ศ. 1977 จดุ เดนของ PIC คือมคี วามถขี่ องสัญญาณนาิกาสูง โดยใน บางรุนมีความถี่สูงถึง 20 MHz หมายความวาในทุกหนึ่งคำสั่งใชเวลาในการเขาถึงเพียง 0.25 ไมโครวนิ าที อยางไรก็ตามขอเสยี ของไมโครคอนโทรลเลอรตระกูลน้คื ือไมสามารถขยายหนวยความจำ ได ดังนั้น PIC จงึ เหมาะทจี่ ะนำไปใชง านเล็กๆ ที่ไมต องใชก ำลังการประมวลผลและหนวยความจำที่ไม สูงมาก ตัวอยางของไมโครคอนโทรลเลอรตระกูล PIC คือชิฟไมโครคอนโทรลเลอร PIC เบอร PIC16F877A รูปท่ี 1.2 ตัวอยา งชิฟไมโครคอนโทรลเลอร PIC เบอร PIC16F877A ที่มา: อลงกรณ พรมที, 2551

28 1.3 ไมโครคอนโทรลเลอรต ระกูล AVR AVR คือไมโครคอนโทรลเลอรที่ถูกพัฒนาโดยบริษัท Atmel ในชวงป ค.ศ. 1996 เปน ไมโครคอนโทรลเลอรยุคแรกที่ใชหนวยความจำแบบแฟลช (หนวยความจำแบบแฟลช หรือ Electrically Erasable Programnable Read Only Memory: EEPROM คือเทคโนโลยีที่เกิดจาก การนำขอดีของรอม และแรมมารวมกันทำใหหนวยความจำแบบแฟลชสามารถเก็บขอมูลไดเหมือน ฮารดดิสก ซึ่งขอดีคือมีราคาที่ถูกและการประมวลผลที่รวดเร็ว (เอกชัย มะการ, 2552) ตัวอยางของ ไมโครคอนโทรลเลอรตระกลู AVR คอื ชิฟไมโครคอนโทรลเลอร AVR เบอร ATMEGA328 รปู ท่ี 1.3 ตัวอยา งชิฟไมโครคอนโทรลเลอร AVR เบอร ATMEGA328 ทม่ี า: ผูเ ขยี น 1.4 บอรด Arduino Arduino คือบอรดไมโครคอนโทรลเทอรที่ใช AVR มาพัฒนาใหเปนแพลตฟอรมแบบเปด (Open Source จดุ เริ่มตนของ Arduino เกดิ จากการพัฒนาตอจาก Wiring ซ่ึงเปนแพลตฟอรมแบบ เปดที่ใชไมโครคอนโทรลเลอรตระกูล AVR อีกตัวหนึ่ง (วิลาศิณี วิสิทธิ์กาศ วรพจน กรแกววัฒนกุล และ ชยั วัฒน ลมิ้ พรจิตรวไิ ล, 2551) แตเ นื่องจาก Wiring ใชช ิฟ AVR เบอร ATMEGA 128 ซง่ึ เปนชิฟ ที่มีหนวยความจำสูง และพอรตจำนวนมากสงผลใหบอรดมีขนาดใหญ จึงไมเหมาะกับงานขนาดเล็ก และผูใชง านทเ่ี ร่มิ ศึกษาการใชงาน ดังนัน้ ทีมพัฒนาจึงนำ Wiring มาปรบั ปรงุ ใหมใหมีขนาดเล็กลงโดย ใชชิฟ AVR ที่มีคุณสมบัติลดลงเชน MEGA8 หรือ MEGA168 เปนตน จึงไดเปนบอรด ไมโครคอนโทรเลอรชนิดใหมที่ชื่อ Arduino ปจจุบันบอรดชนิดนี้ไดรับความนิยมสูงมากเนื่องจากมี ไลบรารี และแหลงคำสั่งของโปรแกรมถูกเผยแพรใหใชงานไดโดยไมมีคาใชจาย สงผลใหการพัฒนา ชิ้นงานทำไดงายมากยิ่งขึ้น สำหรับซอฟตแวรที่ใชสำหรับการพัฒนาคือ โปรแกรม Arduino IDE ซึ่ง สามารถดาวโหลดใชงานไดโดยไมมีคาใชจาย ภาษาที่ใชสำหรับการพัฒนาคือภาษา c++ (อานวา ซีพลัสพลัส ซึ่งเปนภาษาที่มีรากฐานมาจากภาษาซี ตัวอยางบอรด Arduino คือ Arduino Uno R3 ซ่งึ เปนบอรดหลกั ทีใ่ ชง านในเอกสารเลมนี้

29 รปู ท่ี 1.4 ตวั อยางบอรด Arduino Uno R3 ท่มี า: ผเู ขยี น 1.5 NodeMCU NodeMCU คือบอรดไมโครคอนโทรลเลอรที่ไดรับความนิยมสูงมากอีกประเภทหน่ึง เนื่องมาจากมีจุดเดนอยูที่บอรดสามารถรองรับระบบสื่อสารแบบไรสาย (ไวไฟ ภายในตัว จึงทำให สามารถเช่อื มตอกับระบบเครือขายได ซึ่งสามารถใชงานไดท้ังเปนแบบเครื่องใหบริการ และเครื่องลูก ขาย สำหรับสถาปตยกรรมของบอรด NodeMCU จะคลายคลึงกับบอรด Arduino เปนอยางมาก การเขียนโปรแกรมเพื่อควบคุมบอรดจะใชโปรแกรม Arduino IDE เชนเดียวกับบอรด Arduino นอกเหนือจากนั้นคำสั่งตางๆที่ใชควบคุม NodeMCU สามารถใชคำสั่งเดียวกับคำสั่งควบคุมบอรด Arduino โดยมีบางคำสั่งที่แตกตางกันเชน คำสั่งเกี่ยวกับการเชื่อมระบบเครือขายซึ่งไมมีในบอรด Arduino (บอรด Arduino สามารถเช่ือมตอกับระบบเครือขายไดโดยใชอุปกรณเสริมสำหรับเชื่อมตอ กบั บอรด) หรอื ตำแหนง ขาท่ไี มตรงกนั เปนตน ตัวอยา งบอรด NodeMCU คือ บอรด ESP8266 รูปท่ี 1.5 ตวั อยา งบอรด NodeMCU ESP8266 ท่มี า: ผูเขยี น

30 2. โครงสรา งบอรด Arduino Uno R3 บอรด Arduino Uno R3 คือบอรดชนิดหนึ่งในกลุมของบอรด Arduino ที่ไดรับความนิยม เปน อยางมาก เนอ่ื งจากราคาไมแพง และมีแหลงขอมูลถูกเผยแพรเ ปน จำนวนมาก โดยเฉพาะอยางย่ิง ในเอกสารฉบับนี้ท่ีเนนการใชง านโปรแกรมจำลองการทำงาน Proteus ซึ่งปจจุบนั มีกลุมนักพัฒนาได พัฒนาไลบรารีบอรดชนิดขึ้นมาใชงานรวมกับ Proteus แลว จึงเหมาะสำหรับผูเริ่มศึกษาใหม เนื่องจากไมจำเปนตองลงทนุ ซ้ือบอรด กส็ ามารถเรยี นรูได อยางไรก็ตามอุปกรณบางประเภทยังท่ียังไม มีในไลบรารีของโปรแกรม Proteus ผเู ขียนจะอธิบายโดยใชบอรดจริง รูปท่ี 1.6 อธบิ ายสวนประกอบ ตา งๆ ทสี่ ำคญั ของบอรด Arduino Uno R3 A F B E DC รปู ที่ 1.6 สว นประกอบตา งๆ ทีส่ ำคัญของบอรด Arduino Uno R3 ที่มา: ผเู ขยี น รปู ที่ 1.6 แสดงสว นประกอบตางๆ ที่สำคัญของบอรด Arduino Uno R3 ซึ่งประกอบไปดว ย ดังน้ี ตำแหนง A: พอรตอนิ พุตและพอรตเอาตพ ุต นอกเหนอื จากนั้นยังมีบางตำแหนงท่ีทำหนาที่ อน่ื ดวย ดงั น้ี ขา 0, 1: รับสงขอ มลู แบบอนุกรมกับอปุ กรณภายนอก ขา 2: สัญญาณอินเทอรรัพ 0 (Interrupt 0)

31 ขา 3: สัญญาณอินเทอรร ัพ 1 (Interrupt 1) ขา 10: สัญญาณ SPI SS (Slave Select) ขา 11: สัญญาณ SPI MOSI (Master Out Slave In) ขา 12: สัญญาณ SPI MISO (Master In Slave Out) ตำแหนง B: ชฟิ ไมโครคอนโทรลเลอร ATMEGA328 ตำแหนง C: พอรตอินพุตและพอรตเอาตพุต นอกเหนือจากนั้นพอรตทั้งหมดในตำแหนงน้ี สามารถรับสัญญาณอนาล็อกไดซึ่งโดยสวนใหญเปนสัญญาณที่รับมาจากเซ็นเซอร และยังมีบาง ตำแหนงท่ที ำหนาที่อ่นื ดว ย ดงั น้ี ขา A4: สญั ญาณ I2C SDA ขา A5: สัญญาณ I2C SCL ตำแหนง D: พอรตจายแรงดัน และขากราวด ตำแหนง E: สายจายไฟเลยี้ ง (7 – 12 โวลต ตำแหนง F: พอรต USB สำหรับอัพโหลดโปรแกรมลงบอรดไมโครคอนโทลเลอร 3. การดาวโหลดและใชง านโปรแกรม Arduino IDE โปรแกรม Arduino IDE คอื เครื่องมือทใ่ี ชสำหรบั เขยี นคำส่งั ทเ่ี ปนภาษา c++ เพ่ือกำหนดการ ใชงานบอรด Arduino โดยการใชงานโปรแกรมสามารถเลือกใชง านได 2 วิธคี ือเลือกโปรแกรมแบบไม ตอ งติดตั้ง และโปรแกรมที่ตองติดต้ังเสียกอ นจึงจะสามารถใชงานได 3.1 การดาวโหลดและใชงานโปรแกรม Arduino IDE แบบไมต ดิ ตัง้ การดาวโหลดและใชงานโปรแกรม Arduino IDE แบบไมติดตั้งจะตองดาวโหลดไฟล โปรแกรมที่อยูในรปู แบบนามสกลุ เปน “.zip” โดยขอ มลู ภายในจะบรรจขุ อ มูลที่สำคัญตอ การใชงานไว ทั้งหมดแลวจึงไมจำเปนตองติดตั้งระบบ โดยการใชงานเพียงแคเลือกไฟล “Arduino.exe” ก็จะ สามารถใชงานไดทันที สำหรับขัน้ ตอนการใชง านเปน ดังน้ี ขนั้ ตอนที่ 1 ดาวโหลดโปรแกรมประเภทไมต องตดิ ต้ังโดยไปท่ี https://www.arduino.cc/en/Main/Software ข้ันตอนท่ี 2 เลือก “Windows ZIP file for non admin install” เพือ่ ดาวโหลดโปรแกรม Arduino IDE เวอรช นั ลาสดุ ประเภทที่ไมต อ งติดตัง้

32 รปู ท่ี 1.7 เลือก “Windows ZIP file for non admin install” ท่ีมา: ผเู ขยี น ขั้นตอนที่ 3 ขั้นตอนตอไปจะเกี่ยวกับการบริจาคเงิน ซึ่งผูใชงานจะบริจาคหรือไมก็ได โดยหากไม ประสงคท จี่ ะบรจิ าคใหเลอื ก “JUST DOWNLOAD” รูปท่ี 1.8 เลอื ก “JUST DOWNLOAD” ท่มี า: ผเู ขยี น ขั้นตอนที่ 4 หลงั จากดาวโหลดเสรจ็ ส้ินจะไดไ ฟลท ่ีมนี ามสกุลเปน “zip”

33 รปู ที่ 1.9 ไฟล Arduino-1.8.7-windows.zip ท่ีมา: ผูเขยี น ขัน้ ตอนท่ี 5 ทำการแตกไฟลจะไดขอมลู ทบ่ี รรจุภายในโฟลเดอรดงั รูปที่ 1.10 รูปท่ี 1.10 ขอมลู หลงั แตกไฟล Arduino-1.8.7-windows.zip ทีม่ า: ผูเขยี น ข้ันตอนที่ 6 ทดลองเลือกไฟล “Arduino.exe” จะพบวาโปรแกรม Arduino IDE พรอมใชง าน

34 รปู ท่ี 1.11 ตัวอยางโปรแกรม Arduino IDE แบบไมตดิ ตง้ั ท่มี า: ผูเขียน 3.2 การดาวโหลดและใชง านโปรแกรม Arduino IDE แบบติดต้ัง การดาวโหลดและใชง านโปรแกรม Arduino IDE แบบติดต้ังจะตองดาวโหลดไฟลโปรแกรมท่ี อยูในรปู แบบนามสกลุ เปน “.exe” เพอื่ ใชสำหรับติดตง้ั ในลำดบั ถดั ไป ข้ันตอนท่ี 1 ดาวโหลดโปรแกรมประเภทตดิ ต้ังโดยไปที่ https://www.arduino.cc/en/Main/Software ขั้นตอนที่ 2 เลือก “Windows installer, for Window XP and up” เพื่อดาวโหลดโปรแกรม Arduino IDE เวอรชนั ลา สุดประเภททตี่ องติดตัง้ รูปท่ี 1.12 เลือก “Windows installer, for Window XP and up” ท่ีมา: ผูเขียน

35 ขั้นตอนที่ 3 ขั้นตอนตอไปจะเกี่ยวกับการบริจาคเงิน ซึ่งผูใชงานจะบริจาคหรือไมก็ได โดยหากไม ประสงคท ่จี ะบริจาคใหเลอื ก “JUST DOWNLOAD” รปู ท่ี 1.13 เลือก “JUST DOWNLOAD” สำหรับกรณีตดิ ต้ัง ที่มา: ผเู ขียน ขนั้ ตอนท่ี 4 หลังจากดาวโหลดเสร็จสน้ิ จะไดไ ฟลที่มีนามสกุลเปน “.exe” ซ่ึงเปน ไฟลส ำหรับการ ตดิ ต้งั รปู ที่ 1.14 ไฟล Arduino-1.8.7-windows.exe ท่ีมา: ผเู ขยี น

36 ขนั้ ตอนที่ 5 ทำการติดต้ังโดยเลอื กท่ีไฟล “Arduino-1.8.7-windows.exe” จะพบหนา ตาง License Agreement และเลอื ก “I agree” รปู ท่ี 1.15 หนาตาง License Agreement ของขนั้ ตอนตดิ ตงั้ โปรแกรม Arduino IDE ท่มี า: ผเู ขยี น ขั้นตอนที่ 6 หนาตาง Installation Options คือการเลือกคอมโพเนนตที่จะใชงานซึ่งในขั้นตอนนี้ให เลือกทกุ คอมโพเนนต และเลอื ก “Next” รปู ท่ี 1.16 หนา ตาง Installation Options ของขนั้ ตอนติดตัง้ โปรแกรม Arduino IDE ทม่ี า: ผเู ขยี น ขน้ั ตอนท่ี 7 เลือกตำแหนงท่ใี ชส ำหรับจัดเกบ็ โปรแกรม Arduino IDE และเลอื ก “Install”

37 รปู ที่ 1.17 หนา ตาง Installation Folder ของขัน้ ตอนตดิ ต้ังโปรแกรม Arduino IDE ท่มี า: ผเู ขยี น ขั้นตอนที่ 8 หลังจากขั้นตอนการติดตั้งเสร็จสิ้น ทดลองเลือกไฟล “Arduino.exe” จะพบวา โปรแกรม Arduino IDE พรอ มใชง าน รปู ที่ 1.18 ตวั อยางโปรแกรม Arduino IDE แบบตดิ ตั้ง ทมี่ า: ผเู ขียน 4. ข้ันตอนการพัฒนาโปรแกรมโดยใชโ ปรแกรม Arduino IDE และบอรด Arduino Uno R3 หัวขอนี้จะอธิบายขั้นตอนการพัฒนาโปรแกรมโดยใชโปรแกรม Arduino IDE เปนเครื่องมือ ในการพัฒนาโปรแกรมเพื่อกำหนดคำสั่งการทำงานสูบอรด Arduino Uno R3 สำหรับตัวอยางที่จะ

38 ประกอบการอธิบายคือเปนโปรแกรมแสดงขอความ “Hello World” ผานหนาตาง Serial Monitor ซึ่งเปน การส่อื สารระหวางบอรดทดลองและซอฟตแวรแ บบอนกุ รม มีข้นั ตอนการดำเนนิ งานเปน ดงั น้ี ข้ันตอนที่ 1: ทดสอบเขียนโปรแกรมผานโปรแกรม Arduino IDE ดังรปู ท่ี 1.19 รปู ท่ี 1.19 ตวั อยางการเขียนโปรแกรมแสดงขอความ “Hello World” ทม่ี า: ผูเขยี น ขั้นตอนที่ 2: ตรวจสอบไวยกรณเบื้องตนของการเขียนโปรแกรมโดยเลือกคำสั่ง “Sketch -> Verify/Compile” หรือกด Ctrl + R หรือเลือกไอคอล ซึ่งกรณีไมพบขอผิดพลาดจะไดผลลัพธดัง รูปท่ี 1.20 รปู ที่ 1.20 ข้ันตอนการตรวจสอบไวยากรณ ท่ีมา: ผูเขียน

39 ขั้นตอนที่ 3: เลอื กรนุ ของบอรด Arduino จากโปรแกรมใหตรงกับบอรดท่ีใชงานจริง ซึ่งจากตัวอยาง นี้เลอื ก “Board: -> Arduino/Genuino Uno” รปู ที่ 1.21 เลือกรนุ ของบอรดทดลอง ทีม่ า: ผูเขยี น ขั้นตอนที่ 4: เตรียมบอรดทดลองและสายสำหรับการสื่อสารระหวางบอรดทดลองและเครื่อง คอมพิวเตอร รูปท่ี 1.22 บอรด ทดลองและสายสอ่ื สาร ทม่ี า: ผเู ขียน ขั้นตอนที่ 5: เชื่อมตอการสื่อสารระหวางบอรด Arduino และคอมพิวเตอร และตรวจสอบตำแหนง พอรต ทค่ี อมพวิ เตอรโดยเลอื กที่ Control Panel -> Device Manager

40 รูปท่ี 1.23 ตรวจสอบตำแหนงพอรต สำหรับส่ือสาร ที่มา: ผูเ ขียน จากรูปที่ 1.23 หลังจากเสียบสายสื่อสารและตรวจสอบตำแหนงพอรตพบวาพอรตที่ใช สำหรับสื่อสารคือ “COM5” (สำหรับเครื่องคอมพิวเตอรของผูอานอาจไมใชคาดังกลาว ซึ่งจะตอง กำหนดคา ดังกลาวท่โี ปรแกรม Arduino IDE ดวย ขั้นตอนที่ 6: เลือกพอรตสื่อสาร (COM5 ที่โปรแกรม Arduino IDE โดยเลือกที่ Tools -> Port -> COM5 (กรณีท่ไี มเชอื่ มสายส่ือสารจะไมสามารถเลือกพอรตได) รูปท่ี 1.24 เลอื กพอรตสื่อสารท่ีโปรแกรม Arduino IDE ทม่ี า: ผูเขียน ขั้นตอนท่ี 7: เริม่ การอพั โหลดโปรแกรมท่ีเขียนจากแปรแกรม Arduino IDE สบู อรดทดลองโดยเลือก “Sketch -> Upload” หรือ Control + U หรือเลือกไอคอล ซึ่งหากไมมีขอผิดพลาดจะไดผล ลพั ธแสดงดงั รปู ที่ 1.25

41 รูปท่ี 1.25 ผลลพั ธห ลังจากการอัพโหลดสำเรจ็ ท่มี า: ผเู ขียน ขั้นตอนที่ 8: ตรวจสอบผลการทำงานโดยเลือกที่ “Tool -> Serial Monitor” โดยเลือกกำหนดคา Baud Rate ใหต รงกับคำสั่งภายในโปรแกรม (จากตวั อยางเลอื ก 9600 รปู ที่ 1.26 เลอื กคำสัง่ Serial Monitor ทม่ี า: ผูเ ขียน ขั้นตอนที่ 9: แสดงผลการทำงานผาน Serial Monitor

42 รูปท่ี 1.27 การแสดงผลผาน Serial Monitor ที่มา: ผูเขยี น 5. บทสรปุ ไมโครคอนโทรลเลอรคือหนวยประมวลผลที่มีขนาดเล็กเพื่อใชสำหรับควบคุมอุปกรณ อิเล็กทรอนกิ ส ประโยชนคือชวยลดความซบั ซอนของวงจร และเปนตัวชวยแกไขการทำงานของวงจร ใหง า ยมากยง่ิ ข้นึ ปจจุบันไมโครคอนโทรลเลอรถูกผลิตออกมาเปนจำนวนมากหลายตระกูล ซึ่งจะมีชื่อเรียกที่ แตกตางกันออกไปขึ้นอยูกับบริษัทผูผลิต เชน MCS-51, PIC และ AVR โดย Arduino คือบอรด ไมโครคอนโทรลเทอรที่ใช AVR เปนหนวยประมวลผลท่ีไดรับความนิยมสูงมากเนื่องจากมีไลบรารี และแหลงคำสงั่ ของโปรแกรมถกู เผยแพรใหใชงานไดโ ดยไมม ีคา ใชจ ายสงผลใหการพัฒนาชิ้นงานทำได งายมากยิ่งขึ้น สำหรับซอฟตแวรที่ใชสำหรับการพัฒนาคือ โปรแกรม Arduino IDE โดยเอกสารคำ สอนนเี้ ลือกใชบ อรด Arduino Uno R3 ประกอบการอธบิ าย การใชงานโปรแกรม Arduino IDE สามารถใชงานได 2 วิธีคือแบบที่ไมจำเปนตองติดต้ัง โปรแกรม และแบบทีต่ อ งติดตั้งโปรแกรม สำหรับขัน้ ตอนการพฒั นาชิ้นงานเริม่ จากการเขียนโปรแกรม และตรวจสอบไวยากรณกอนท่ี จะอพั โหลดชุดคำส่งั ทง้ั หมดสูบอรด Arduino กรณที ไ่ี มม ีขอผิดพลาด

43 แบบฝกหัดทา ยบท บทท่ี 1 1. ไมโครคอนโทรลเลอรค ืออะไร และมีประโยชนอ ยางไร 2. จงยกตวั อยา งตระกลู ของไมโครคอนโทรลเลอร 3 ตระกูล 3. Arduino คือแพรตฟอรม แบบเปดท่ีพัฒนามาจากไมโครคอนโทรลเลอรต ระกลู อะไร 4. ซอฟตแวรส ำหรับเขยี นโปรแกรมเพื่อควบคุมบอรด Arduino ชือ่ อะไร 5. โปรแกรมภาษาสำหรับควบคุมบอรด Arduino คือภาษาอะไร 6. การใชงานโปรแกรม Arduino IDE สามารถทำไดทง้ั หมดกี่วธิ ี 7. คำส่งั Verify/Compile ในโปรแกรม Arduino IDE มีไวเ พ่ืออะไร

44 เอกสารอา งองิ เดชฤทธิ์ มณีธรรม. (2559). คัมภีรการใชงาน ไมโครคอนโทรลเลอร MCS51. กรุงเทพฯ: ซีเอ็ด ยเู คชน่ั . ทีมงานสมารทเลิรนนิ่ง. (2554). Advanced PIC Microcontroller in C : การประยุกตใชงาน PIC ข้นั สูงดวยภาษา C. กรุงเทพฯ: สมารทเลิรนน่งิ . ประภาส พุมพวง. (2561). การเขียนและการประยุกตใชงานโปรแกรม Arduino. กรุงเทพฯ: ซีเอ็ด ยูเคชัน่ . มงคล ลี้ประกอบบุญ. (2549). ไมโครคอนโทรลเลอร 8051 และการประยุกตใช. ขอนแกน: หนวย สารบรรณ งานบรหิ ารและธุรการ คณะวศิ วกรรมศาสตร มหาวทิ ยาลัยขอนแกน . วิลาศณิ ี วิสทิ ธ์ิกาศ วรพจน กรแกว วฒั นกลุ และ ชยั วัฒน ลม้ิ พรจติ รวไิ ล. (2551). ทดลองและใชงาน ไมโครคอนโทรลเลอร ATmega128 ดวยโปรแกรมภาษา C กับซอฟตแวร Wiring. กรงุ เทพฯ : อินโนเวตฟี เอก็ พอริเมนต. สนธยา นงนุช. (2560). การใชง าน ESP32 เบ้ืองตน. ชลบรุ ี: รา นไอโอเอ็กซฮ อ บ. อลงกรณ พรมที. (2551). อุปกรณที่ยึดอยูบนผิวและการใชงานไมโครคอนโทรลเลอร. อุดรธานี: มหาวทิ ยาลยั ราชภฏั อุดรธาน.ี เอกชัย มะการ. (2552). เรียนรู เขาใจ ใชงาน ไมโครคอนโทรลเลอรตระกูล AVR ดวย Arduino. กรุงเทพฯ: บรษิ ัทอที ีที จำกัด. Tero, K. and Kimmo, K. (2011). Make: Arduino Bots and Gadgets. Canada: O’Reilly Media, Inc.

แผนบริหารการสอนประจำบทท่ี 2 โปรแกรมภาษาสำหรับบอรด Arduino หัวขอเนอ้ื หา 1. โครงสรา งโปรแกรมภาษา c++ สำหรบั บอรด Arduino 2. การแสดงขอมูลผาน Serial Monitor 3. ตวั แปร 3.1 ชนิดขอ มูล 3.2 ตัวแปรโกลบอล 3.3 ตัวแปรโลคอล 3.4 ตวั แปรสแตติก 3.5 ตวั แปรคาคงที่ 3.6 ตัวแปรพอยเตอร 4. อารเรย 5. คำสงั่ เง่อื นไข 5.1 คำสัง่ if 5.2 คำส่งั if – else 5.3 คำส่ัง if – else if - else 5.4 คำสงั่ switch – case 6. ตัวดำเนนิ การทางลอจิก 6.1 ตัวดำเนินการออร 6.2 ตวั ดำเนินการแอนด 6.3 ตัวดำเนินการนิเสธ 7. ตวั ดำเนนิ การระดบั บิต 7.1 ตัวดำเนนิ การออร 7.2 ตัวดำเนนิ การแอนด 7.3 ตวั ดำเนินการเอ็กคลูซีฟออร 7.4 ตวั ดำเนนิ การคอมพลเิ มนต 7.5 ตวั ดำเนนิ การเล่ือนบติ ไปทางซาย

46 7.6 ตัวดำเนนิ การเลือ่ นบิตไปทางขวา 8. คำสั่งทำซำ้ 8.1 คำสงั่ while 8.2 คำสงั่ do - while 8.3 คำสั่ง for 8.4 คำส่งั goto 9. ฟงกชนั 10. การใชง าน Serial Monitor เพอ่ื รบั คา ทางแปน พิมพ 10.1 ฟงกช ัน Serial.available() 10.2 ฟงกชนั Serial.Read() 11. บทสรุป แบบฝกหดั ทายบท เอกสารอางองิ วตั ถุประสงคเ ชงิ พฤติกรรม เมอ่ื ผูเรียน เรยี นจบบทน้ีแลว ผูเรียนควรมีความสามารถ ดังนี้ 1. อธิบายโครงสรา งโปรแกรมภาษา c++ สำหรบั บอรด Arduino 2. เขียนโปรแกรมเพอื่ แสดงขอมูลผา น Serial Monitor 3. เขยี นโปรแกรมเพ่อื สรางและใชง านตวั แปรแตล ะประเภท 4. เขียนโปรแกรมเพ่ือสรา งและใชงานตวั แปรอารเ รย 5. เขียนโปรแกรมเพ่ือสรางและใชงานคำสั่งเงอ่ื นไข 6. เขยี นโปรแกรมเพอ่ื สรางและใชงานตัวดำเนินการทางลอจิก 7. เขยี นโปรแกรมเพอ่ื สรา งและใชง านตวั ดำเนินการระดับบติ 8. เขียนโปรแกรมเพือ่ สรางและใชงานคำสงั่ ทำซ้ำ 9. เขียนโปรแกรมเพ่อื สรา งและใชง านฟง กช นั แตละประเภท 10. เขยี นโปรแกรมเพอ่ื รบั คา ทางแปน พิมพ และสื่อสารผานทาง Serial Monitor 11. มีความตง้ั ใจในการเรียนและการฝกปฏบิ ตั ิการเขยี นโปรแกรม วิธกี ารสอนและกิจกรรมการเรียนการสอนประจาํ บท 1. บรรยายเนื้อหาในแตล ะหวั ขอ พรอ มยกตวั อยา งประกอบ โดยใชเอกสารคำสอน และส่อื power point

47 2. ทดลองปฏิบตั ิจรงิ เรื่องเขยี นโปรแกรมเพ่ือทดสอบใชง านคำส่งั ตา งๆ ตามหวั ขอที่กำหนด 3. ผูสอนสรปุ เน้อื หา 4. ทำแบบฝก หัดเพื่อทบทวนบทเรยี น 5. เปด โอกาสใหผ เู รยี นถามขอสงสัย 6. ผูส อนทำการซักถาม ส่อื การเรยี นการสอน 1. เอกสารคำสอนวชิ าการประยุกตใ ชงานไมโครคอนโทรลเลอร 2. ส่อื power point การวดั ผลและการประเมิน 1. การเขาเรยี นตรงตอ เวลา และการแตง กาย 2. ความรว มมอื และความรับผดิ ชอบตอการเรยี น 3. การถาม-ตอบ 4. การสง งานที่ไดรบั มอบหมายภายในเวลาทีก่ ำหนด 5. การทำแบบฝกหดั ทม่ี ีความถูกตองไมนอ ยกวา 80%



บทท่ี 2 โปรแกรมภาษาสำหรับบอรด Arduino โปรแกรมภาษาที่ใชสำหรับสั่งการทำงานบอรด Arduino ทุกประเภทคือภาษา c++ ซึ่งเปน โปรแกรมภาษาที่ปรับปรุงมาจากภาษาซี อยางไรก็ตามโปรแกรมภาษาสำหรับบอรด Arduino มี โครงสรางที่เปนลกั ษณะเฉพาะทแี่ ตกตางจากโครงสรางภาษา c++ ที่ใชสำหรบั พฒั นาซอฟตแวรทั่วไป โดยในบทนจ้ี ะกลาวถึงโปรแกรมภาษา c++ ท่ใี ชสำหรับบอรด Arduino 1. โครงสรา งโปรแกรมภาษา c++ สำหรับบอรด Arduino โครงสรางโปรแกรมภาษา c++ สำหรับบอรด Arduino มีความแตกตางจากโครงสราง โปรแกรมภาษา c++ สำหรับพัฒนาซอฟตแวรทั่วไป (ประภาส พุมพวง, 2561) เนื่องจากฟงกชัน เริ่มตนเพื่อการพัฒนาโปรแกรมเพื่อสั่งการทำงานบอรด Arduino จะแบงเปน 2 ฟงกชันคือฟงกชัน setup() และ ฟงกชัน loop() ในทางกับกันฟงกชันเริ่มตนเพื่อการพัฒนาโปรแกรมสำหรับซอฟตแวร ทว่ั ไปจะมเี พยี ง 1 ฟงกชันคือฟง กช ัน main() Datatype variablename1; Datatype variablename2; void setup() { } void loop() { } Returntype functionname1(){ } Returntype functionname2(){ } รปู ท่ี 2.1 โครงสรา งโปรแกรมภาษาสำหรับบอรด Arduino ทีม่ า: ผูเ ขยี น

50 รูปที่ 2.1 แสดงโครงสรางโปรแกรมภาษาสำหรับบอรด Arduino โดยจำเปนตองมีฟงกชัน setup() ที่อยเู หนือฟงกชนั loop() เสมอ ทงั้ สองฟง กชันมีการทำงานท่ีแตกตางกัน ชุดคำสั่งท้ังหมดท่ี ถูกสรางภายในฟงกชัน setup() จะถูกดำเนินการเพียงครั้งเดียวซึ่งโดยสวนใหญนิยมใชงานสำหรับ กำหนดคาเริม่ ตนใหพอรตที่จะใชง าน สำหรับชดุ คำสั่งทัง้ หมดที่อยูภ ายในสวนของฟงกช ัน loop() จะ ถูกดำเนินการแบบวนซ้ำไมมีที่สิ้นสุด นอกเหนือจาก ทั้งสองฟงกชันดังกลาวยังสามารถสรางฟงกชัน อื่นเองไดโดยมีรูปแบบการสรางคือขึ้นตนดวยชนิดขอมูล และตามดวยชื่อฟงกชัน โดยฟงกชันที่สราง ขึ้นใหมจะมีจำนวนทีไ่ มจำกัด สวนสุดทายคือการประกาศตัวแปรข้ึนใชงานซึ่งจากรูปท้ัง 2 ตัวแปรถกู ประกาศอยทู ่สี วนบนสดุ ของโปรแกรม 2. การแสดงขอ มลู ผาน Serial Monitor Serial Monitor (วิลาศิณี วิสิทธิ์กาศ และคณะ, 2551) คือโหมดการแสดงผลลัพธของการ รบั สง ขอ มูลระหวางบอรด Arduino และเคร่อื งคอมพิวเตอรแบบอนุกรมผานสายสัญญาณ โดยการใช งานจำเปนตองกำหนดคา Baud Rate ในสวนของคำสั่งภายในโปรแกรม Arduino IDE ใหตรงกัน กอนจึงจะสามารถใชงานได โดยรูปแบบการประกาศ Baud Rate ในโปรแกรม Arduino IDE เปน ดงั น้ี รูปแบบ Serial.begin(คา Baud Rate) สำหรับคำสั่งที่ใชสำหรับแสดงขอมูลผาน Serial Monitor แบงออกเปน 2 คำสั่งคือส่ัง เคอรเซอรขึ้นบรรทัดใหมเมื่อสิ้นสุดการแสดงผล และเคอรเซอรอยูตำแหนงหลังตัวอักษรสุดทายหลัง สิน้ สดุ การแสดงผล ดงั น้ี รูปแบบ (เคอรเซอรข ้ึนบรรทัดใหมหลังสิน้ สดุ การแสดงผล Serial.println(“ขอ ความท่ีแสดง”) รปู แบบ (เคอรเซอรอยหู ลังตัวอกั ษรสดุ ทา ยหลงั สน้ิ สดุ การแสดงผล Serial.print(“ขอ ความทแ่ี สดง”)

51 ตวั อยางที่ 2.1 การใชคำส่งั แสดงขอมูลผาน Serial Monitor วธิ ที ำ 1. สวนโปรแกรม void setup() { Serial.begin(9600); Serial.print(\"Hello \"); Serial.println(\"World \"); Serial.println(\"Good Bye\"); } void loop() { } คำอธิบาย: ฟงกชัน Setup(): กำหนดคา Baud Rate คือ 9600 และกำหนดใหมีการแสดงผลลัพธผาน Serial Monitor จำนวน 3 ประโยคประกอบไปดวย “Hello ”, “World ” และ “Good Bye” โดย 2 ประโยคแรกจะแสดงผลอยูบรรทัดเดียวกัน เนื่องจากวาคำสั่งแรกเปนการแสดงผลแบบเคอรเซอร อยตู ำแหนงถัดจากตัวอกั ษรสุดทายของคำส่ัง ฟง กช ัน loop(): - 2. ผลการทดลอง รปู ท่ี 2.2 ผลการทดลองการใชค ำสง่ั แสดงขอมลู ผา น Serial Monitor ท่ีมา: ผเู ขยี น

52 3. ตัวแปร ตัวแปร (Variable คือสิ่งที่ถูกกำหนดขึ้นมาเพื่อใชเก็บคาขอมูลตาง ๆ ที่จำเปนสำหรับการ ประมวลผล (ประจิน, พลังสันติกุล, 2553) โดยสามารถเปลี่ยนแปลงคาใหกับตวั แปรที่ตำแหนงอื่น ๆ ที่อยูภายในขอบเขตที่กำหนดไวไดหลังจากที่ตัวแปรดังกลาวนี้ไดถูกกำหนดไว อยางไรก็ตามการ กำหนดตัวแปรจำเปนตองมีการจองพื้นที่หนวยความจำสำหรับการใชงานซึ่งขึ้นอยูกับชนิดขอมูล เนอ่ื งจากชนิดขอมลู ทแ่ี ตกตางกันจะจองพนื้ ทห่ี นว ยความจำแตกตางกัน ดงั นน้ั การเลือกใชชนิดขอมูล ท่เี หมาะสมเปน สง่ิ ทสี่ ำคญั เชน เดียวกัน การประกาศตัวแปรแบงเปน 2 กรณีดงั นี้ กรณีท่ี 1: ไมมกี ารกำหนดคาเร่ิมตน Datatype Variable_name; กรณที ี่ 2: มีการกำหนดคา เรมิ่ ตน Datatype Variable_name = Initial_value; เม่ือ Datatype คอื ชนดิ ขอ มลู ของตวั แปร Variable_name คอื ช่อื ของตัวแปร Initial_value คือ คาเรมิ่ ตนของตวั แปรซงึ่ จะตองมีคาตรงกับขอบเขตของชนิดขอมูลดวย 3.1 ชนิดขอมลู ชนิดขอมูล (Datatype คือสิ่งที่ใชบงบอกคุณลักษณะใหกับตัวแปรวาจะเก็บคาเปนอยางไร ซึง่ แบง ออกเปน 5 ประเภทคอื อกั ขระ จำนวนเต็ม จำนวนจรงิ ตรรกศาสตร และ สตริง (ขอ ความ ซึ่ง การกำหนดขอมูลใหกับตัวแปรแตละตัวจำเปนตองกำหนดคาใหตรงกับชนิดขอมูลของตัวแปรดวย ตารางท่ี 2.1 แสดงรายละเอยี ดของชนิดขอ มลู แตล ะประเภท

53 ตารางท่ี 2.1 ประเภทของชนิดขอมลู ประเภท ความหมาย รูปแบบ ขนาด อกั ขระ (บิต) เก็บอักขระตาง ๆ ได 1 ตัว char, signed char, unsigned 8 จำนวนเตม็ หรือเก็บคาจำนวนเต็มซึ่ง char เปนตัวแทนของอักขระนั้น 16, 32 จำนวนจรงิ ๆ ตรรกศาสตร 32, 64, 80 เก็บขอมูลเปนจำนวนเต็ม int, signed int, unsigned 1 ซึ่งอาจเก็บไดทั้งจำนวนเต็ม int, short int, signed short บวกและจำนวนเตม็ ลบ หรอื int, unsigned short int, เก็บไดเฉพาะจำนวนเต็ม long int, signed long int, บวก ขึ้นอยูกับรูปแบบของ unsigned long int การประกาศ เก็บขอ มูลเปนจำนวนจรงิ float, double, long double เก็บคาความจริงของตัวแปร bool ซึ่งมีเพียว 2 สถานะคือ จริง หรอื เท็จ จากตารางท่ี 2.1 สังเกตไดวา ชนดิ ขอมูลจำนวนเต็มมหี ลายรูปแบบ โดยสวนใหญจ ะมขี อความ “int” และจะมีคำศัพทอื่นรวมอยูดวย ซึ่งคำศัพทเหลานี้มีไวเพื่อกำหนดขอบเขตของการเก็บคา จำนวนเต็มซ่ึงมที ั้งหมด 4 คาดังนี้ signed ความหมายคอื เก็บคา จำนวนเต็มไดทง้ั จำนวนเตม็ บวกและจำนวนเตม็ ลบ unsigned ความหมายคือเก็บคาของจำนวนเตม็ ไดเ ฉพาะจำนวนเต็มบวก long ความหมายคอื เกบ็ คา จำนวนเต็มไดใ นขอบเขตที่ใหญกวา int short ความหมายคือเก็บคา จำนวนเตม็ ไดในขอบเขตท่เี ล็กกวา int

54 ตวั อยา งที่ 2.2 การทดสอบการใชง านตวั แปรและชนิดขอ มลู วธิ ที ำ 1. สว นโปรแกรม int a = 7; double b = 5.5; bool c = true; char d = 'a'; void setup() { Serial.begin(9600 ; Serial.print(\"a = \"); Serial.println(a); Serial.print(\"b = \"); Serial.println(b); Serial.print(\"c = \"); Serial.println(c); Serial.print(\"d = \"); Serial.println(d); } void loop() { } คำอธิบาย: กำหนดตวั แปรทง้ั หมด 4 ตัวแปร ดังนี้ ตัวแปร a เปนจำนวนเตม็ มีคาเร่ิมตน เทา กับ 7 ตวั แปร b เปน จำนวนจริงมีคา เร่ิมตน เทากับ 5.5 ตัวแปร c เปนตรรกศาสตรมคี า เริม่ ตน เปนจรงิ ตวั แปร d เปนอกั ขระมคี าเริ่มตนเปน ‘a’ ฟงกชัน Setup(): กำหนดใหมีการแสดงขอความและคาตัวแปรทั้ง 4 คาผานทางพอรต อนกุ รม โดยการแสดงคา ของตวั แปรจะไมถกู กำหนดไวภ ายในเครื่องหมายอัญประกาศ ฟง กชนั loop(): - 2. ผลการทดลอง

55 รูปที่ 2.3 ผลการทดลองการทดสอบการใชง านตัวแปรและชนิดขอมลู ทม่ี า: ผเู ขียน 3.2 ตัวแปรโกลบอล ตัวแปรโกลบอล (Global Variable) คือตัวแปรที่ถูกประกาศไวภายนอกฟงกชันซึ่งโดยสวน ใหญแลว มักจะประกาศไวท ส่ี ว นบนสดุ ของโปรแกรม เพื่อใหสามารถใชง านตวั แปรดงั กลา วน้ีไดท ุกสวน ของโปรแกรม ยกตัวอยางเชน จากตัวอยางที่ 2.2 สังเกตไดวาตัวแปรทั้ง 4 คานี้คือตัวแปรแบบ โกลบอลท่สี ามารถเรียกใชงานไดท้ังภายใน setup( และ loop( รวมไปถึงฟงกชันอื่น ๆ ท่ีผูใชงานได สรางขนึ้ 3.3 ตัวแปรโลคอล ตวั แปรโลคอล (Local Variable) จะมีความแตกตา งกบั ตวั แปรโกลบอลเนอ่ื งจากการใชง าน ของตวั แปรโลคอลจะอยใู นขอบเขตทจ่ี ำกดั โดยการใชงานจะประกาศตวั แปรโลคอลไวภ ายในฟง กช ัน ซ่งึ การใชงานจะสามารถใชงานตวั แปรดังกลา วน้ีเฉพาะภายในฟงกช ันท่ปี ระกาศใชง านเทานนั้ ตวั อยางท่ี 2.3 การทดสอบการใชงานตวั แปรโกลบอลและตวั แปรโลคอล วิธที ำ 1. สว นโปรแกรม int b = 6; void setup() { Serial.begin(9600); int a = 7; Serial.print(\"a = \"); Serial.println(a);

56 Serial.print (\"b = \"); Serial.println(b); } void loop() { Serial.println(b); } คำอธิบาย: เนื่องจากตัวแปร a ถูกประกาศไวภายในฟงกชัน setup() ดังนั้นจึงสามารถใชงานตวั แปร a ไดภายในฟง กชนั นีเ้ ทาน้ัน เรยี กตัวแปร a วา ตัวแปรโลคอล ในทางกลับกนั ตวั แปร b ซ่ึงถูกประกาศ ไวสว นบนสุดของโปรแกรมซึ่งอยูภายนอกฟงกช นั จึงสามารถใชง านตัวแปร b ไดทกุ สว นของโปรแกรม เรียก b วาตัวแปรโกลบอล จากตัวอยางจะไมสามารถใชต ัวแปร a ท่ฟี ง กช นั loop() ได 2. ผลการทดลอง รูปท่ี 2.4 ผลการทดลองการใชง านตวั แปรโกลบอลและตวั แปรโลคอล ทม่ี า: ผเู ขยี น 3.4 ตัวแปรสแตติก ตัวแปรสแตติก (Static Variable จะมีลักษณะคลายกับตัวแปรโลคอลคือมีขอบเขตการใช งานที่จำกัด แตมีความแตกตางกับตวั แปรโลคอลตรงท่ีหากโปรแกรมออกนอกขอบเขตไปแลว คาของ ตัวแปรแบบสแตติกจะยังคงอยู แตหากเปนตัวแปรแบบโลคอลคาของตัวแปรจะหายไปในทันที รูปแบบการประกาศใชง านตวั แปรสแตติกเปน ดังน้ี รปู แบบ static Datatype Variable_name = Initial_value;

57 โดยที่การประกาศใชงานตัวแปรสแตติกจะเหมือนกับการประกาศใชงานตัวแปรทั่วไป เพยี งแตเพ่ิมคำวา static ไวหนาสุดของการประกาศตัวแปร ตัวอยา งท่ี 2.4 เปรียบเทียบการใชง านตวั แปรโลคอลและตัวแปรสแตติก วิธีทำ สวนโปรแกรม void setup() { Serial.begin(9600); Serial.println(\"1. Call test(): \"); test(); Serial.println(\"2. Call test(): \"); test(); } void test(){ int a = 0; static int b = 0; a = a+1; b = b+1; Serial.print(\"a = \"); Serial.println(a); Serial.print(\"b = \"); Serial.println(b); } void loop() { } คำอธิบาย: โปรแกรมนี้มีการสรางฟงกชันขึ้นมาใชงานใหมชื่อ test() การทำงานคือเมื่อโปรแกรมมี การเรียกใชงาน test( โปรแกรมจะหยุดการทำงานที่ตำแหนงปจจุบันที่กำลังทำอยูเพื่อกระโดดไป ทำงานภายในฟงกชันชื่อ test( และหลังจากเสร็จสิ้นทำงานภายในฟงกชัน test( แลวโปรแกรมจะ กลับมาทำงานยังตำแหนงปจจุบันที่โปรแกรมทำอยูกอนที่จะมีการกระโดดไปทำงาน โดยจะกลาว เกย่ี วกับเรือ่ งของฟง กชันโดยละเอียดอีกครั้งในหวั ขอของฟงกช ันโดยตรง ฟงกชัน Setup(): กำหนดใหมีการแสดงขอความและคาตัวแปรทั้ง 4 คาผานทางพอรต อนุกรม และมีการเรยี กใชง านฟงกช นั test( จำนวน 2 ครั้ง

58 ฟงกชัน test(): มีการประกาศใชงานตัวแปร 2 คาคือตัวแปร a ซึ่งเปนตัวแปรแบบโลคอลที่ มีคา เริ่มตน คือ 0 ตวั แปร b ซ่ึงเปนตวั แปรแบบสแตติกท่ีมีคา เรมิ่ ตน คือ 0 เชน เดยี วกนั หลังจากนั้นจะ ทำการเพ่ิมคา a และ b ขน้ึ อกี 1 คา และทำการแสดงผลผา นทางพอรต อนุกรม ฟง กชัน loop(): - 2. ผลการทดลอง รูปที่ 2.5 ผลการทดลองการเปรยี บเทียบการใชงานตวั แปรโลคอลและตวั แปรสแตติก ทีม่ า: ผเู ขียน จากผลการทดลองสังเกตไดว า ในการเรียกใชฟงกชัน test() รอบที่ 2 ตวั แปร b จะมคี าเปน 2 ในขณะที่ตัวแปร a ยังคงมีคาเปน 1 เชนเดิม สาเหตุคือตัวแปร b เปนตัวแปรแบบสแตติกจึงทำใหคา ลา สดุ ของตัวแปร b ท่ีถูกเรียกใชง านในรอบแรกท่ีมคี า เปน 1 จะยังคงอยูในขณะท่ีคาของตวั แปร a ได หายไปตั้งแตส้ินสดุ การทำงานฟงกชัน test() ในรอบแรก (รวมไปถึงรอบอืน่ ๆ ดังนั้นการเรียกใชง าน ฟงกชัน test() ในแตละรอบคาของตัวแปร b จะเพิ่มขึ้นครั้งละ 1 คา แตตัวแปร a จะมีคาเปน 1 เสมอ สำหรับกรณีการเพิ่ม หรือลดคาของตัวแปรครั้งละ 1 คาสามารถเขียนคำสั่งแบบยอได ดังน้ี การลดคาใช a-- (แสดงผลกอนลดคา) หรือ --a (ลดคากอนแสดงผล) และ การเพิ่มคาใข a++ (แสดงผลกอนเพิ่มคา ) หรอื ++a (เพิ่มคา กอ นแสดงผล) โดย a คือชื่อของตวั แปรซึง่ เปน ช่ืออนื่ ได 3.5 ตัวแปรคา คงท่ี คาคงท่ี (Constant Variable คือตัวแปรชนิดหนึ่งที่เก็บคาเพียงคาเดียวตลอดการใชงาน โดยจะไมส ามารถเปลยี่ นแปลงคาไดหลงั จากการประกาศคาไวแลว (ทีมงานสมารท เลิรน น่ิง, 2554) ซึ่ง มรี ูปแบบการประกาศ 2 รูปแบบดังนี้

59 รูปแบบท่ี 1 const Datatype Variable_name = Initial_value; โดยที่การประกาศใชงานคาคงที่รูปแบบที่ 1 จะเหมือนกับการประกาศใชงานตัวแปรทั่วไป เพียงแตเ พ่มิ คำวา const ไวห นา สุดของการประกาศตวั แปร รปู แบบที่ 2 #define Variable_name Initial_value ขอควรระวัง: การประกาศใชงานคาคงที่ในรูปแบบที่ 2 นี้จะไมมีเครื่องหมายเทากับ “=” สำหรับ กำหนดคาเร่มิ ตนใหกบั ตัวแปร และไมมีสญั ลกั ษณอฒั ภาค “;” เพื่อปดทา ยคำสั่ง 3.6 ตัวแปรพอยเตอร ตัวแปรพอยเตอร (Pointer Variable) คือ ตัวแปรที่ถูกสรางมาเพื่อเก็บขอมูลตำแหนง หนวยความจำของตัวแปร ซึ่งจะแตกตางกับตัวแปรชนิดอื่นที่ถูกสรางเพื่อเก็บขอมูลโดยตรง โดยจะ กำหนดเครื่องหมาย “*” ไวหนาตัวแปรเพื่อใหทราบวาเปนตัวแปรแบบพอยเตอร โดยรูปแบบการ ประกาศใชงานตัวแปรพอยเตอรเปนดงั นี้ Datatype *Pointer_name; เม่ือ Pointer_name คือ ช่อื ของตัวแปรพอยเตอร ตัวอยา งเชน int *a; ความหมายคือ ประกาศตัวแปรพอยเตอรเ ปน จำนวนเตม็ แบบ int ชือ่ a การกำหนดคา ใหตวั แปรพอยเตอรมี 2 ชนดิ คือ 1. การกำหนดตำแหนง ใหก บั ตัวแปรพอยเตอร คือ กำหนดตำแหนง ทอ่ี ยูใหมใหกับตัวแปร แบบพอยเตอร ซึง่ หากตองการอางอิงตำแหนงของตวั แปรอ่ืนจะใชเครื่องหมาย “&” นำหนาตัวแปรที่ มีตำแหนงในการอางองิ โดยมีรปู แบบดังนี้

60 กรณที ี่ 1: (กำหนดตำแหนง โดยตรง Pointer_name = Position_value; เมอ่ื Position_value คอื คา ตำแหนงทก่ี ำหนดใหตัวแปรพอยเตอร ตวั อยางเชน int *a; a = 200; ความหมายคือ กำหนดใหต ัวแปรพอยเตอร a ชไ้ี ปยังตำแหนง หนวยความจำที่ 200 กรณที ่ี 2: (กำหนดตำแหนง ของตัวแปร Pointer_name = &Variable_name; ตัวอยางเชน int *a; int x = 8; a = &x; ความหมายคอื กำหนดใหตวั แปรพอยเตอร a ชี้ไปยงั ตำแหนง หนว ยความจำที่ x อยู ดงั น้นั คา *a จึงมีคา เปน 8 เนอ่ื งจากคา ทีอ่ ยตู ำแหนง ที่ x มคี าเปน 8 นอกจากน้ีหากมีการเพมิ่ หรือลดคา x จะสงผลให *a เปลย่ี นแปลงไปดว ย เน่ืองจาก a เก็บคา ตำแหนง ของ x ดงั นัน้ คา *a จะมเี ปลยี่ นแปลงตาม x ขอสังเกต: การกำหนดตำแหนงใหกับตัวแปรพอยเตอรจะไมมีเครื่องหมาย “*” อยูหนาตัวแปรพอย เตอร 2. การกำหนดคาในตำแหนงที่ตัวแปรพอยเตอรชี้อยู คือ การกำหนดคาคงที่ใหกับ ตำแหนงปจจุบันที่ตวั แปรพอยเตอรชี้อยู ซึ่งจะเปนการกำหนดคา ผานตัวแปรพอยเตอรเ ปรียบเสมือน การกำหนดคาโดยออ ม โดยมีรปู แบบเปน ดังนี้

61 *Pointer_name = Value; ตัวอยา งเชน int *a; int x = 8; a = &x; *a = 20 ความหมายคือ กำหนดใหคาที่อยูในตำแหนงที่ a ชี้อยู (ซึ่งจากตัวอยางนี้คือ x มีคาเปน 20 ดงั น้ันจะสงผลใหต ัวแปร x มีคาเปน 20 เชนกนั นอกจากการกำหนดคาใหตัวแปรพอยเตอรแลวยังสามารถกำหนดคาของตัวแปรพอยเตอร หรือคาท่เี กบ็ อยใู นตำแหนงท่ตี ัวแปรพอยเตอรช ้ีอยูใ นกบั ตัวแปรทว่ั ไปได รปู แบบเปนดงั น้ี *Variable_name = Pointer_name; ตวั อยางเชน int *a; int x = 8; a = &x; int y = *a; ความหมายคอื กำหนดใหต วั แปร y มคี า เทากบั คาทีเ่ ก็บในตำแหนง ท่ี a ช้อี ยู และเนอ่ื งจาก a ช้อี ยูตำแหนงที่ x จึงไดวา y มีคา เปน 8 4. อารเ รย อารเรย (Array) คือ ตัวแปรชนิดหนึง่ ที่สามารถเก็บคาขอมูลทีเ่ ปนชนิดเดียวกันไดม ากกวา 1 คา (ทีมงานสมารทเลิรนนิ่ง, 2555) โดยใชคาดรรชนี (index value สำหรับการอางอิงตำแหนงของ คา ตาง ๆ ท่ีอยภู ายในอารเ รย กำหนดใหอารเรย สามารถเก็บคาไดทั้งหมด n คา (มีขนาดเทากับ n) ไดวาตำแหนงการ อางอิงของคาตาง ๆ คือ 0, 1, 2,..., n – 1 ตามลำดับ ซึ่งสังเกตไดวาจะไมมีอารเรยตำแหนงที่ n สำหรบั รูปแบบการประกาศใชงานอารเรยเ ปนดังนี้

62 กรณที ่ี 1: ไมม กี ารกำหนดคาเร่ิมตน Datatype Variable_name[size]; เมือ่ size คือขนาดของอารเรย โดยการกำหนดคาใหกับตัวแปรในแตล ะตำแหนงทำไดด งั น้ี Variable_name[index] = value; เมื่อ index คือ ตำแหนง ของตวั แปรอารเ รย value คือ คา ของตวั แปรอารเ รยใ นตำแหนงท่กี ำหนด กรณีที่ 2: มีการกำหนดคาเรม่ิ ตน Variable_name[size] = {value0, value1,…,valuesize-1}; เมื่อ value0 คอื คาของตัวแปรอารเรยใ นตำแหนง ที่ 0 value1 คือ คา ของตวั แปรอารเ รยใ นตำแหนงที่ 1 valuesize-1 คือ คา ของตัวแปรอารเ รยในตำแหนงท่ี size - 1 อยา งไรก็ตาม สำหรับกรณที ี่มีการกำหนดคาเร่ิมตน ไมจำเปน ตองกำหนดขนาด (size ใหตัว แปรอารเ รย ซงึ่ จะชวยเพิ่มความยดื หยุน ในกรณีทม่ี กี ารเริ่มขนาดใหต วั แปรดงั กลาวนี้ ตวั อยา งการประกาศใชงานตัวแปรอารเ รยเ ปนดงั น้ี int x[] = {3, 4, 7}; ความหมายคือ ประกาศตัวแปรแบบอารเรยชื่อ x ที่มีขนาดเทากับ 3 พรอมกับกำหนดคา เร่มิ ตนใหกบั ทัง้ 3 ตำแหนง ดังน้ี ตำแหนง ท่ี 0 มีคา เปน 3 (a[0] = 3) ตำแหนง ที่ 1 มีคาเปน 4 (a[1] = 4) ตำแหนง ท่ี 2 มีคา เปน 7 (a[2] = 7)

63 ตวั อยางท่ี 2.5 การใชงานตวั แปรแบบอารเ รย วธิ ีทำ 1. สวนโปรแกรม char str[] = {'H','e','l','l','o'}; void setup() { Serial.begin(9600); Serial.print(str[0]); Serial.print(str[1]); Serial.print(str[2]); Serial.print(str[3]); Serial.print(str[4]); } void loop() { } คำอธิบาย: โปรแกรมนี้มีการประกาศตัวแปรอารเรยชื่อ str ซึ่งเปนตัวแปรแบบอักขระที่มีขนาด เทากบั 5 พรอ มกบั กำหนดคาเริ่มตนนับจากตำแหนง ท่ี 0 – 4 คอื H, e, l, l, o ตามลำดบั ฟงกชัน Setup(): กำหนดใหมีการแสดงขอความและคาตัวแปรทั้ง 4 คาผานทางพอรต อนกุ รม โดยการแสดงคาแตละตำแหนง ของ char ตง้ั แตตำแหนงที่ 0 – 4 ตามลำดับ ฟงกชัน loop(): - 2. ผลการทดลอง จะมีการแสดงขอ ความ “Hello” ที่ Serial Monitor นอกจากการประกาศการใชงานตัวแปรอารเรยชนิดอักขระดงั ตวั อยางที่ 2.5 แลวยังสามารถ ประกาศใชง านไดอกี วธิ ดี งั นี้ char str[] = {“Hello”}; โดยการประกาศใชงานในลักษณะนี้จะเปนการกำหนดใหตัวอักขระทั้งหมดอยูภายใน เคร่อื งหมายอัญประกาศซ่ึงตำแหนง เร่ิมตนคือตวั อักขระที่อยูซายสุดเรยี งไปตำแหนงสุดทายซึ่งอยูขวา สุด เรียกการประกาศใชงานลักษณะนวี้ าสตรงิ (String

64 5. คำสงั่ เงอ่ื นไข คำสั่งเงื่อนไขคือ คำสั่งที่ใชสำหรับการสรางเงื่อนไขเพื่อใชเปนทางเลือกการใชงานโปรแกรม โดยทางเลือกที่จะถูกใชงานตองตรงกับเงื่อนไขที่กำหนด (Tero & Kimmo, 2011) คำสั่งเงื่อนไข สามารถสรางไดหลายรปู แบบดงั น้ี 5.1 คำสง่ั if คำสั่ง if คือคำสั่งเงื่อนไขที่สั่งใหชุดคำสั่งที่อยูภายในกรอบของคำสั่ง if ทำงานก็ตอเม่ือ เง่ือนไขทีก่ ำหนดเปนจริง มีโครงสรางดังรปู ท่ี 2.6 if(เงอ่ื นไข){ ชุดคำสง่ั ภายในกรอบของ if; } รูปที่ 2.6 โครงสรางของคำสัง่ if ท่ีมา: ผเู ขยี น โดยตวั ดำเนนิ การท่ใี ชสำหรบั การเปรยี บเทยี บเปนดังนี้ 1. “=” ความหมายคอื เทากัน 2. “!=” ความหมายคือ ไมเทา กัน 3. “>” ความหมายคือ มากกวา 4. “<” ความหมายคอื นอยกวา 5. “>=” ความหมายคือ มากกวาหรอื เทา กบั 6. “<=” ความหมายคือ นอ ยกวาหรือเทา กับ ตวั อยา งที่ 2.6 การใชงานคำสง่ั if วธิ ีทำ 1. สวนโปรแกรม int a = 6; void setup() { Serial.begin(9600);

65 if(a > 5){ Serial.println(a); } Serial.println(\"Good Bye\"); } void loop() { } คำอธิบาย: มกี ารกำหนดตัวแปรนอกฟง กชนั 1 ตวั แปรคือ a เปน ตวั แปรแบบจำนวนเตม็ ท่ีมีคาเริ่มตน คอื 6 ฟงกชัน setup(): มีการใชคำสั่ง if ทีม่ เี งือ่ นไขคือ a > 5 ความหมายคอื หาก a มีคามากกวา 5 ชุดคำสั่งภายในกรอบของ if จะถูกดำเนินการซึ่งจากตัวอยางมีเพียง 1 ชุดคำสั่งคือแสดงคาของ a โดยมคี ำสงั่ แสดงขอ ความ “Good Bye” อยนู อกกรอบของ if ซ่ึงจะถกู แสดงเสมอเมอ่ื ฟง กช นั setup() ถูกเรียกใชง าน ฟง กช นั loop(): - 2. ผลการทดลอง รปู ที่ 2.7 ผลการทดลองการใชง านคำสัง่ if ที่มา: ผเู ขียน จากตัวอยางขางตน ทดลองเปลี่อนคาเริ่มตนของ a ใหมีคาเปน 4 ซึ่งจะพบวาเงื่อนไขของ คำสั่ง if เปนเท็จ ดังนั้นผลลพั ธจะถูกแสดงเพียง “Good Bye” เนื่องจากไมมีการดำเนินการชุดคำสัง่ ภายในกรอบของ if

66 5.2 คำส่งั if – else คำสั่ง if – else จะมีลักษณะการดำเนินการที่คลายคลึงกับคำสั่ง if เปนอยางมาก ความ แตกตางมีเพียงแคกรณีที่เงื่อนไขของ if เปนเท็จจะดำเนินการชุดคำสั่งที่อยูภายในกรอบของ else ในทางกลบั กนั หากเงอ่ื นไขเปน จรงิ จะยงั คงทำงานภายในชดุ คำส่ังท่ีอยภู ายในกรอบของคำส่งั if if(เงอื่ นไข){ ชุดคำสงั่ ภายในกรอบของ if; } else{ ชุดคำสัง่ ภายในกรอบของ else; } รูปที่ 2.8 โครงสรา งของคำสง่ั if – else ทีม่ า: ผูเขยี น ตัวอยา งท่ี 2.7 การใชง านคำสั่ง if - else วิธที ำ 1. สว นโปรแกรม int a = 4; void setup() { Serial.begin(9600); if(a > 5){ Serial.println(a); } else{ Serial.println(\"Hello\"); } Serial.println(\"Good Bye\"); } void loop() { }

67 คำอธิบาย: มกี ารกำหนดตวั แปรนอกฟง กชัน 1 ตวั แปรคอื a เปน ตวั แปรแบบจำนวนเตม็ ทมี่ ีคาเร่ิมตน คือ 4 ฟงกชัน setup(): มีการใชคำสั่ง if - else ที่มีเงื่อนไขคือ a > 5 ความหมายคือหาก a มีคา มากกวา 5 ชุดคำสง่ั ภายในกรอบของ if จะถกู ดำเนนิ การซึ่งจากตวั อยางมเี พียง 1 ชดุ คำสัง่ คอื แสดงคา ของ a ในทางกลับกันหากเงื่อนไขเปนเท็จชุดคำสั่งภายในกรอบของ else จะถูกดำเนินการซึ่งจาก ตัวอยางมีเพียง 1 ชุดคำสั่งคือแสดงขอความ “Hello” โดยมีคำสั่งแสดงขอความ “Good Bye” อยู นอกกรอบของ if ซึ่งจะถูกแสดงเสมอเมื่อฟงกชัน setup() ถูกเรียกใชงาน จากตัวอยางเนื่องจาก เง่ือนไขเปน เท็จ ดงั นัน้ ชุดคำสงั่ ท่ีอยใู นกรอบของ else จงึ ถูกเรียกใชงาน ฟงกช ัน loop(): - 2. ผลการทดลอง รปู ที่ 2.9 ผลการทดลองการใชง านคำส่งั if – else ทีม่ า: ผูเขียน 5.3 คำสงั่ if – else if - else คำสั่ง if – else if - else คือคำสั่งเงื่อนไขอีกรูปแบบหนึ่งซึ่งมีหลายเงื่อนไขใหพิจารณา โดย เงอื่ นไขแรกจะตองเปนคำส่ัง if เสมอ สวนเง่ือนไขลำดับอน่ื ๆ ทง้ั หมดจะเปน คำสั่ง else if การทำงาน คือจะตรวจสอบเงอื่ นไขตามลำดับโดยเรม่ิ จากเง่ือนไขแรกกอนเสมอ หากเงอ่ื นไขเปน เท็จจะตรวจสอบ เงื่อนไขถัดไป ซึ่งจะดำเนินการเชนนี้ไปจนกระทั่งพบเงื่อนไขที่เปนจริงและจะเขาไปดำเนินการเพียง ชุดคำสั่งที่อยูภายในเง่ือนไขดังกลาวเทา นั้น สวนสุดทายคือ else ซึ่งจะมีหรือไมมีก็เปนได โดยหากมี else จะดำเนนิ การชุดคำสั่งในกรอบของ else เมอื่ เง่อื นไขทัง้ หมดเปน เท็จ ขอควรพิจารณา การใชคำสงั่ if – else if – else มคี วามเปน ไปไดทจ่ี ะมีเง่ือนไขเปนจริงอยู หลายเงื่อนไข แตจะมีเพียงเงื่อนไขเดียวเทานั้นที่จะถูกดำเนินการ โดยเงื่อนไขที่เปนจริงที่จะถูก ดำเนินการคือเงื่อนไขแรกทีถ่ ูกตรวจพบวา เปนจรงิ เนื่องจากหากพบเงือ่ นไขดังกลา วนี้แลว โปรแกรม จะไมต รวจสอบเงอ่ื นไขอืน่ อีกตอไป

68 สำหรับโครงสรางของคำส่ัง if – else if – else แสดงดังรูปที่ 2.10 if(เงื่อนไขท่ี 1){ ชุดคำส่ังภายในกรอบของ if; } else if(เงื่อนไขที่ 2){ ชดุ คำสง่ั ภายในกรอบของ else if ตวั ท่ี 1; } else if(เง่ือนไขที่ 3){ ชดุ คำสง่ั ภายในกรอบของ else if ตัวท่ี 2; } else if(เงื่อนไขท่ี n){ ชุดคำสง่ั ภายในกรอบของ else if ตวั ท่ี n-1; } else{ ชุดคำส่ังภายในกรอบของ else; } รปู ท่ี 2.10 โครงสรา งของคำส่งั if – else if – else ท่ีมา: ผูเขยี น ตัวอยางที่ 2.8 การใชง านคำสัง่ if – else if – else วิธที ำ 1. สว นโปรแกรม int a = 18; void setup() { Serial.begin(9600); if(a < 10){ Serial.println(\"small\"); } else if (a < 20){ Serial.println(\"middle\"); } else if (a < 30){

69 Serial.println(\"large\"); } else{ Serial.println(\"out of bound\"); } Serial.println(\"Good Bye\"); } void loop() { } คำอธิบาย: มีการกำหนดตัวแปรนอกฟงกช ัน 1 ตัวแปรคอื a เปน ตัวแปรแบบจำนวนเตม็ ทมี่ ีคาเริ่มตน คอื 18 ฟงกชัน setup(): มีการใชคำสัง่ if – else if – else ที่มีเงือ่ นไขทั้งหมด 3 เงื่อนไข โดยจาก ตัวอยางสังเกตวาเงื่อนไขที่เปนจริงมีมากถึง 2 เงื่อนไขคือเงื่อนที่ 2 และ เงื่อนไขที่ 3 อยางไรก็ตาม เนื่องจากเงื่อนไขท่ี 2 ถูกตรวจพบกอนวาเปนจริงโปรแกรมจึงเลือกใชงานชุดคำส่ังภายในเงื่อนไขที่ 2 เทานั้น โดยไมสนใจเงื่อนไขที่ 3 (โปรแกรมไมไดเขาตรวจสอบเงื่อนไขนี้ หากพบวาเงื่อนไขกอนหนา เปนจริง โดยมีคำสั่งแสดงขอความ “Good Bye” อยูนอกกรอบของ if – else if – else ซึ่งจะถูก แสดงเสมอเม่ือฟงกช ัน setup() ถกู เรียกใชงาน ฟง กช ัน loop(): - 2. ผลการทดลอง รูปที่ 2.11 ผลการทดลองการใชงานคำสัง่ if – else if – else ท่มี า: ผเู ขียน

70 5.4 คำส่ัง switch – case คำสัง่ switch – case เปนคำสัง่ เงอื่ นไขแบบหลายเงือ่ นไขอกี รูปแบบหน่ึง โดยเงอ่ื นไขจะเปน ชนิดขอมูลไดทุกประเภท เชน จำนวนเต็ม จำนวนจริง อักขระ เปนตน มีโครงสรางของคำสั่งดังรูปท่ี 2.12 switch (ตวั แปร/คา คงท)่ี { case คาคงท่ตี วั ท่ี 1: ชดุ คำส่ังกรณีทีต่ วั แปร/คา คงที่ภายใน switch มคี า ตรงกบั คาคงที่ตัวที่ 1; case คาคงทีต่ วั ที่ 2: ชดุ คำสั่งกรณที ่ีตัวแปร/คา คงทภ่ี ายใน switch มคี า ตรงกบั คาคงท่ตี วั ที่ 2; case คา คงท่ีตวั ท่ี 3: ชุดคำส่งั กรณที ต่ี ัวแปร/คาคงทภ่ี ายใน switch มีคา ตรงกับคาคงที่ตวั ที่ 3; case คา คงทีต่ ัวท่ี n: ชดุ คำสงั่ กรณีท่ตี วั แปร/คา คงท่ีภายใน switch มคี า ตรงกับคา คงท่ีตัวท่ี n; default: ชุดคำส่ังกรณต่ี ัวแปร/คาคงทภี่ ายใน switch ไมต รงกับคา คงที่ภายใน case ใดๆ } รูปท่ี 2.12 โครงสรางของคำสงั่ switch – case ทมี่ า: ผูเขยี น รูปที่ 2.12 แสดงโครงสรางของคำสั่ง switch – case โดยมีหลักการทำงานคือหากตัวแปร/ คาคงที่ภายใน switch มีคาตรงกับ คาคงที่ของ case ใด ชุดคำสั่งที่อยูภายใน case ดังกลาว และ ชดุ คำสั่งอนื่ ๆ ที่อยูภายใน switch และอยภู ายใต case นจ้ี ะถกู เรียกใชงานท้ังหมด อยางไรก็ตามโดย สวนใหญน กั พฒั นาโปรแกรมมกั นยิ มเขยี นโปรแกรมใหใ ชง านเฉพาะภายใน case ท่มี ีคา คงท่ตี รงกับคา ของ switch ซงึ่ สามารถทำไดโดยการใชคำสง่ั break เนือ่ งจากโปรแกรมจะสิ้นสุดการทำงานในกรอบ คำสั่งทันทีเมื่อพบคำสั่ง break ดังนั้นหากโปรแกรมพบคำสั่ง break ใน switch ก็จะจบการทำงาน ของคำสง่ั ทง้ั หมดทอ่ี ยภู ายในกรอบของคำสั่งน้ีทนั ที

71 switch (ตัวแปร/คา คงท่ี){ case คา คงทีต่ วั ที่ 1: ชุดคำสัง่ กรณที ่ีตัวแปร/คา คงทภ่ี ายใน switch มคี า ตรงกับคา คงที่ตัวท่ี 1; break; case คาคงที่ตวั ที่ 2: ชุดคำส่งั กรณีทต่ี วั แปร/คาคงทภี่ ายใน switch มีคา ตรงกบั คาคงท่ีตัวท่ี 2; break; case คา คงท่ีตวั ที่ 3: ชดุ คำสัง่ กรณีท่ีตวั แปร/คาคงทภ่ี ายใน switch มคี า ตรงกับคา คงที่ตัวที่ 3; break; case คา คงที่ตวั ท่ี n: ชดุ คำสัง่ กรณีท่ตี วั แปร/คา คงทีภ่ ายใน switch มีคา ตรงกบั คา คงทีต่ ัวที่ n; break; default: ชดุ คำสง่ั กรณีต่ วั แปร/คา คงทภี่ ายใน switch ไมตรงกบั คาคงท่ีภายใน case ใดๆ } รปู ท่ี 2.13 โครงสรางของคำสงั่ switch – case ท่ใี ชร ว มกับคำสั่ง break ท่มี า: ผเู ขียน ตัวอยา งท่ี 2.9 การใชงานคำสงั่ switch – case วิธีทำ 1. สว นโปรแกรม int a = 2; void setup() { Serial.begin(9600); switch(a){ case 1: Serial.print(\"Hello\"); break; case 2: Serial.print(\"Hi\"); break; case 3: Serial.print(\"Good Morning\"); break; default: Serial.print(\"Good Bye\"); } } void loop() { } คำอธิบาย: มีการกำหนดตวั แปรนอกฟงกชนั 1 ตวั แปรคือ a เปน ตัวแปรแบบจำนวนเตม็ ทม่ี ีคาเร่ิมตน คือ 2


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook