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 ไมโครคอนโทรลเลอร์และการประยุกต์

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

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

Search

Read the Text Version

72 ฟงกชัน setup(): มีการใชคำสั่ง switch – case ที่มี case ทั้งหมด คาโดยจากตัวอยาง สังเกตคา a มีคาตรงกับ case 2 ดังนั้นจึงเขามาทำงานชุดคำสั่งของ case นี้คือการแสดงขอความ “Hi” และเน่อื งจากมคี ำส่งั break หลังจากสน้ิ สุดการแสดงขอความ โปรแกรมจึงส้นิ สุดการทำงานชุด ทำงานทั้งหมดภายใน switch case ชดุ นี้ ฟงกชนั loop(): - 2. ผลการทดลอง รูปที่ 2.14 ผลการทดลองการใชง านคำสง่ั switch – case ทีม่ า: ผูเขียน คำสั่งตรงขา มกับคำส่ัง break คือคำสั่ง continue ซงึ่ เปนคำสัง่ ทน่ี ิยมใชงานกับคำสั่งวนรอบ มีหลักการทำงานคือหากพบคำสั่ง continue โปรแกรมจะขามไปตรวจสอบเงื่อนไขของชุดคำสั่ง วนรอบทันที 6. ตัวดำเนนิ การทางลอจกิ คำสั่งเงื่อนไขดังที่กลาวในหัวขอกอนหนาไดแสดงตัวอยางใหเห็นเพียง 1 กรณีที่มีอยูใน 1 เงื่อนไข แตอยางไรก็ตามมีความเปนไปไดที่วาใน 1 เงื่อนไข อาจมีหลายกรณีใหพิจารณาซึ่งสามารถ ดำเนินการไดโดยการใชงานตัวดำเนินการทางลอจิกซึ่งแบงออกเปน 3 ประเภท กำหนดใหสถานะ “0” แทนกรณีท่เี ปนเท็จ และสถานะ “1” แทนกรณที ่ีเปนจรงิ ตวั ดำเนนิ การท้งั 3 ประเภทเปนดงั น้ี 6.1 ตวั ดำเนินการออร ตัวดำเนินการออร (ใชสัญลักษณ “||”) คือการเชื่อมกรณีทั้งหมดที่มีดวยคำวา “หรือ” โดย สถานะของผลลพั ธของแตล ะกรณีเปน ดังตารางที่ 2.2

73 ตารางท่ี 2.2 ผลลพั ธจากตัวดำเนนิ การ “ออร” ขอมูลนำเขา ผลลัพธ กรณที ี่ 1 กรณีที่ 2 0 1 00 1 1 01 10 11 จากตารางท่ี 2.2 สรปุ ไดวา หากมอี ยา งนอย 1 กรณที ่มี เี ง่อื นไขเปน จริง สถานะของผลลัพธจะ เปน จริงทันที ในทางกลับกันสถานะของผลลัพธจ ะเปนเท็จกต็ อ เมอ่ื ทกุ กรณีมีเงอ่ื นไขเปนเท็จ 6.2 ตัวดำเนินการแอนด ตัวดำเนินการแอนด (ใชสัญลักษณ “&&”) คือการเชื่อมกรณีทั้งหมดที่มีดวยคำวา “และ” โดยสถานะของผลลพั ธของแตละกรณีเปน ดัง ตารางที่ 2.3 ตารางท่ี 2.3 ผลลพั ธจ ากตัวดำเนินการ “แอนด” ขอ มูลนำเขา ผลลัพธ กรณีที่ 1 กรณีท่ี 2 0 0 00 0 1 01 10 11 จากตารางท่ี 2.3 สรุปไดวาหากมีอยางนอย 1 กรณที ่ีมีเงอื่ นไขเปน เทจ็ สถานะของผลลัพธจะ เปนเท็จทนั ที ในทางกลบั กนั สถานะของผลลัพธจ ะเปนจริงก็ตอเมือ่ ทุกกรณีมเี งอื่ นไขเปนจรงิ

74 6.3 ตวั ดำเนนิ การนิเสธ ตัวดำเนินการเสธ (ใชสัญลักษณ “!”) คือการกลับสถานะของเงื่อนไข เชนถาสถานะปจจุบัน เปนจริง เมื่อนำไปผานตัวดำเนินการนิเสธจะสงผลใหสถานะใหมเปนเท็จ ในทางกลับกันถา สถานะปจ จบุ ันเปนเทจ็ หากนำไปผานตวั ดำเนินการนิเสธจะสง ผลใหสถานะใหมเ ปน จรงิ 7. ตวั ดำเนนิ การระดบั บิต ตัวดำเนินการระดับบิต (Bitwise Operators) คือการกระทำระหวางขอมูลที่มีขนาดหลาย บิตแบบบิตตอบิต ตำแหนงบิตขอมูลที่ตรงกันจะถูกพิจารณาหาผลลัพธที่เกิดขึ้นใหมหลังผานตัว ดำเนินการระดับบติ ซ่งึ มีหลายตัวดำเนินการ ดงั นี้ 7.1 ตัวดำเนนิ การออร ตวั ดำเนนิ การออร (ใชสญั ลักษณ “|” คือการนำขอมลู มาผานกระบวนการออรแบบบติ ตอบิต โดยใชต ารางที่ 2.1 ประกอบการพิจารณา ตวั อยา งเชน 1001 | 1100 = 1101 7.2 ตวั ดำเนนิ การแอนด ตัวดำเนินการแอนด (ใชสัญลักษณ “&” คือการนำขอมูลมาผานกระบวนการแอนดแบบบติ ตอ บติ โดยใชตารางท่ี 2.2 ประกอบการพจิ ารณา ตัวอยางเชน 1001 | 1100 = 1000 7.3 ตัวดำเนินการเอ็กคลูซฟี ออร ตัวดำเนินการเอ็กคลูซีฟออร (ใชสัญลักษณ “^” คือการนำขอมูลมาผานกระบวนการ เอ็กคลูซฟี ออรแบบบติ ตอบิตโดยใชต ารางที่ 2.4 ประกอบการพิจารณา ตารางท่ี 2.4 ผลลัพธจ ากตัวดำเนนิ การ “เอก็ คลซู ฟี ออร” ขอ มูลนำเขา ผลลัพธ กรณีที่ 1 กรณีท่ี 2 0 1 00 1 0 01 10 11

75 จากตารางที่ 2.4 สรุปไดวาหากเงื่อนไขของขอมูลนำเขาในแตละกรณีมีความแตกตางกันจะ ไดผลลัพธที่มีคาเปนจริง ในทางกับกันหากเงื่อนไขของขอมูลนำเขาในแตละกรณีมีคาเทากันจะได ผลลพั ธที่มคี า เปน เท็จ ตวั อยา งเชน 1001 ^ 1100 = 0101 7.4 ตวั ดำเนนิ การคอมพลเิ มนต ตัวดำเนินการคอมพลิเมนต (ใชสัญลักษณ “~” คือการนำบิตขอมูลแตละบิตมาผาน กระบวนการกลับบิตเพื่อใหสถานะใหมมีสถานะตรงกันขามกับสถานะเดิม ตัวอยางเชน ~1001 = 0110 7.5 ตวั ดำเนนิ การเล่ือนบิตไปทางซา ย ตัวดำเนนิ การเล่ือนบติ ไปทางซาย (ใชสัญลักษณ “<<” คือการนำบิตขอมูลมาเล่ือนตำแหนง ไปทางซา ยโดยจำนวนตำแหนงของการเล่ือนขนึ้ อยูกับทผ่ี ใู ชงานกำหนด หลงั จากเล่อื นแลวจะตองเติม “0” ทางดา นขวามือโดยมีจำนวนทขี่ ึ้นอยูกบั จำนวนครงั้ ของการเล่ือน มีรูปแบบดงั น้ี รูปแบบ x = y << n; เมอื่ y คอื ขอมลู เริม่ ตนกอนทจ่ี ะถกู เลื่อน n คือจำนวนครั้งของการเลือ่ น x คือผลลพั ธห ลงั จากการเลื่อน ตัวอยางเชน กำหนดให y = 0011 สามารถคำนวณหา x = y << 1 ไดเปน 0110 7.6 ตัวดำเนนิ การเล่ือนบติ ไปทางขวา ตัวดำเนินการเลื่อนบิตไปทางขวา (ใชสัญลักษณ “>>” คือการนำบิตขอมลู มาเลื่อนตำแหนง ไปทางขวาโดยจำนวนตำแหนงของการเลื่อนขึน้ อยูกับทผี่ ูใชงานกำหนด หลังจากเล่ือนแลวจะตองเติม “0” ทางดานซายมือโดยมีจำนวนที่ขึ้นอยูกับจำนวนครั้งของการเลื่อน สำหรับขอมูลทางขวาจะถูก ตดั ทงิ้ ตามจำนวนคร้ังท่ีดำเนนิ การเล่ือนบติ มีรูปแบบดงั นี้

76 รูปแบบ x = y >> n; เมือ่ y คอื ขอมลู เริ่มตน กอนทจ่ี ะถกู เล่อื น n คอื จำนวนครงั้ ของการเลือ่ น x คือผลลัพธห ลงั จากการเลอ่ื น ตวั อยางเชนกำหนดให y = 0011 สามารถคำนวณหา x = y >> 1 ไดเ ปน 0001 8. คำส่ังทำซ้ำ จากทีไ่ ดกลาวไวในตอนตนวา โครงสรางของภาษา c++ สำหรบั สง่ั การทำงานบอรด Arduino ประกอบดวย 2 ฟงกชันเสมอซึ่ง loop() คือหนึ่งในฟงกชันที่มีลักษณะการทำงานคือ คำสั่งทุกคำสั่ง ภายในฟงกชันนี้จะถูกเรียกใชงานแบบวนซ้ำไมมีที่สิ้นสุด อยางไรก็ตามในการใชงานจริงผูใชงานอาจ จำเปนตองการควบคุมการวนซ้ำใหใชจำนวนรอบตามที่ตองการซึ่งฟงกชัน loop() ไมสามารถ ดำเนินการในลักษณะเชนนี้ได ดังนั้นในหัวขอนี้จะกลาวถึงคำสั่งที่ใชสำหรับวนรอบโดยพิจารณา จำนวนรอบตามเงื่อนไขของคำสงั่ 8.1 คำส่งั while คำสั่ง while เปนคำสั่งที่ใชสำหรับวนรอบการทำงานตามเงื่อนไขที่อยูสวนบนของคำสั่งโดย หากเง่ือนไขเปนจริง โปรแกรมจะเขาไปทำงานภายในกรอบของคำส่งั while มโี ครงสรา งเปนดงั นี้ while(เงอื่ นไข){ ชดุ คำสงั่ ภายในกรอบของ while; } รูปท่ี 2.15 โครงสรางของคำสัง่ while ทมี่ า: ผูเขียน

77 ตวั อยางท่ี 2.10 การใชง านคำสั่ง while วธิ ที ำ 1. สว นโปรแกรม int a = 0; void setup() { Serial.begin(9600); while(a < 5){ Serial.println(a); a++; } } void loop() { } คำอธิบาย: มีการกำหนดตวั แปรนอกฟง กชนั คือ a เปน ตวั แปรแบบจำนวนเตม็ ท่ีมีคา เริ่มตน คอื 0 ฟงกชัน setup(): มีการใชคำสั่ง while ที่มีเงื่อนไขคือ a < 5 ความหมายคือหาก a มีคา นอยกวา 5 ชุดคำสั่งภายในกรอบของ while จะถูกดำเนินการ อยางไรก็ตามในกรอบของ while มี คำสั่งการเพิ่มคา a ขึ้นทีละ 1 คาดังนั้นเมื่อวนรอบครบ 5 รอบจะสงผลให a = 5 ซึ่งเงื่อนไขเปนเท็จ จงึ สิน้ สดุ การทำงานในกรอบของ while ฟง กช ัน loop(): - 2. ผลการทดลอง รปู ท่ี 2.16 ผลการทดลองการใชง านคำสั่ง while ท่มี า: ผูเขยี น

78 8.2 คำส่งั do - while คำสัง่ do - while เปนคำสั่งท่ีใชส ำหรบั วนรอบการทำงานตามเงือ่ นไขท่ีอยสู ว นลางของคำส่ัง โดยหากเง่ือนไขเปน จริง โปรแกรมจะเขาไปทำงานภายในกรอบของคำสั่ง do-while มีโครงสรางเปน ดงั น้ี do{ ชดุ คำสง่ั ภายในกรอบของ do - while; }while(เงอ่ื นไข); รูปท่ี 2.17 โครงสรา งของคำสงั่ do – while ทมี่ า: ผูเขยี น เนื่องจากการตรวจสอบเง่ือนไขอยูสวนลาง ดังนั้นชดุ คำสั่งภายในกรอบของ do – while จะ ถูกดำเนินการอยางนอย 1 รอบเสมอ ซึ่งจะแตกตางจากชุดคำสั่งของ while ซึ่งอาจจะไมถูก ดำเนินการใดๆเลย ในกรณที เี่ งอื่ นไขเปน เท็จ 8.3 คำส่ัง for คำสั่ง for เปนคำสั่งที่ใชสำหรับวนรอบการทำงานทีม่ ีลักษณะแตกตางจากคำส่ัง while และ do – while เนื่องจากภายในวงเล็บของ for ประกอบดวยสวนสำคัญสามสวนคือ 1. การกำหนดคา เร่ิมตน 2. เง่ือนไข และ 3. การเพิ่มลดคา ตามลำดับ โดยมีโครงสรางเปนดังน้ี for(กำหนดคาเริ่มตน; เงือ่ นไข; การเพ่ิม-ลดคา { ชุดคำส่ังภายในกรอบของ for; } รูปท่ี 2.18 โครงสรา งของคำส่ัง for ทม่ี า: ผูเ ขียน จากรูปที่ 2.18 อธิบายการทำงานคือเริ่มการทำงานในสวนของวงเล็บจะกำหนดคาเริ่มตน (สวนที่ 1 และไปตรวจสอบเงื่อนไข (สวนที่ 2 กรณีที่เงื่อนไขเปนเท็จจะสิ้นสุดการทำงานของ for ในทางกลับกันหากเงื่อนไขเปนจริงจะเขามาดำเนินการชุดคำสั่งในกรอบของ for และหลังจาก

79 ดำเนินการคำสั่งสุดทายจะไปทำการ เพิ่ม-ลดคา (สวนที่ 3 และยอนกลับมาตรวจสอบเงือ่ นไข โดยที่ หากเงื่อนไขยังคงเปนจริงจะทำงานในกรอบของ for ซึ่งจะวนซ้ำในลักษณะเชนนี้จนกระทั่งเงื่อนไข เปน เท็จ ตวั อยางที่ 2.11 การใชง านคำส่งั for วธิ ีทำ 1. สว นโปรแกรม int a = 0; void setup() { Serial.begin(9600); for(a = 1; a < 5; a++){ Serial.print(\"a = \"); Serial.println(a); } } void loop() { } คำอธิบาย: มกี ารกำหนดตัวแปรนอกฟง กชนั 1 ตัวแปรคอื a เปนตวั แปรแบบจำนวนเตม็ ที่มีคาเร่ิมตน คือ 0 ฟงกช นั setup(): มกี ารใชค ำสัง่ for ทกี่ ารกำหนดคาเริ่มตนให a มคี า เปน 1 มเี งอ่ื นไขคือ a < 5 และมกี ารเพิ่มคา a ขึ้นรอบละ 1 คา ความหมายคอื หาก a มคี า นอ ยกวา 5 ชุดคำสัง่ ภายในกรอบ ของ for จะถกู ดำเนินการจำนวน 4 รอบ (เน่อื งจากคา เริ่มตน ของ a คือ 1 ฟง กชนั loop(): - 2. ผลการทดลอง

80 รปู ท่ี 2.19 ผลการทดลองการใชงานคำส่ัง for 8.4 คำสง่ั goto คำสั่ง goto เปนคำสั่งที่ใชสำหรับสั่งใหโปรแกรมกระโดดไปยังตำแหนงของลาเบลที่มีชื่อ ตรงกันกับคาลาเบลหลังคำสั่ง goto โดยจะไมสนใจเงื่อนไข มี 2 รูปแบบคือการกระโดดไปขางหนา และการกระโดดหลังถอยกลับซงึ่ โครงสรา งของทั้งสองรูปแบบเปน ดงั นี้ goto ช่อื ลาเบล; ชดุ คำส่งั ภายนอกกรอบของ goto; ช่อื ลาเบล: คำสั่งแรกหลงั จากกระโดดขามมา; รปู ที่ 2.20 โครงสรา งของคำสง่ั goto แบบกระโดดไปขา งหนา ทีม่ า: ผเู ขยี น ชอื่ ลาเบล: ชุดคำสัง่ ภายในกรอบของ goto; goto ช่อื ลาเบล; รูปท่ี 2.21 โครงสรางของคำสงั่ goto แบบกระโดดถอยหลังกลบั ทม่ี า: ผเู ขยี น

81 9. ฟง กช นั ฟงกชันคือชุดคำสั่งที่ถูกสรางขึ้นมาใหม และสามารถถูกเรียกใชไดจากฟงกชัน setup(), ฟงกชัน loop() รวมไปถึงฟงกชั่นอืน่ ๆ ที่ถูกสรางขึ้นเอง โดยหากไมถูกเรียกใชงานจะไมสงผลกระทบ ใดๆ ตอ สวนหลกั ของโปรแกรม มโี ครงสรางเปน ดังนี้ Datatype functionname(variable 1, variable2, …, variable n){ ชุดคำส่ังภายในกรอบของ function; } รูปที่ 2.22 โครงสรางของฟงกช ัน ท่ีมา: ผเู ขยี น เมื่อ Datatype คือ ชนิดขอมูลของคาที่ฟงกชันจะสงคืนกลับไปยังจุดที่เรียกใชฟงกชัน โดย หากฟงกช นั ที่ไมมีการคืนคาใดๆ จะประกาศสว นนี้เปน void functionname คอื ชื่อของฟงกช ัน variable 1, variable 2,…, variable n คือ ตัวแปรที่รับเขามาซึ่งสามารถรับไดเปน จำนวนไมจ ำกดั ทกุ ฟง กชนั ทีส่ รางข้ึนหากในสว นของ Datatype ที่ไมเ ปน void จำเปนตองคืนคาขอมูลไปยัง จดุ เรียกใชงานโดยชนดิ ขอมลู ทีส่ ง คนื ตอ งตรงกับ Datatype ดว ย สำหรับการเรียกใชงานฟงกชันสามารถทำไดโดยใชคำสั่ง functionname(variable 1, variable2, …, variable n) โดยจำนวนตัวแปรท่ีสงไปพรอมกบั ฟงกชันตองเทากนั ตัวอยา งที่ 2.12 การใชง านฟง กชนั แบบไมมกี ารคืนคา วิธที ำ 1. สวนโปรแกรม void setup() { Serial.begin(9600); test(); } void loop() { }

82 void test(){ Serial.println(\"Hello\"); } คำอธิบาย: ฟงกชัน setup(): มีการเรยี กใชง านฟง กชนั test() ซง่ึ เมือ่ พบคำสง่ั ดังกลา วโปรแกรมจะวิ่งไป ยงั ฟงกช นั ทม่ี ชี ือ่ ฟง กชนั และจำนวนตัวแปรท่ตี รงกัน ฟงกช ัน loop(): - ฟงกชัน test(): แสดงขอความ “Hello” 2. ผลการทดลอง รปู ที่ 2.23 ผลการทดลองการใชง านฟงกช นั แบบไมม ีการคืนคา ทม่ี า: ผเู ขียน ตัวอยางท่ี 2.13 การใชงานฟง กชนั แบบมีการคืนคา วิธที ำ 1. สว นโปรแกรม void setup() { Serial.begin(9600); int a = sum(2, 3); int b = sum(4, 6); Serial.println(a); Serial.println(b); } void loop() {

83 } int sum(int x, int y){ int z = x+y; return z; } คำอธิบาย: ฟงกชัน setup(): มีการเรียกใชงานฟงกชัน sum() จำนวน 2 ครั้งแตละครั้งสงตัวแปรที่มี คาที่แตกตางกันซึ่งเมือ่ พบคำส่ังดังกลาวโปรแกรมจะวิง่ ไปยังฟงกช นั ที่มีชือ่ ฟงกชันและจำนวนตัวแปร ที่ตรงกัน และเนื่องจากฟงกชัน sum() เปนฟงกชันที่คืนคาขอมูลแบบจำนวนเต็มกลับมายังจุดท่ี เรียกใช ดังนั้นการเรียกใชฟงกชันดังกลาวควรจะนำตัวแปรที่มีชนิดขอมูลที่ตรงกันมารอรับคาดวย และขนั้ ตอนสดุ ทายเปน การแสดงผลลัพธทงั้ 2 คา หลังจากเรยี กใชง านฟงกช นั ฟง กชัน loop(): - ฟงกชัน sum(): นำตัวแปรที่รับเขามาซึ่งมีชนิดขอมูลเปนจำนวนเต็มทั้ง 2 คามาบวกกัน และสงผลลัพธก ลบั ไปยงั จุดท่เี รยี กใชฟ งกช นั 2. ผลการทดลอง รปู ที่ 2.24 ผลการทดลองการใชง านฟง กชันแบบมีการคืนคา ทมี่ า: ผเู ขยี น นอกเหนือจากฟงกชันที่สรางขึ้นมาเพื่อเรียกใชงานเองแลว โปรแกรม Arduino IDE ยังมี ฟงกชันที่สำคัญเพื่อใหเรียกใชง านไดโดยไมตองสรา งขึน้ มาใชงานเองเรียกฟงกชันลักษณะน้ีวา บิวอิน ฟงกชัน (Built-in function โดยรายละเอียดของแตละฟงกชันจะกลาวอีกครั้งในแตละบทที่

84 จำเปนตองเรียกใชงาน แตสำหรับหัวขอนี้จะยกตัวอยางการเรียกใชงานบิวอินฟงกชันโดยเรียกใช ฟง กชนั max() ตวั อยางท่ี 2.14 การใชง านฟงกชัน max() วธิ ีทำ 1. สวนโปรแกรม void setup() { Serial.begin(9600); int a = max(3, 8); Serial.println(a); } void loop() { } คำอธิบาย: ฟง กช นั setup(): มกี ารเรยี กใชงานฟงกชัน max() ซง่ึ เปนบิวอนิ ฟงกชนั ทรี่ ับคาขอมูล 2 คา และคืนคาผลลัพธเปนคาที่มากที่สุดระหวาง 2 คาที่รับเขามา โดยจากตัวอยางผลลัพธที่ไดหลังจาก เรียกใชฟ งกชนั max() จะตอ งมีคา เปน 8 ฟงกช นั loop(): - 2. ผลการทดลอง รูปที่ 2.25 ผลการทดลองการใชงานฟงกชนั max() ท่ีมา: ผเู ขียน

85 10. การใชงาน Serial Monitor เพ่ือรับคา ทางแปนพิมพ จากหัวขอที่ผานมาทั้งหมดเปนการใชงาน Serial Monitor ในโหมดของเอาตพุต สำหรับใน หัวขอนี้จะกลาวถึงการใช Serial Monitor เพื่อทำงานในโหมดของอินพุต โดยมีฟงกที่จำเปนตอง เรยี กใชงานดงั นี้ 10.1 ฟงกชนั Serial.available() เปนฟงกช นั ท่ีใชสำหรับการตรวจสอบการสัมผสั แปน พิมพอักขระ จากผใู ชง านมรี ูปแบบเปน ดงั นี้ รปู แบบ Serial.available() 10.2 ฟงกช ัน Serial.Read() เปนฟง กช ันที่ใชส ำหรบั การอานคา จากแปนพิมพโ ดยผลลพั ธทีอ่ า นมาไดของอักขระแตล ะคา จะ อยูในรปู ของรหัสแอสกี้ รูปแบบ Serial.Read() ตัวอยางท่ี 2.15 การใชง าน Serial Monitor เพ่ือรบั คาทางแปนพิมพ วิธีทำ 1. สว นโปรแกรม void setup() { Serial.begin(9600); } void loop() { if(Serial.available() > 0){ int a = Serial.read();

86 if(a != 10){ Serial.println(a); } } delay(100); } คำอธิบาย: ฟงกชนั setup(): มีการประกาศ Baud Rate ใหม คี าเปน 9600 ฟงกชัน loop(): ตรวจสอบการสัมผัสแปนพิมพโดยหากมีการสำผัสจะกำหนดใหแสดงรหัส แอสกีข้ องตวั อักษรท่ีสมั ผัส โดยไมแ สดงคาของปุม enter (รหัสแอสกคี้ ือ 10) 2. ผลการทดลอง รปู ที่ 2.26 ผลการทดลองการใชงาน Serial Monitor เพอ่ื รับคา ทางแปนพิมพ ท่มี า: ผเู ขยี น จากรูปผลการทดลอง ผูเ ขียนไดทดสอบกดปุม a b c ซึ่งจะไดผ ลลพั ธท่ีเปนรหัสแอสกขี้ องทั้ง 3 คาซ่ึงมคี าเปน 97, 98 และ 99 ตามลำดับ 11. บทสรุป โปรแกรมภาษาที่ใชสำหรับสั่งการทำงานบอรด Arduino ทุกประเภทคือภาษา c++ (ซีพลัสพลัส ซึ่งเปนโปรแกรมภาษาที่ปรับปรงุ มาจากโปรแกรมภาษาซี อยางไรก็ตามโปรแกรมภาษา สำหรับบอรด Arduino มีโครงสรางที่เปนลักษณะเฉพาะที่แตกตางจากโครงสรางภาษา c++ ที่ใช สำหรับพัฒนาซอฟตแวรทั่วไป เนื่องจากโปรแกรมภาษาสำหรับพัฒนาบอรด Arduino จำเปนตองมี อยางนอ ย 2 ฟง กช ันเสมอ ประกอบดวยฟงกช นั setup() และฟง กช ัน loop()

87 Serial Monitor คือโหมดการแสดงผลลัพธของการรับสงขอมลู ระหวางบอรด Arduino และ เครื่องคอมพิวเตอรแบบอนุกรมผานสายสัญญาณ โดยการใชงานจำเปนตองกำหนดคา baud rate ของอุปกรณท ีจ่ ะส่อื สารกนั ใหมีคา เทา กนั จึงจะสามารถส่อื สารกันได ตัวแปร (Variable) คือคาที่ถูกกำหนดขึ้นมาเพื่อใชเก็บคาขอมูลตาง ๆ ที่จำเปนสำหรับการ ประมวลผล โดยสามารถเปลี่ยนแปลงคาใหกับตัวแปรทีต่ ำแหนงอื่น ๆ ที่อยูภายในขอบเขตที่กำหนด ไวได โดยชนิดขอมูลสำหรับตัวแปรถูกแบงออกเปนหลายประเภท เชน จำนวนเต็ม จำนวนจริง ตรรกศาสตร อักขระ เปนตน อยางไรก็ตามตัวแปรที่สามารถนำมาคำนวณไดต อ งเปนตัวแปรประเภท จำนวนจริง หรอื จำนวนเต็มเทาน้นั ตัวแปรโลคอลคือตัวแปรที่สามารถใชงานไดภายในขอบเขตที่กำหนดเทานั้น สวนตัวแปร โกบอลเปน ตัวแปรท่สี ามารถนำมาใชงานไดทกุ สวนในโปรแกรมท่อี ยูสว นใตของตวั แปรดังกลา วน้ี ตวั แปรสแตตกิ จะมีลักษณะคลายกบั ตัวแปรโลคอลคือมีขอบเขตการใชงานทีจ่ ำกัด แตมีความ แตกตางกบั ตัวแปรโลคอลตรงท่หี ากโปรแกรมออกนอกขอบเขตไปแลว คาของตวั แปรแบบสแตติกจะ ยังคงอยู คาคงที่ คือตัวแปรชนิดหนึ่งที่จำเปนตองกำหนดคาเริ่มตนใหพรอมกับการประกาศตัวแปร โดยไมส ามารถเปลย่ี นแปลงคา ไดหลังจากท่ีไดกำหนดคาไปแลว ตัวแปรพอยเตอรคือ ตัวแปรที่ถูกสรางมาเพื่อเก็บขอมูลตำแหนงหนวยความจำของตัวแปร ซึ่งจะแตกตางกับตัวแปรชนิดอื่นที่ถูกสรางเพื่อเก็บขอมูลโดยตรง โดยจะกำหนดเครื่องหมาย “*” ไว หนา ตัวแปรเพอื่ ใหท ราบวาเปนตวั แปรแบบพอยเตอร อารเรยคือตัวแปรชนิดหนึ่งที่สามารถเก็บคาขอมูลที่เปนชนิดเดียวกันไดหลายคาโดยใชคา ดรรชนีเปน ตวั ชีห้ าตำแหนงที่จัดเก็บขอ มลู ภายในอารเรย คำสั่งเงื่อนไขคือ คำสั่งที่ใชสำหรับการสรางเงื่อนไขเพื่อใชสำหรับเปนทางเลือกการใชงาน โปรแกรมสำหรับทางเลือกที่จะถูกใชง านตองตรงกับเง่ือนไขท่ีกำหนด ตัวดำเนนิ การทางลอจิกคอื การใชส ญั ลกั ษณทางตรรกศาสตรเปนตัวเชอื่ มระหวา งเง่ือนไข ตัวดำเนินการระดับบิต (Bitwise Operators) คือการกระทำระหวางขอมูลที่มีขนาดหลาย บิตแบบบิตตอบิต ตำแหนงบิตขอมูลที่ตรงกันจะถูกพิจารณาหาผลลัพธที่เกิดขึ้นใหมหลังผานตัว ดำเนินการระดบั บติ คำสั่งวนรอบ จะมีลักษณะคลายกับคำสั่งเงือ่ นไขคือกรณที ี่เง่ือนไขเปนจริงจะทำงานชดุ คำสั่ง ทีอ่ ยูภายใน แตความแตกตา งคอื คำสั่งวนรอบจะตรวจสอบเงื่อนใหมทุกคร้งั เม่ือสิน้ สุดการทำงานคำสั่ง สุดทายทอ่ี ยูภายใน โดยจะตอ งทำงานชดุ คำสัง่ เดมิ ซำ้ กรณีทเี่ งอ่ื นไขยังคงเปน จริง

88 ฟงกชันคือชุดคำสั่งที่ถูกสรางขึ้นมาใหม และสามารถถูกเรียกใชไดจากฟงกชัน setup(), ฟงกชัน loop() รวมไปถึงฟงกชั่นอืน่ ๆ ที่ถูกสรางขึ้นเอง โดยหากไมถูกเรียกใชงานจะไมสงผลกระทบ ใดๆ ตอสวนหลักของโปรแกรม ฟงกชัน Serial.available() เปนฟงกชันที่ใชสำหรับการตรวจสอบการสัมผัสแปนพิมพจาก ผูใ ชง านซ่ึงเปนการส่ือสารแบบอนกุ รมผา นสายสญั ญาณ

89 แบบฝก หัดทายบท บทท่ี 2 1. โครงสรา งโปรแกรม Arduino IDE จำเปน ตองมี 2 ฟงกชันเสมอคือฟงกชันอะไรบาง 2. จากคำถามขอท่ี 1 แตล ะฟงกช นั มีลกั ษณะการทำงานทแี่ ตกตางกนั อยา งไร 3. คำสง่ั Serial Monitor มีประโยชนอยางไร 4. จงอธบิ ายความแตกตา งระหวา งตัวแปรโกลบอลและตวั แปรโลคอล 5. คา คงที่คืออะไร 6. ตัวแปรอารเรยคอื อะไร 7. กำหนดให a = 110112 จงคำนวณหาผลลพั ธข อง a<<2 8. จงหาผลลัพธข อง 11012 ^ 01102 9. จงเขยี นโปรแกรมนบั เลขจาก 1 ถงึ 10 แบบใชค ำสั่ง for โดยไมแสดงเลข 6

90 เอกสารอางองิ ทีมงานสมารทเลิรนนิ่ง. (2554). Advanced PIC Microcontroller in C : การประยุกตใชงาน PIC ขั้นสูงดว ยภาษา C. กรุงเทพฯ: สมารท เลิรนนงิ่ . ทีมงานสมารทเลิรนนิ่ง. (2555). เรียนรูไมโครคอนโทรลเลอร MCS-51 ดวยภาษา C. กรุงเทพฯ: สมารทเลริ น น่งิ . ประจิน พลังสันติกุล. (2553). เรียนรูการเขียนโปรแกรมภาษา C ควบคุม PIC MCU จากตัวอยาง และโคด ภาษา C ดวย CSS C คอมไพเลอร. กรงุ เทพฯ: บริษัทแอพซอฟตเทค จำกดั . ประภาส พุมพวง. (2561). การเขียนและการประยุกตใชงานโปรแกรม Arduino. กรุงเทพฯ: ซีเอ็ด ยเู คชัน่ . วลิ าศณิ ี วสิ ทิ ธิก์ าศ วรพจน กรแกววัฒนกลุ และ ชยั วัฒน ล้ิมพรจิตรวไิ ล. (2551). ทดลองและใชงาน. ไมโครคอนโทรลเลอร ATmega128 ดวยโปรแกรมภาษา C กับซอฟตแวร Wiring. กรุงเทพฯ : อนิ โนเวตีฟ เอก็ พอรเิ มนต. Tero, K. and Kimmo, K. (2011). Make: Arduino Bots and Gadgets. Canada: O’Reilly Media, Inc.

แผนบรหิ ารการสอนประจำบทที่ 3 การจำลองการทำงานผา นโปรแกรม Proteus หวั ขอเนื้อหา 1. แนะนำโปรแกรม Proteus 2. การคน หาและเลอื กอุปกรณอิเลก็ ทรอนิกส 3. การหมุนและการพลกิ อปุ กรณ 4. การเชอ่ื มระหวางอปุ กรณ 5. ตัวอยางการวาดวงจรแบบสมบูรณ 6. การใชส ญั ลกั ษณแ ทนการเช่ือมระหวางอุปกรณ 7. การติดตงั้ ไลบรารสี ำหรบั บอรด Arduino ลงโปรแกรม Proteus 8. การทดสอบการใชง านรวมกนั ระหวา ง Proteus และ Arduino IDE 9. การใชงานอุปกรณ Virtual Terminal 10. บทสรุป แบบฝก หดั ทา ยบท เอกสารอา งอิง วัตถปุ ระสงคเ ชิงพฤติกรรม เม่ือผูเรียน เรียนจบบทนีแ้ ลว ผูเ รียนควรมคี วามสามารถ ดังน้ี 1. อธิบายเก่ยี วกบั การใชง านโปรแกรม Proteus ได 2. ติดตัง้ ไลบรารี Arduino สำหรบั โปรแกรม Proteus ได 3. เชื่อมปฏิสัมพันธก ารทำงานระหวา งโปรแกรม Arduino IDE และ โปรแกรม Proteus ได 4. สามารถสือ่ สารแบบอนุกรมระหวา งโปรแกรม Arduino IDE และ โปรแกรม Proteus ได 5. มีความตัง้ ใจในการเรียนและการฝก ปฏิบตั ิการตดิ ตัง้ โปรแปรมและการเชือ่ มปฏิสมั พันธ ระหวา งโปรแกรม วิธีการสอนและกจิ กรรมการเรยี นการสอนประจําบท 1. บรรยายเนื้อหาในแตละหัวขอ พรอมยกตัวอยางประกอบ โดยใชเอกสารคำสอน และสื่อ power point

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

บทท่ี 3 การจำลองการทำงานผา นโปรแกรม Proteus ปญหาสำคัญสำหรับผูอานที่ซึ่งเริ่มตนที่จะศึกษาเกี่ยวกับการใชง านวงจรอิเล็กทรอนกิ สแบบ ตางๆ รวมถึงบอรดทดลอง Arduino คือจำเปนตองจัดเตรียมอุปกรณอิเล็กทรอนิกสตางๆ ซึ่งมี หลากหลายชนิดสำหรับการทดสอบการทำงาน ซึ่งจะเปนการสิ้นเปลืองทั้งเวลา และคาใชจาย ดังนั้น ในเอกสารคำสอนเร่มิ นโี้ ดยสว นใหญเ ลือกทจี่ ะทดสอบการทำงานของวงจรตา งๆ ผา นโปรแกรมจำลอง การทำงาน ซึ่งหากผูอานมีความรูค วามเขา ใจวงจรที่ถูกเชื่อมตอผานโปรแกรมจำลองการทำงาน ก็จะ สามารถนำไปประยกุ ตใชกับวงจรจริงไดไ มย าก 1. แนะนำโปรแกรม Proteus โปรแกรม Proteus คือซอฟแวรที่ถูกพัฒนาโดยบริษัท Labcenter Electronic Ltd. เปน โปรแกรมที่ใชสำหรับจำลองการทำงานของวงจรอิเล็กทรอนิกส (นพ มหิษานนท, 2557) ซึ่งรวมถึง วงจรที่เกิดจากการนำไมโครคอนโทรลเลอรชนิดตางๆ มาประยุกตใชงานรวมดวย โดยโปรแกรม Proteus สามารถใชจำลองการทำงานทงั้ แบบวงจรอนาลอ็ ก และวงจรดจิ ทิ ลั สำหรบั ในเอกสารคำสอน น้เี ลอื กใชโปรแกรม Proteus รุน 7 ซง่ึ หากติดตั้งโปรแกรมดังกลา วลงที่เคร่ืองคอมพิวเตอรสวนบุคคล แลว สามารถเปดโปรแกรมดงั กลา วเพื่อใชง านโดยเลอื กที่ “ISIS 7 Professional” 12 5 8 6 4 37 รูปท่ี 3.1 หนาตา งโปรแกรม Proteus 7 ทม่ี า: ผูเขยี น

94 รูปที่ 3.1 แสดงตัวอยางหนาตางโปรแกรม Proteus 7 ซึ่งผูเขียนแบงสวนประกอบที่สำคัญ ออกเปนทั้งหมด 8 สวน และมีรายละเอียดทส่ี ำคญั ของแตละสวนตามหมายเลขเปนดังน้ี ตารางท่ี 3.1 สว นประกอบของหนาตา งโปรแกรม Proteus 7 ตามหมายเลขดงั รูปที่ 3.1 หมายเลข รายละเอียด 1 รวบรวมคำส่งั ทั้งหมดของโปรแกรม 2 คำส่ังท่ผี ใู ชง านเรยี กใชบ อ ย เชน คำสั่งเกี่ยวกับการจดั การไฟล คำส่ัง ปรับเปลี่ยนมุมมอง เปน ตน 3 แถบเคร่ืองมือที่ถกู จัดอยูในโหมดตา งๆ สำหรบั วาดวงจร 4 แถบสำหรับรวบรวมรายการอุปกรณท่ีถูกเลือกไวส ำหรบั การใชงาน 5 แถบแสดงสญั ลักษณอุปกรณที่ถกู เลือกจากหมายเลข 4 6 พื้นทว่ี าดรูปวงจร โดยใชวิธลี ากอปุ กรณจากแถบหมายเลข 4 หรอื 5 7 แถบคำสงั่ ควบคมุ การจำลองการทำงานของวงจร 8 แถบคำสั่งสำหรบั การหมนุ หรือพลิกอุปกรณ 2. การคนหาและเลอื กอุปกรณอเิ ล็กทรอนิกส อุปกรณอิเล็กทรอนิกสโดยสวนใหญจะอยูในแถบคำสั่ง “Component Mode” หรือ สัญลกั ษณ ซง่ึ อยใู นหมายเลข 4 โดยวิธีการคน หาอุปกรณคือเลือกท่แี ถบคำส่งั ดังกลาวและตาม ดวยเลอื กทค่ี ำสั่ง “Pick from Libraries” หรอื สญั ลักษณ รูปที่ 3.2 การเลือกคำสัง่ “Pick from Libraries” ทีม่ า: ผูเ ขียน

95 รูปที่ 3.2 แสดงการเลือกคำสั่ง “Pick from Libraries” เพื่อใชสำหรับคนหาอุปกรณ โดย การคนหาสามารถทำไดโดยใสคำคนที่ชอง “keyword” วิธีการคนหาอุปกรณของโปรแกรมคือจะ คนหาอุปกรณที่มีชื่อตัวอักษรกลุมหนาตรงกับตัวอักษรที่ผูใชงานพิมพลงทั้งหมด โดยตัวอักษรกลุม หลังที่มีตัวอักษรกลุมหนาตรงกับที่ผูใ ชงานสืบคนจะถกู แสดงออกมาทั้งหมด เชน สมมติผูใชงานพิมพ “LED-” อปุ กรณท ั้งหมดท่ีมีชอ่ื ข้ึนตน ดว ย LED- จะถูกแสดงใหผ ูใชง านเลือกใช รปู ที่ 3.3 ตวั อยา งการเลือกอุปกรณด ว ยคำคน “LED-” ท่มี า: ผเู ขียน รูปที่ 3.3 แสดงตัวอยา งการเลือกอุปกรณดว ยคำคน “LED-” ซึ่งจะพบอปุ กรณท้ังหมดที่มีช่ือ ขึ้นตนดวยคำคนดังกลาว โดยหากผูใชงานคลิกเมาส 1 ครั้งที่รายชื่ออุปกรณ โปรแกรมจะแสดง สัญลักษณของอุปกรณดังกลาวท่ี Schematic Preview (ทีมงานสมารทเลริ น นิ่ง, 2554) รปู ท่ี 3.4 ตวั อยา งการแสดงสัญลักษณผาน Schematic Preview ที่มา: ผูเขยี น

96 โดยการเลือกใชงานสามารถเลือกใชไ ดโดยการคลิกเมาสดานซาย 2 ครั้ง (ดับเบิลคลิก ที่ชื่อ อุปกรณที่ตองการเลือกใชงาน หรือคลิก 1 ครั้งที่รายชื่ออุปกรณและตามดวยการคลิกปุม “OK” (ทีมงานสมารทเลริ น น่ิง, 2555) โดยหลังจากเลือกแลวจะพบรายการอุปกรณทีผ่ ูใชง านเลือกปรากฏท่ี สวนประกอบหมายเลข 4 ดังรูปท่ี 3.5 รูปท่ี 3.5 ตวั อยางการแสดงผลการเลอื กอุปกรณ ท่มี า: ผูเขยี น รูปที่ 3.5 แสดงตัวอยางการเลือกอุปกรณจำนวน 2 ชนิดคือตัวตานทานขนาด 110 โอหม (MINRES110R) และแอลอีดีสีเหลือง (LED-YELLOW) โดยที่หากผูใชงานทดลองเลือกอุปกรณตัวใด จะหน่งึ จะพบสญั ลกั ษณอุปกรณใ นสว นประกอบหมายเลข 5 รูปท่ี 3.6 ตวั อยางการแสดงสัญลกั ษณอุปกรณท ี่ สวนประกอบหมายเลข 5 ทมี่ า: ผเู ขียน

97 3. การหมนุ และการพลกิ อปุ กรณ การวาดรูปวงจร ในบางครั้งการเปลี่ยนตำแหนง หรือทิศทางของอุปกรณจะชวยใหการ เชื่อมตอวงจรทำไดงายยิ่งขึ้น และรูปภาพมีความสวยงามมากยิ่งขึ้น ซึ่งโปรแกรม Proteus มีคำสั่งท่ี ใชส ำหรับหมนุ หรอื พลกิ อุปกรณซ งึ่ อยใู นสว นประกอบหมายเลข 8 ซึง่ มรี ายละเอียดดังนี้ ตารางท่ี 3.2 คำสั่งสำหรบั หมนุ หรือพลกิ อปุ กรณ สญั ลกั ษณ คำสง่ั ความหมาย Rotate Clockwise หมนุ อปุ กรณในทิศทางตามเข็มนาิกา Rotate Anti - Clockwise หมุนอปุ กรณใ นทิศทางทวนเขม็ นากิ า พลิกอุปกรณตามแนวแกน X X-Mirror พลกิ อุปกรณตามแนวแกน Y Y-Mirror (ก) (ข) รูปที่ 3.7 ตัวอยางการหมนุ อุปกรณในทิศทางตามเข็มนาิกา ทม่ี า: ผเู ขียน รูปที่ 3.7 แสดงตัวอยางการหมุนอุปกรณในทิศทางตามเข็มนาิกา โดย (ก) คือภาพตนฉบบั (ข) คือภาพหลงั จากหมนุ อปุ กรณไปในทิศทางตามเข็มนาิกา (ก) (ข) รูปท่ี 3.8 ตัวอยางการพลิกอุปกรณต ามแนวแกน Y ทมี่ า: ผเู ขียน

98 รูปที่ 3.8 แสดงตัวอยางการพลิกอุปกรณตามแนวแกน Y โดย (ก) คือภาพตนฉบับ (ข) คือ ภาพหลงั จากมีการพลกิ อปุ กรณตามแนวแกน Y 4. การเช่อื มระหวา งอปุ กรณ อปุ กรณท ่ีจะถูกเชื่อมตอกนั ไดนัน้ จะตองถูกนำมาวางไวภ ายในพ้นื ท่ีการวาดรูป (สว นประกอบ หมายเลข 6 เทานนั้ การเชื่อมอุปกรณส ามารถทำไดโดยการนำเมาสเคลอื่ นไปยังจดุ ปลายของอุปกรณ ทีต่ อ งการเชื่อมสายซึ่งจะปรากฏจุดเชอ่ื มเปน ส่เี หลยี่ มสแี ดงดงั รปู ท่ี 3.9 (อลงกรณ พรมท,ี 2551) รูปที่ 3.9 ตวั อยา งการเคล่ือนเมาสเขา สจู ดุ เช่อื ม ทมี่ า: ผเู ขยี น สำหรับการเชื่อมระหวางอุปกรณใหคลิกเมาสคางที่จุดเชื่อมดังตัวอยางรูปท่ี 3.9 และลากไป ยังจดุ เชอ่ื ม ของอปุ กรณอีกตวั ที่ตองการเช่ือมตอซ่งึ จดุ ที่จะเชื่อมตอไดจ ะตองปรากฏจุดเชื่อมส่ีเหลี่ยม สแี ดงดังรปู ที่ 3.10 รูปที่ 3.10 ตวั อยางการลากเสน เชอ่ื มระหวางอปุ กรณ ท่มี า: ผูเขียน จากรูปที่ 3.10 หากผูใชงานปลอยเมาส การเชื่อมระหวางอุปกรณจะเสร็จสมบูรณ ดังรูปท่ี 3.11

99 รูปที่ 3.11 ตวั อยางการเช่ือมระหวางอปุ กรณ ท่มี า: ผเู ขียน 5. ตวั อยางการวาดวงจรแบบสมบรู ณ สำหรับหัวขอนี้จะกลาวถึงตัวอยางการวาดวงจรที่สมบรู ณ พรอมแสดงผลการทำงาน โดยจะ แสดงการควบคมุ การสถานะ “ตดิ ” ของหลอดแอลอีดี การควบคุมใหหลอดแอลอีดีมีสถานะ “ติด” จำเปนตองปลอยกระแสผานขั้วแอโนด (จุดหัว ลูกศร และเช่อื มตอขว้ั แคโทด (จดุ ปลายลูกศร ลงกราวด ดงั นน้ั จึงตอ งใชอ ุปกรณแ ทนสัญลักษแ รงดัน 5 โวลน และกราวดซึ่งสามารถเลือกใชงานโดยใชคำสั่ง “Terminals Mode” หรือสัญลักษณ ใน แถบเคร่อื งมอื (สว นประกอบหมายเลข 3 รปู ที่ 3.12 ตัวอยางการเลือกคำส่ัง “Terminals Mode” ทม่ี า: ผูเขยี น ตารางท่ี 3.3 แสดงรายละเอียดของอุปกรณภายในคำสง่ั “Terminal Mode”

100 ตารางที่ 3.3 รายละเอยี ดของอปุ กรณภ ายในคำสงั่ “Terminal Mode” คำสั่ง ความหมาย DEFAULT สายสัญญาณทสี่ ามารถแทนไดห ลายชนิด เชน แรงดัน กราวด เปนตน INPUT สญั ลักษณท่ีใชแทนกรณที ีม่ ีสัญญาณอนิ พุตเขามา OUTPUT สัญลกั ษณที่ใชแทนกรณที ่ีสง สัญญาณเอาตพุตไปยังอปุ กรณชนดิ อ่ืน สญั ลกั ษณท ีส่ ามารถใชแทนไดทัง้ อินพุต และเอาตพุต BIDIR สัญลักษณแทนแรงดนั POWER สัญลักษณแ ทนสายดนิ (กราวด GROUND สญั ญาณบสั BUS รปู ท่ี 3.13 ตัวอยางการวาดวงจรควบคุมแอลอดี ีแบบสมบรู ณ ทีม่ า: ผเู ขียน รูปที่ 3.13 แสดงวงจรควบคุมแอลอีดีแบบสมบูรณโดยหากทดสอบการแสดงผลโดยเลือก คำส่งั “play” หรือสัญลักษณ จะพบวา หลอดแอลอีดจี ะติดสญั ญาณไฟ ดงั รูปท่ี 3.14 รูปท่ี 3.14 ตวั อยางการทำงานของวงจร ที่มา: ผเู ขียน

101 6. การใชสัญลกั ษณแทนการเช่ือมระหวา งอุปกรณ สำหรับกรณีที่วงจรมีขนาดใหญ อาจเกิดขอผิดพลาดไดงายในการเชื่อมอุปกรณทั้งหมดของ วงจร จึงสามารถใชสัญลักษณใ นคำสั่ง “Terminals Mode” ประกอบดว ย OUTPUT (กรณเี ปน โหมด เอาตพุต) INPUT (กรณีเปนโหมดอินพุต) หรือ BIDIR (แทนไดทั้ง INPUT และ OUTPUT) แทนการ เชื่อมจริงได อยางไรก็ตามจำเปนตองตั้งชื่อสัญลักษณจุดที่ถูกเชื่อมกันใหเหมือนกัน วงจรจึงจะ สามารถทำงานไดอ ยา งถกู ตอ ง 12 รปู ท่ี 3.15 ตวั อยางการใชสัญลกั ษณแ ทนการเช่ือมระหวา งอปุ กรณ ทม่ี า: ผูเขียน จากรปู ที่ 3.15 แสดงตัวอยา งการใชสญั ลักษณแทนการเชื่อมตอ จริง เนือ่ งจากแรงดนั ขนาด 5 โวลตจะถูกสงจากตำแหนงหมายเลข 1 สูตำแหนงหมายเลข 2 ดังนั้นจึงใชสัญลักษณ OUTPUT ที่ ตำแหนงหมายเลข 1 และใชสัญลักษณ INPUT ที่ตำแหนงหมายเลข 2 อยาไรก็ตามเนื่องจากทั้งสอง ตำแหนงน้ถี ูกสง สญั ญาณถงึ กนั จึงจำเปนตอ งต้ังชื่อใหต รงกัน ซง่ึ จากตวั อยา งน้ชี ่ือวา “test” รปู ท่ี 3.16 ตวั อยางการทำงานของวงจรท่ีใชสัญลักษณ แทนการเชื่อมระหวา งอุปกรณ ที่มา: ผูเขยี น

102 7. การติดต้ังไลบรารสี ำหรบั บอรด Arduino ลงโปรแกรม Proteus คาเรม่ิ ตน ของโปรแกรม Proteus ไมม บี อรด Arduino ไวส ำหรบั ใชง าน แตอยา งไรก็ตามไดมี นักพัฒนาไดพัฒนาไลบรารีสำหรับบอรดทดลอง Arduino สำหรับโปรแกรม Proteus ไวมากมาย หลายรนุ ดังนัน้ ผใู ชง าน สามารถเลือกดาวโหลดไลบรารีดังกลาวเพ่ือติดตัง้ ลงโปรแกรม Proteus โดย มขี ้ันตอนเปน ดงั น้ี ขนั้ ตอนท่ี 1 ดาวโหลดไลบรารสี ำหรับบอรดทดลอง Arduino โดยเอกสารคำสอนน้ผี เู ขียนเลอื กใชง าน ไลบรารีจาก https://www.electronicslovers.com/2015/03/how-to-add-arduino-library- in-to.html รปู ท่ี 3.17 หนา เว็บเพจสำหรับดาวโหลดไลบรารี่ Arduino สำหรับซอฟแวร Proteus ทม่ี า: ผูเขยี น ขั้นตอนที่ 2 แตกไฟล “Library File.zip” จะไดไฟลจำนวน 2 ไฟลคือ “ARDUINO.IDX” และ “ARDUINO.LIB” และนำทั้งสองไฟลไปเก็บไวในโฟลเดอร “LIBRARY” ที่อยูเก็บภายในซอฟแวร “Proteus” ซึ่งจากตัวอยา งเครื่องคอมพิวเตอรของผูเ ขียนทั้งสองไฟลจ ะถกู เก็บไวย ังน้ี “C:\\Program Files (x86)\\Labcenter Electronics\\Proteus 7 Professional”

103 รูปท่ี 3.18 การนำไฟล “ARDUINO.IDX” และ “ARDUINO.LIB” เก็บท่โี ฟลเดอร “Library” ของซอฟแวร Arduino ทีม่ า: ผูเขียน ข้นั ตอนท่ี 3 เปดโปรแกรม “Proteus” และทดลองคนหาไลบรารี่ Arduino จะพบวามีบอรดให เลอื กใชงาน 3 รุน ดังรปู ท่ี 3.19 รปู ที่ 3.19 บอรดใชง าน Arduino ทง้ั สามรุน ทม่ี า: ผเู ขยี น

104 8. การทดสอบการใชงานรวมกันระหวา ง Proteus และ Arduino IDE หลงั จากติดตง้ั ไลบรารสี ำหรบั บอรดทดลอง Arduino ลงโปรแกรม Proteus แลว ผูใชงานจะ สามารถวาดรูปและ จำลองการทำงานบอรดทดลองดังกลาวได ในหัวขอนี้กลาวถึงการนำโปรแกรมที่ ผานการแปรภาษาจาก Arduino IDE (ไฟลนามสกุล hex) เพื่อโหลดสูบอรดทดลองในโปรแกรม Proteus ขั้นตอนที่ 1 ทดสอบเขียนโปรแกรมลง Arduino IDE รปู ที่ 3.20 โปรแกรมตัวอยา งสำหรับทดสอบการใชงานรวมกัน ระหวางโปรแกม Proteus และ Arduino IDE ท่ีมา: ผูเขยี น ขน้ั ตอนท่ี 2 เลือก “Tools -> Board -> Arduino/Genuino Uno” เพื่อไวสำหรบั การพฒั นาบน บอรด Arduino Uno รูปท่ี 3.21 การเลอื กใชงาน Arduino Uno โดยซอฟแวร Arduino IDE ท่มี า: ผูเขยี น

105 ขั้นตอนที่ 3 เลือก “Sketch -> Verify/Compile” หรือ กด “Ctrl+R”หรือกดที่ไอคอล เพ่ือ ตรวจสอบไวยากรณและแปลงภาษาเปนภาษาเครื่องกรณีที่ไวยากรณถูกตอง ซึ่งกรณีที่กระบวนการ แปลงภาษาสำเรจ็ ซอฟแวร Arduino IDE จะสรางไฟลน ามสกลุ hex ซง่ึ เปน ไฟลภ าษาเครื่องที่จะตอง ถูกโหลดเขา สบู อรด ทดลอง โดยทั่วไปไฟลนามสกุล hex ดังกลาวนี้จะถูกสรางโดยอัตโนมัติไวที่โฟลเตอร “temp” โดย ผูใชงานสามารถตรวจสอบไดโดยการเขาไปยังโฟลเดอรดังกลาวโดยตรง หรือการใชคำส่ัง “%temp%” ท่ี “Run” รปู ท่ี 3.22 คำสงั่ เขาโฟลเดอร “Temp” ท่มี า: ผูเขยี น ข้นั ตอนท่ี 4 เมื่อเขา ไปที่โฟลเดอร “Temp” จะพบไฟลนามสกลุ hex ทถ่ี กู สรา งขนึ้ มาใหมโดยจาก ตัวอยา งคือไฟลชอ่ื “sketch_oct08a.ino.hex” ซ่งึ ถูกเก็บไวใ นโฟลเดอรช ่อื “arduino_build_234409” รูปที่ 3.23 การเขา ถงึ ไฟลน ามสกุล “hex” ท่ีถูกสรางโดยโปรแกรม Arduino IDE หลงั จากแปลภาษาสำเร็จ ทีม่ า: ผเู ขียน

106 ขน้ั ตอนท่ี 5 ทดสอบออกแบบวงจรดวยโปรแกรม Proteus โดยเลอื กใชบ อรด Arduino Uno R3 ดังนี้ รปู ที่ 3.24 วงจรตวั อยางท่ใี ชบอรด Arduino บนโปรแกรม Proteus ที่มา: ผเู ขียน ขั้นตอนที่ 6 ทดสอบโหลดไฟล “sketch_oct08a.ino.hex” ที่กลาวไวในขั้นตอนที่ 4 ลงบอรดโดย วิธีการกดเลือกทีต่ วั บอรด 2 ครงั้ จะพบหนา ตา ง “edit components” รูปท่ี 3.25 การโหลดไฟลนามสกลุ “hex” ลงบอรด ทดลอง ทีม่ า: ผเู ขยี น

107 ขั้นตอนที่ 7 ทดสอบการทำงานของโปรแกรมโดยเลือกคำส่ัง “Play” จะสังเกตเหน็ การ “ติด – ดับ” ของหลอดแอลอดี ี ทุกๆ 1 วนิ าที 9. การใชง านอปุ กรณ Virtual Terminal ในบทที่ 2 ผูเขียนไดแนะนำการสื่อสารระหวางบอรด Arduino และคอมพิวเตอรโดยใช Serial Monitor ซึ่งเปนการสื่อสารแบบอนุกรม การใชงาน Serial Monitor จำเปนตองเชื่อมตอ บอรด Arduino กับคอมพิวเตอรไวตลอดเวลา อยางไรก็ตามการสื่อสารแบบอนุกรมโดยใชเพียง โปรแกรม Proteus (ไมไ ดใชบอรด Arduino จริง สามารถทำไดโ ดยใช Virtual Terminal รปู ท่ี 3.26 อปุ กรณ Virtual Terminal ในโปรแกรม Proteus ที่มา: ผเู ขยี น จากรูปที่ 3.26 แสดงตัวอยางของอุปกรณ Virtual Terminal ในโปรแกรม Proteus ซึ่งมี ตำแหนงขาที่สำคัญคือ RxD เปนขารับสัญญาณ และขา TxD คือขาสงสัญญาณ ดังนั้นการเชื่อมตอ อุปกรณดังกลาวกับบอรด Arduino จำเปนตองเชื่อมตอสลับกัน ดังนี้ ตำแหนงขา Rxd ของ Virtual Terminal เชื่อมกับขา Tx ของบอรด Arduino และ ตำแหนงขา Txd ของ Virtual Terminal เชื่อม กับขา Rx ของบอรด Arduino ตัวอยา งท่ี 3.1 โปรแกรมทดสอบการใชง าน Virtual Terminal การทำงาน: แสดงขอความ “Hello World” ผาน Virtual Terminal ซึ่งเปนพอรตสื่อสารอนุกรม ของโปรแกรม Proteus วิธีทำ

108 1. สว นวงจรทดลอง รูปท่ี 3.27 วงจรทดสอบการใชงาน Virtual Terminal ทมี่ า: ผเู ขียน คำอธิบาย: เชื่อมตอ Virtual Terminal กบั บอรด Arduino ดงั น้ี ตำแหนงขา ตำแหนงขา Virtual Terminal บอรดทดลอง TXD (ขา 1 RXD RXD (ขา 0) TXD โดยการเรยี กใชค ำส่ัง Virtual Terminal สามารถทำไดโ ดย คลิกเมาสข วาเลือกคำสง่ั Place -> Virtual Instrumnet - > VIRTUAL TERMINAL 2. สว นโปรแกรม void setup() { Serial.begin(9600); int a = 7; Serial.print(\"Hello World\"); } void loop() { }

109 คำอธิบาย: ฟงชันก Setup(): กำหนดใหมีการแสดงขอความ “Hello World” ผานการสื่อสารแบบ อนุกรม ฟง ชันก loop(): - 3. ผลการทดลอง รูปท่ี 3.28 ผลการทดลองการทดสอบการใชงาน Virtual Terminal ท่มี า: ผูเ ขียน 10. บทสรปุ โปรแกรม Proteus เปนโปรแกรมที่ใชสำหรับจำลองการทำงานของวงจรอิเล็กทรอนิกส ซ่ึง รวมถึงวงจรที่เกิดจากการนำไมโครคอนโทรลเลอรชนิดตางๆ มาประยุกตใชงานรวมดวย โดย โปรแกรม Proteus สามารถใชจ ำลองการทำงานทงั้ แบบวงจรอนาล็อก และวงจรดิจิทลั อยา งไรก็ตาม โปรแกรมดังกลาวนี้ไมมีรายการอุปกรณของบอรด Arduino ผูใชงานจำเปนตองดาวโหลดและติดต้ัง เพิ่มเตมิ การวาดวงจรอาจไมจำเปนตองเชื่อมอุปกรณเขาหากันโดยตรง แตสามารถใชสัญลักษณใน คำสั่งกลุมของ Terminal Mode แทนได ซึ่งชุดคำสั่งที่สำคัญประกอบดวยคำสั่ง \"INPUT\" คำส่ัง \"OUTPUT\" และคำสั่ง \"BIDIR\" ซึง่ เปน คำส่ังท่สี ามารถแทนไดท ง้ั INPUT และ OUTPUT เนื่องจากการใชงาน Serial Monitor จำเปนตองเชื่อมตอบอรดทดลองจริงเขากับเครื่อง คอมพิวเตอรที่ใชสำหรับสื่อสาร ดังนั้นจึงไมสามารถใชงานคำสั่งนี้ไดโดยตรงหากใชโปรแกรมจำลอง

110 การทำงาน อยางไรก็ตามหากตองการใชกลุมชุดคำสั่งที่สือสารแบบอนุกรมนี้สามารถทำไดโดยใช อปุ กรณท่ชี ื่อวา \"Virtual Terminal\" สำหรับแสดงผลของชดุ คำสั่งแทน Serial Monitor

111 แบบฝก หัดทา ยบท บทท่ี 3 1. โปรแกรม Proteus มีประโยชนอ ยา งไร 2. การเลอื กใชงานอปุ กรณตา งๆ ในโปรแกรม Proteus สามารถเลือกผา นคำสงั่ อะไร 3. Schematic Preview ในโปรแกรม Proteus มปี ระโยชนอยางไร 4. สัญลักษณก ราวดใ นโปรแกรม Proteus สามารถเลอื กไดจากโหมดคำสัง่ อะไร 5. กรณที ่ีใชโ ปรแกรม Proteus สำหรับจำลองการทำงานบอรด Arduino หลังจากผูใชง านเขียน โปรแกรมผา นโปรแกรม Arduino IDE เสร็จและผานข้นั ตอนการตรวจสอบไวยากรณเรียบรอยซ่งึ จะ ไดไ ฟลน ามสกุล “hex” ผูใชงานสามารถเขา ถึงไฟลด ังกลาวไดจากทีใ่ ด เพ่ือทจ่ี ะนำมาควบคมุ การ ทำงานบอรด Arduino ในโปรแกรม Proteus 6. Virtual Terminal ซึ่งเปนอปุ กรณหน่ึงในโปรแกรม Proteus มีประโยชนอ ยางไร 7. ขา RXD และ TXD ของ Virtual Terminal จะถกู เชื่อมตอกับตำแหนง ใดบนบอรด Arduino Uno R3 เพ่ือใหส ามารถสื่อสารแบบอนกุ รมระหวา งบอรด Arduino ในโปรแกรม Proteus และ Virtual Terminal

112 เอกสารอางองิ ทีมงานสมารทเลิรนนิ่ง. (2554). Advanced PIC Microcontroller in C : การประยุกตใชงาน PIC ขั้นสงู ดวยภาษา C. กรุงเทพฯ: สมารท เลริ น นงิ่ . ทีมงานสมารทเลิรนนิ่ง. (2555). เรียนรูไมโครคอนโทรลเลอร MCS-51 ดวยภาษา C. กรุงเทพฯ: สมารทเลริ น นงิ่ . นพ มหิษานนท. (2557 . ออกแบบและทดสอบวงจรดว ย Proteus. กรงุ เทพฯ: คอรฟงชัน่ . อลงกรณ พรมที. (2551). อุปกรณที่ยึดอยูบนผิวและการใชงานไมโครคอนโทรลเลอร. อุดรธานี: มหาวิทยาลัยราชภฏั อุดรธานี.

แผนบริหารการสอนประจำบทท่ี 4 การควบคุมหลอดแอลอดี ี หวั ขอเนอ้ื หา 1. แอลอีดี 2. การเขยี นโปรแกรมเพื่อควบคุมหลอดแอลอีดี 2.1 ฟง กช นั pinMode() 2.2 ฟงกชนั digitalWrite() 2.3 ฟงกช นั delay() 2.4 ฟงกชัน delayMicroseconds() 3. การใชค ำส่ังควบคุมแบบไบต 3.1 การกำหนดโหมดการใชง านของแตล ะตำแหนง 3.2 การกำหนดสถานะของการใชง านเอาตพตุ แบบไบต 4. การสรา งคำส่งั วนรอบในจำนวนทจี่ ำกัด 5. การเขียนโปรแกรมควบคุมหลอดแอลอดี ีท่ีตอ ขาแคโทดกบั วงจรทดลอง 6. บทสรปุ แบบฝก หัดทายบท เอกสารอางอิง วัตถุประสงคเชิงพฤติกรรม เมอ่ื ผูเ รยี น เรยี นจบบทน้แี ลว ผเู รยี นควรมีความสามารถ ดังนี้ 1. อธบิ ายเกีย่ วกบั แอลอดี ีได 2. เขียนโปรแกรมควบคมุ หลอดแอลอีดีได 3. เขยี นโปรแกรมควบคมุ การทำงานหลอดแอลอดี ีแบบไบตได 4. เขียนโปรแกรมจำกดั จำนวนรอบการทำงานของหลอดแอลอดี ี รวมถึงประยุกตทกั ษะ ดงั กลาวกับอุปกรณแสดงผลชนิดอืน่ ได 5. มีความตง้ั ใจในการเรยี นและการฝก ปฏบิ ัติการเขียนโปรแกรม

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

บทที่ 4 การควบคมุ หลอดแอลอดี ี ในบทนี้จะกลาวถึงการเขียนโปรแกรมควบคุมหลอดแอลอีดีที่เปนอุปกรณที่นิยมถูกนำมาใช สำหรับการแสดงผลสถานะตางๆ ของอุปกรณเครื่องใช เชนสถานะการทำงานแบบปกติซึ่งอาจใช หลอดแอลอีดีสีเขียว หรือหากเครื่องใชมปี ญหาการใชงานอาจจะใชหลอดแอลอีดีสีแดงเพื่อแจงเตือน ผใู ชงาน เปนตน โดยในโปรแกรม Arduino IDE มีชดุ คำสัง่ ทีส่ ามารถควบคุมการทำงานหลอดแอลอีดี ไดทง้ั ในระดับไบต และบติ 1. แอลอดี ี แอลอีดี (Light Emitting Diode: LED คือไดโอดเปลงแสงซึ่งปจจุบันมีใหเลือกใชงาน หลากหลายสี ใชไฟเลี้ยงประมาณ 5 โวลต (กอบเกียรติ สระอุบล, 2561) โดยผูใชงานจำเปนตองตอ ไฟเลี้ยงทีข่ ัว้ แอโนด และทข่ี ้วั แคโทดจะถกู ตอ ลงกราวด รูปที่ 4.1 หลอดแอลอีดี ทีม่ า: ผเู ขียน จากรปู ที่ 4.1 แสดงตวั อยา งของหลอดแอลอดี ีโดยทแี่ ตละหลอดมจี ำนวน 2 ขา มีความยาวไม เทา กัน สำหรบั ขาที่ยาวกวา คอื ขวั้ แอโนดสวนขาท่สี ั้นกวา คือขั้วแคโทด

116 รูปท่ี 4.2 หลอดแอลอีดีในโปรแกรม Proteus ที่มา: ผูเขยี น จากรูปที่ 4.2 แสดงตัวอยางของหลอดแอลอีดีในโปรแกรม Proteus ซึ่งมีใหเลือกใชงาน หลากหลายสี เชน สีแดง สีเหลือง หรือสีเขียว เปนตน การเลือกอุปกรณดังกลาวมาใชงานสามารถ สืบคนไดโดยใชคำคน “LED-” ซึ่งจะมีรายการใหเลือกใชงานจำนวนมากโดยขอมูลหลัง “-“ คือคาสี เชน LED-RED คือหลอดแอลอดี สี ีแดงเปน ตน รูปที่ 4.3 รายการหลอดแอลอดี ีทง้ั หมดในโปรแกรม Proteus ท่ีมา: ผูเขยี น สำหรับโปรแกรม Proteus ตำแหนงขาแอโนดของหลอดแอลอีดีจะพิจารณาจากตำแหนงท่ี ติดกับหัวของลูกศรภายในวงกลมสีดำ และในทางกลับกันตำแหนงที่ติดกับหางของลูกศรจะเปน ตำแหนงขาแคโทด ดังนั้นการตอใชงานเพื่อใหหลอดแอลอีดีเปลงแสงสามารถดำเนินการไดดังรูปที่ 4.4 รูปที่ 4.4 การทดสอบตอวงจรเพอื่ ใหหลอดแอลอดี ีเปลง แสง ท่มี า: ผเู ขียน

117 อยา งไรกต็ ามภายในเอกสารคำสอนเลมนจ้ี ะกำหนดใหคำศัพทแทนความหมาย ดังตอ ไปน้ี 1. แรงดนั ขนาด 5 โวลต เขยี นแทนดวยสถานะ “HIGH” หรอื “1” 2. กราวด เขียนแทนดวยสถานะ “LOW” หรือ “0” 3. การเปลงแสง เขียนแทนดว ยสถานะ “ตดิ ” 2. การเขียนโปรแกรมเพื่อควบคุมหลอดแอลอดี ี หัวขอนี้จะกลาวถึงตัวอยางการทดลองเขียนโปรแกรมผาน Arduino IDE เพื่อควบคุมการ ทำงานหลอดแอลอีดี ซง่ึ มีทัง้ ตวั อยา งการควบคุมหลอดแอลอีดี 1 ถึง 8 ดวง โดยท่ีขาแอโนดของหลอด แอลอีดีที่ถูกนำมาใชงานทั้งหมดจะถูกเชื่อมตอกับขาของบอรด Arduino แบบ 1 ตอ 1 (ขาแอโนด หลอดแอลอีดี 1 หลอดถูกเชอื่ มขาของบอรด 1 ขา) โปรแกรม Arduino IDE มีฟงกช ันท่จี ำเปน ตองใชสำหรับควบคุมการทำงานอปุ กรณภายนอก ดงั นี้ 2.1 ฟง กชัน pinMode() คือฟงกชันที่ถูกนำมาใชสำหรับการกำหนดสถานะของโหมดการทำงานในตำแหนงขาของ บอรด Arduino ซึ่งมี 2 โหมดคือเอาตพุต และอินพุต (สนธยา นงนุช, 2560) ซึ่งโดยทั่วไปฟงกชันนี้ นยิ มถูกเรยี กใชภายในฟง กชนั setup( รูปแบบ pinMode(pin, mode_status) พารามเิ ตอร 1. pin คอื ตำแหนง ขาของบอรด Arduino ทีถ่ ูกเชือ่ มตอ กบั อปุ กรณภายนอก 2. mode_status คือการกำหนดโหมดการทำงานท่ีตำแหนงขา pin ของวงจรทดลองซึ่งแบง ออกเปน 2 สถานะดังนี้ OUTPUT คือการกำหนดโหมดเอาตพตุ ท่ตี ำแหนง ขาอา งอิงของบอรด Arduino INPUT คือการกำหนดโหมดการอินพุตซึ่งเปนการรับคาสัญญาณจากอุปกรณ ภายนอกสตู ำแหนงขาอางองิ ของบอรด Arduino

118 2.2 ฟงกช นั digitalWrite() คอื ฟงกชนั สำหรบั ควบคุมสถานะเอาตพุตทต่ี ำแหนง ขาอางองิ จากบอรด Arduino รูปแบบ digitalWrite(pin, status) พารามเิ ตอร 1. pin คือ ตำแหนงขาของบอรด Arduino ทถี่ กู เชอ่ื มตอกับอุปกรณภ ายนอก 2. status คือการกำหนดสถานะแกตำแหนงขาวงจรทดลองซ่ึงมี 2 สถานะคือ “LOW” หรือ “HIGH” 2.3 ฟง กช ัน delay() คือฟงกชันสำหรับการหนวงเวลาโดยมีการรับคาพารามิเตอรในหนวยมิลลิวินาที (Don, 2015) รูปแบบ delay(ms) พารามิเตอร 1. ms คอื ระยะของการหนว งเวลาในหนว ยมลิ ลิวินาที 2.4 ฟงกชัน delayMicroseconds() คือฟงกชันสำหรับการหนวงเวลาโดยมีการรับคาพารามิเตอรในหนวยไมโครวินาที (Tero & Kimmo, 2011) รูปแบบ delayMicroseconds(us)

119 พารามเิ ตอร 1. us คือ ระยะของการหนวงเวลาในหนวยไมโครวนิ าที ตวั อยางท่ี 4.1 โปรแกรมไฟกระพรบิ จากหลอดแอลอีดี 1 หลอด การทำงาน: หลอดแอลอีดีจะมีสถานะของการติด-ดับสลบั กนั ในทุก 1 วินาที วธิ ีทำ 1. สว นวงจรทดลอง รูปท่ี 4.5 วงจรทดลองไฟกระพรบิ ของจากหลอดแอลอีดี 1 หลอด ทม่ี า: ผเู ขียน คำอธบิ าย: ตอหลอดแอลอีดีเขา กับตำแหนง ขาที่ 3 ของบอรด Arduino โดยจากภาพหากกำหนดใหมี สถานะ “HIGH” ออกจากขา 3 เพื่อทำใหหลอดแอลอีดีมีสถานะ “ติด” แตหากกำหนดใหมีสถานะ “LOW” ออกจากตำแหนง ขา 3 ดังกลาวสง ผลใหห ลอดแอลอีดีมสี ถานะ “ดบั ” 2. สว นโปรแกรม void setup() { pinMode(3, OUTPUT); } void loop() { digitalWrite(3, HIGH); delay(1000 ; digitalWrite(3, LOW); delay(1000 ; }

120 คำอธิบาย: ฟงกชนั Setup(): กำหนดใหต ำแหนงขาท่ี 3 ของบอรด Arduino ทำหนา ทีเ่ ปน เอาตพ ุต ฟงกชัน loop(): กำหนดใหตำแหนงขาที่ 3 ของบอรด Arduino มีสถานะ “HIGH”และ สถานะ “LOW” สลบั กนั ในทุก ๆ 1 วนิ าที ขอ เสยี ของการเขียนโปรแกรมดังตัวอยางท่ี 4.1 คอื หากตอ งการเปลี่ยนตำแหนงขาของบอรด Arduino จำเปนตองแกโปรแกรมทุกจุดทม่ี ีการกำหนดขาสัญญาณ วธิ ที ี่งา ยกวา คือใหกำหนดตำแหนง ขาสัญญาณเก็บไวในตัวแปรที่เปนชนิดขอมูลแบบจำนวนเต็ม และหากจำเปนตองกำหนดสถานะให ตำแหนง ขาดังกลาว สามารถกำหนดผา นชอื่ ตวั แปรแทน (ประภาส พุมพวง, 2561) โดยจากตัวอยางท่ี 1 สามารถเปลี่ยนสว นของโปรแกรมไดเ ปนดงั นี้ Int led1 = 3; void setup() { pinMode(led1, OUTPUT); } void loop() { digitalWrite(led1, HIGH); delay(1000 ; digitalWrite(led1, LOW); delay(1000 ; } คำอธิบาย: มีการกำหนดตัวแปรชื่อ led1 เปนชนิดขอมูลแบบจำนวนเต็ม มีคาเริ่มตนเปน 3 ดังน้ัน สามารถใหช่ือตัวแปร led1 แทนตำแหนงขาที่ 3 ของบอรด Arduino ได ขอ ดีคอื หากตองการเปล่ียน ตำแหนงหลอดแอลอีดีไปยังตำแหนงอื่นของวงจรทดลอง การแกไขสวนของโปรแกรมสามารถแกไข เพยี งเปล่ยี นคำสั่งทบี่ รรทัดแรกเพียงบรรทดั เดียว อยางไรก็ตามเนื่องจากโปรแกรมนี้เปนการเปลี่ยนสถานะระหวางการติด-ดับของหลอด แอลอีดี ดังนั้นสามารถกำหนดเครือ่ งหมาย “!” ไวหนาตัวแปร led1 เพื่อแทนสถานะการกลับคาของ สญั ญาณได ซงึ่ จะชวยใหโปรแกรมสัน้ ลง (เดชฤทธ์ิ มณธี รรม, 2559) int led1 = 3; bool led1_status = LOW; void setup() { pinMode(led1, OUTPUT); }

121 void loop() { digitalWrite(led1, led1_status = !(led1_status)); delay(1000); } คำอธิบาย: มีการกำหนดตัวแปรชื่อ led1_status เปนชนิดขอมูลแบบ bool ซึ่งทำหนาที่ในการ เปลยี่ นสถานะใหก ับ led1 จากคำสัง่ digitalWrite(3, led1_status = !(led1_status)) ตัวอยางที่ 4.2 โปรแกรมหลอดแอลอดี ี 2 ดวงติดสลับกัน การทำงาน: หลอดแอลอีดี 2 ดวงจะมสี ถานะแตกตา งกนั และทุก ๆ 1 วนิ าที จะมกี ารเปลย่ี นสถานะ ของทงั้ คู วธิ ีทำ 1. สวนวงจรทดลอง รูปท่ี 4.6 วงจรทดลองหลอดแอลอดี ี 2 ดวงติดสลับกนั ทม่ี า: ผเู ขยี น คำอธิบาย: ตอ หลอดแอลอดี เี ขากบั ตำแหนงขาที่ 3 และ 4 ของบอรด Arduino 2. สวนโปรแกรม int led1 = 3; int led2 = 4; bool led_status = LOW; void setup() { pinMode(led1, OUTPUT);