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);
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: