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
Search
Read the Text Version
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 1 - 50
- 51 - 100
- 101 - 150
- 151 - 200
- 201 - 250
- 251 - 300
- 301 - 350
- 351 - 400
- 401 - 450
- 451 - 500
- 501 - 512
Pages: