378 3. ผลการทดลอง รูปที่ 15.2 ผลการทดลองวงจรทดสอบการใชงานหนว ยความจำอีอีพรอม และแสดงผลลพั ธผ า น Virtual Terminal ทม่ี า: ผเู ขียน จากรูปที่ 15.2 แสดงผลการทดลองวงจรทดสอบการใชงานหนวยความจำอีอีพรอมและ แสดงผลลัพธผาน Virtual Terminal โดยผลลัพธที่ไดคือ 21 เนื่องจากคาดังกลาวนี้ถูกเก็บไว ณ ตำแหนงทอ่ี านขอ มูลออกมา ตัวอยา งท่ี 15.2 ทดสอบอานคาท่ีเก็บไวท่ีหนว ยความจำอีอีพรอม การทำงาน: ตัวอยางนี้แสดงวิธีการทดสอบอานขอมูลจากตำแหนงดังกลาวจากตำแหนงเดิมอีกคร้ัง และแสดงผลลัพธผา น Virtual Terminal วธิ ีทำ 1. สวนวงจรทดลอง เชื่อมตออปุ กรณภ ายนอก เขา กบั บอรด Arduino ดังตวั อยางที่ 15.1 2. สวนโปรแกรม #include <EEPROM.h> byte x; void setup() { Serial.begin(9600); x = EEPROM.read(0); Serial.print(\"x = \"); Serial.println(x);
379 } void loop() { } คำอธิบาย: กำหนดตัวแปรชือ่ x ทีม่ ชี นดิ ขอ มูลเปน แบบ byte ฟงกชัน Setup(): ดึงขอมูลจากตำแหนงที่ 0 ดวยฟงกชัน EEPROM.read() กอนที่จะแสดง ผลลัพธท ดี่ ึงออกมาผาน Virtual Terminal ฟง กช ัน loop(): - รปู ท่ี 15.3 ผลการทดลองการอานขอมลู จากหนวยความจำอีอีพรอม และแสดงผลลพั ธผ า น Virtual Terminal ท่ีมา: ผเู ขยี น จากรูปที่ 15.3 แสดงผลการทดลองการอานขอมูลจากหนวยความจำอีอีพรอมและแสดงผล ลัพธผาน Virtual Terminal ซึ่งพบวาผลลัพธยังคงมีคาเปน 21 ถึงแมวาบอรด Arduino จะถูก เขียนทบั ดว ยโปรแกรมหรอื ชดุ คำสั่งใหม ตัวอยางที่ 15.3 ทดสอบอานคา ท่เี กบ็ ไวทหี่ นว ยความจำออี ีพรอมและนำมาควบคุมการแสดงผลผาน แอลอีดี 7 สว น การทำงาน: ตัวอยางนีแ้ บงออกเปน 2 สว น สว นที่ 1 แสดงการเขยี นขอมลู ลงหนวยความจำอีอีพรอม ตำแหนงที่ 1 และสวนที่ 2 แสดงวิธีการอานขอมูลจากหนวยความจำอีอีพรอมตำแหนงที่ 1 และนำ ขอมูลที่ดึงมาแสดงผลลัพธผ านแอลอีดี 7 สวนดงั น้ี
380 วธิ ีทำ สว นท่ี 1 1. สวนวงจรทดลอง เชื่อมตออปุ กรณภ ายนอก เขากบั บอรด Arduino ดงั ตัวอยางที่ 15.1 2. สวนโปรแกรม #include <EEPROM.h> byte x; void setup() { Serial.begin(9600); EEPROM.write(1, 3); x = EEPROM.read(1); Serial.println(x);} void loop() {} คำอธิบาย: กำหนดตัวแปรชือ่ x ทม่ี ีชนดิ ขอมลู เปน แบบ byte ฟงกชัน Setup(): เขียนขอมูลที่มีคาเทากับ 3 ลงหนวยความจำตำแหนงที่ 1 ดวยฟงกชัน EEPROM.write() และดึงขอมูลจากตำแหนงดังกลาวดวยฟงกชัน EEPROM.read() กอนที่จะแสดง ผลลพั ธทีด่ งึ ออกมาผา น Virtual Terminal ฟงกชัน loop(): - 3. ผลการทดลอง รูปที่ 15.4 ผลการทดลองการเขยี นและอานขอมลู ลงหนวยความจำอีอพี รอม ตำแหนงท่ี 1 และแสดงผลลพั ธผา น Virtual Terminal ทมี่ า: ผูเขยี น
381 สวนที่ 2 1. สวนวงจรทดลอง รูปที่ 15.5 วงจรทดลองอานขอมูลจากหนว ยความจำอีอีพรอมตำแหนงท่ี 1 และแสดงผลลัพธผ า นแอลอดี ี 7 สวน ทมี่ า: ผูเขียน คำอธิบาย: กำหนดตำแหนง ขาท่เี ชือ่ มตอกบั บอรด Arduino ดงั นี้ 1. ขา a ของแอลซีดี 7 สว นเชอ่ื มตอ กับตำแหนง ขาท่ี 2 ของบอรด Arduino 2. ขา b ของแอลซีดี 7 สวนเช่อื มตอกับตำแหนง ขาท่ี 3 ของบอรด Arduino 3. ขา c ของแอลซีดี 7 สวนเชอ่ื มตอ กบั ตำแหนง ขาท่ี 4 ของบอรด Arduino 4. ขา d ของแอลซีดี 7 สว นเช่ือมตอ กบั ตำแหนงขาที่ 5 ของบอรด Arduino 5. ขา e ของแอลซีดี 7 สว นเชอื่ มตอกบั ตำแหนงขาท่ี 6 ของบอรด Arduino 6. ขา f ของแอลซดี ี 7 สวนเช่อื มตอ กบั ตำแหนงขาที่ 7 ของบอรด Arduino 7. ขา g ของแอลซดี ี 7 สว นเชอื่ มตอ กับตำแหนง ขาที่ 8 ของบอรด Arduino 2. สวนของโปรแกรม #include <EEPROM.h> byte num; void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT);
382 pinMode(7, OUTPUT); pinMode(8, OUTPUT); num = EEPROM.read(1); if(num == 0){ show_zero(); } else if(num == 1){ show_one(); } else if(num == 2){ show_two(); } else if(num == 3){ show_three(); } else if(num == 4){ show_four(); } else if(num == 5){ show_five(); } else if(num == 6){ show_six(); } else if(num == 7){ show_seven(); } else if(num == 8){ show_eight(); } else{ show_nine(); } } void loop() {} void show_zero(){ digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH);
383 digitalWrite(7, HIGH); digitalWrite(8, LOW); } void show_one(){ digitalWrite(2, LOW); digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); } void show_two(){ digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, LOW); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, LOW); digitalWrite(8, HIGH); } void show_three(){ digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, HIGH); } void show_four(){ digitalWrite(2, LOW); digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, HIGH); digitalWrite(8, HIGH); } void show_five(){ digitalWrite(2, HIGH);
384 digitalWrite(3, LOW); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, LOW); digitalWrite(7, HIGH); digitalWrite(8, HIGH); } void show_six(){ digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, HIGH); digitalWrite(8, HIGH); } void show_seven(){ digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); } void show_eight(){ digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, HIGH); digitalWrite(8, HIGH); } void show_nine(){ digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, LOW); digitalWrite(7, HIGH);
385 digitalWrite(8, HIGH); } คำอธิบาย: กำหนดตัวแปรชือ่ num ท่ีมีชนดิ ขอมลู เปนแบบ byte ฟงกชัน Setup(): กำหนดใหขา 2, 3, 4, 5, 6, 7 และ 8 ของบอรด Arduino มีสถานะ เริ่มตนเปนโหมดเอาตพุต อานขอมูลจากหนวยความจำอีอีพรอมตำแหนงที่ 1 เก็บไวในตัวแปร num และตรวจสอบเงื่อนไขของคา num เพื่อเรียกใชฟงกชันท่ีตรงกับคาของ num โดยฟงกชันทั้งหมดจะ ทำหนา ที่แสดงผลของตวั เลขผา นแอลอดี ี 7 สว น ดังนี้ num = 0, เรียกใชฟ งกช นั show_zero() เพื่อแสดงเลข 0 ผานแอลอดี ี 7 สว น num = 1, เรียกใชฟ ง กชนั show_one() เพ่อื แสดงเลข 1 ผานแอลอดี ี 7 สวน num = 2, เรียกใชฟง กชัน show_two() เพ่ือแสดงเลข 2 ผา นแอลอีดี 7 สวน num = 3, เรียกใชฟ ง กช นั show_three() เพ่ือแสดงเลข 3 ผา นแอลอดี ี 7 สวน num = 4, เรยี กใชฟ ง กชัน show_four() เพอ่ื แสดงเลข 4 ผา นแอลอดี ี 7 สว น num = 5, เรยี กใชฟง กชนั show_five() เพ่อื แสดงเลข 5 ผานแอลอีดี 7 สวน num = 6, เรยี กใชฟง กช นั show_six() เพอ่ื แสดงเลข 6 ผา นแอลอีดี 7 สว น num = 7, เรยี กใชฟง กชัน show_seven() เพื่อแสดงเลข 7 ผา นแอลอดี ี 7 สวน num = 8, เรยี กใชฟ ง กช นั show_eight() เพื่อแสดงเลข 8 ผา นแอลอดี ี 7 สวน num = 9, เรยี กใชฟงกช ัน show_nine() เพอื่ แสดงเลข 9 ผา นแอลอดี ี 7 สว น 3. ผลการทดลอง รปู ท่ี 15.6 ผลการทดลองอา นขอมลู จากหนวยความจำออี ีพรอมตำแหนง ที่ 1 และแสดงผลลพั ธผา นแอลอดี ี 7 สว น ทม่ี า: ผเู ขียน
386 จากรปู ที่ 15.6 แสดงผลการทดลองอา นขอ มลู จากหนวยความจำอีอพี รอมตำแหนง ท่ี 1 และ แสดงผลลพั ธผ า นแอลอดี ี 7 สว น พบวา ผลลัพธแสดงเลข 3 ผานแอลอดี ี 7 สว น เนือ่ งจากคา ดังกลาว ถูกเก็บไวในหนว ยความจำออี ีพรอมตำแหนง ที่ 1 อยางไรก็ตามจากที่กลาวไวตอนนี้วาหนวยความจำอีอีพรอมสามารถอาน และเขียนไดเพียง ประมาณ 1 แสนครั้ง ดังนั้นในหัวขอถัดไปจะแนะนำฟงกชันอื่นๆ ที่สามารถเขาถึงหนวยความจำ ออี พี รอมไดเ ชน กนั โดยไมไดมกี ารเขียนขอ มูลโดยตรงซ่ึงสามารถชว ยลดจำนวนคร้ังการเขียนขอมูลลง หนวยความจำออี พี รอมลงได 4. ฟงกชนั EEPROM.update() เปน ฟงกช นั ที่ใชส ำหรบั เขียนขอมลู ที่มีขนาดไมเ กิน 1 ไบต (0 – 255) ไปยงั ตำแหนงหน่ึงของ หนวยความจำอีอีพรอมเชนเดียวกันกับฟงกชัน EEPROM.write() แตจะแตกตางจากฟงกชันดังกลา ว ตรงที่หากใชฟงกชัน EEPROM.update() จะเกิดการเขียนขอมูลก็ตอเมื่อขอมูลใหมตางจากคาขอมูล เดมิ ที่บรรจุอยูใ นตำแหนง เดียวกนั จงึ เปรียบเสมือนการแกไ ขขอมูล รปู แบบ EEPROM.update(address, value) พารามิเตอร 1. address คอื ตำแหนงทีอ่ ยขู องหนว ยความจำอีอีพรอมท่ตี องการใชสำหรบั แกไขขอมูล 2. value คอื คาขอ มูลท่ตี องการแกไขลงหนวยความจำอีอพี รอมซงึ่ มีขนาดไมเ กิน 1 ไบต ตัวอยา งที่ 15.4 ทดสอบใชฟงกชนั EEPROM.update() แทนฟงกช นั EEPROM.write() การทำงาน: จากตัวอยา งท่ี 15.1 และ 15.2 ขอมูลท่ีถกู เขยี นไวท ห่ี นวยความจำอีอีพรอมตำแหนง ท่ี 0 คือ 21 โดยจะเขียนขอมลู ใหมทบั ตำแหนงเดิมโดยใช ฟงกช ัน EEPROM.update() วิธที ำ 1. สวนวงจรทดลอง เชอ่ื มตออปุ กรณภายนอก เขากับบอรด Arduino ดังตัวอยา งที่ 15.1
387 2. สว นโปรแกรม #include <EEPROM.h> byte x; void setup() { Serial.begin(9600); x = EEPROM.read(0); Serial.print(\"Before update: x = \"); Serial.println(x); EEPROM.update(0, 18); x = EEPROM.read(0); Serial.print(\"After update: x = \"); Serial.println(x); } void loop() {} คำอธิบาย: กำหนดตัวแปรชอ่ื x ที่มีชนดิ ขอมูลเปน แบบ byte ฟงกชัน Setup(): กอนการแกไขขอมูลทำการอานขอมูลจากหนวยความจำอีอีพรอม ตำแหนงที่ 1 และแสดงผาน Virtual Terminal และทำการแกไขขอมูลที่ตำแหนงเดิมดวยฟงกชัน EEPROM.update() โดยแกไขคาขอมูลเปน 18 และแสดงการอานขอมูลจากตำแหนงเดิมโดยแสดง ผลลพั ธอกี ครัง้ ผาน Virtual Terminal ฟง กช ัน loop(): - รูปที่ 15.7 ผลการทดลองการแกไ ขขอมูลนหนวยความจำอีอพี รอมดว ยฟงกช ัน EEPROM.update() และแสดงผลลพั ธผาน Virtual Termainal ทีม่ า: ผเู ขยี น
388 จากรูปที่ 15.7 แสดงผลการทดลองการแกไขขอมูลนหนวยความจำอีอีพรอมดวยฟงกชัน EEPROM.update() และแสดงผลลัพธผาน Virtual Termainal พบวาหลังจากใชฟงกชัน EEPROM.update() ขอมูลทต่ี ำแหนง 0 ถกู แกไ ขเปน 18 การเขียนขอมูลดวยฟงกชัน EEPROM.write() และ EEPROM.update() จะสามารถเขียน ขอมูลที่มีขนาดสูงสุดไดเพยี ง 1 ไบต ในหวั ขอ ถดั ไปจะกลาวถงึ ฟงกช นั ทีส่ ามารถอานและเขียนขอมูลที่ มีขนาดสงู กวา 1 ไบต 5. ฟงกชัน EEPROM.put() ฟงกช นั EEPROM.put() เปนฟงกช นั ท่ีใชส ำหรับเขยี นขอมูลลงหนวยความจำอีอีพรอม โดย ขอมลู ท่ีถกู เขียนลงสามารถมีขนาดที่ใหญกวา 1 ไบต หรือเปนออปเจ็คได รูปแบบ EEPROM.put(address, data) พารามเิ ตอร 1. address คอื ตำแหนงท่ีอยูของหนว ยความจำอีอพี รอมที่ตองการใชส ำหรบั เขียนขอมูล 2. data คือ คา ขอมลู ที่ตอ งการเขยี นลงหนวยความจำออี ีพรอม 6. ฟงกช นั EEPROM.get() ฟงกชนั EEPROM.get() เปน ฟง กชันท่ีใชส ำหรบั อา นขอมลู จากหนว ยความจำอีอีพรอม โดย ขอมลู ที่ถูกอานสามารถมีขนาดท่ใี หญก วา 1 ไบต หรือเปนออปเจ็คได รูปแบบ EEPROM.get(address, data)
389 พารามเิ ตอร 1. address คอื ตำแหนงท่อี ยูของหนว ยความจำออี พี รอมท่ตี องการใชส ำหรับอา นขอมูล 2. data คือ คาขอมูลที่ตองการอานจากหนวยความจำอีอีพรอมและเก็บผลลัพธไวที่คา ดังกลา วนี้ อยา งไรก็ตามเน่ืองหนวยความจำอีอีพรอมในแตละตำแหนงจะเก็บขอมูลขนาดไมเกิน 1 ไบต หากเขยี นขอมูลชุดแรกลงหนวยความจำตำแหนง ใดๆ จำเปนตอ งคำนวณตำแหนง หนวยความจำถัดไป ทีว่ า งและสามารถนำมาใชสำหรบั เกบ็ ขอมลู ชุดท่สี องหรอื ชดุ อื่นๆ ถัดไปได โดยใชฟ ง กช นั ชอ่ื typeof() ซงึ่ เปน ฟงกช นั ทใ่ี หผลลัพธเปน ขนาดของตัวแปร 1 ตัวแปรทใ่ี ชเปนคาพารามิเตอรร ปู แบบเปนดงั น้ี รปู แบบ sizeof(variable) พารามเิ ตอร 1. variable คือ ตวั แปรที่ตองการคำนวณหาขนาด ตัวอยา งท่ี 15.5 ทดสอบใชฟงกชัน EEPROM.put() และ EEPROM.get() การทำงาน: เกบ็ คา 2 คาไวใ นหนว ยความจำอีอีพรอมดงั น้ี 1. เก็บขอมลู จำนวนจริงชนดิ float ดังน้ี x = 415.10 2. เกบ็ อักขระแบบอารเ รยช นดิ char ดงั นี้ y[] = “Hello” ซึ่งจากทั้งสองคาสังเกตไดวามีขนาดเกิน 255 ดังนั้นแตละคาจึงไมสามารถเก็บไวใน หนวยความจำอีอีพรอมเพียง 1 ตำแหนงได ดังนั้นการเก็บขอมูลคาที่ 2 จึงจำเปนตองคำนวณคา ตำแหนง ถดั ไปท่ีใชส ำหรบั เก็บขอ มลู โดยใชฟ ง กชัน sizeof() พจิ ารณาไดจ ากโปรแกรม วิธีทำ 1. สวนวงจรทดลอง เชื่อมตออุปกรณภายนอก เขา กบั บอรด Arduino ดังตวั อยางที่ 15.1 2. สวนโปรแกรม #include <EEPROM.h> void setup() {
390 Serial.begin(9600 ; float x = 415.1; char y[] = \"Hello\"; EEPROM.put(0, x); EEPROM.put(sizeof(x), y); EEPROM.get(0, x); EEPROM.get(sizeof(x), y); Serial.print(\"x = \"); Serial.println(x); Serial.print(\"y = \"); Serial.println(y); } void loop() {} คำอธิบาย: ฟงกชัน Setup(): ประกาศตัวแปรชื่อ x ที่มีชนิดขอมูลเปนจำนวนจริงแบบ float และตัว แปรอารเ รยช่ือ y ท่มี ีชนิดขอ มูลเปน อกั ขระ โดยเกบ็ x ไวในตำแหนงที่ 0 ของหนวยความจำอีอีพรอม จากนั้นเก็บ y ไวในตำแหนงถัดไปของหนวยความจำอีอีพรอม โดยตำแหนงที่ใชเก็บ y สามารถทำได โดยใชคำสั่ง sizeof(x) และขั้นตอนสุดทายทดสอบอานทั้งสองคามาแสดงผลลัพธผาน Virtual Terminal ฟง กชัน loop(): - 3. ผลการทดลอง รูปที่ 15.8 ผลการทดลองการเขยี น - อานขอมูลนหนวยความจำอีอพี รอมดว ยฟงกชัน EEPROM.put() และ EEPROM.get() ทม่ี า: ผเู ขยี น
391 จากรูปที่ 15.8 แสดงผลการทดลองการอานเขียนขอมูลในหนวยความจำอีอีพรอมดวย ฟงกชัน EEPROM.put() และ EEPROM.get() ซึ่งพบวาสามารถเขาถึงตำแหนงหนวยความจำเพื่อ เขียน และอา นขอมูลท้ังสองชดุ ไดอ ยา งถูกตอง 7. บทสรปุ อีอีพรอม คือหนวยความจำชนิดหน่ึงที่สามารถอาน เขียน ลบ และแกไขขอมูลที่ถูกเกบ็ ไวใน ตำแหนงตางๆ ภายในหนวยความจำไดโดยใชสัญญาณไฟฟาสำหรับจัดการขอมูล สำหรับพื้นที่การ จัดเก็บขอมูลหนวยความจำอีอีพรอมคอื 1 กิโลไบต จุดเดนของหนวยความจำอีอีพรอมคือขอมูลทีถ่ กู เก็บไวจะยังคงอยูถึงแมวาจะหยุดจายไฟเลี้ยง ดังนั้นการเขียนขอมูลลงหนวยความจำอีอีพรอมจึง เปรยี บเสมอื นการบันทกึ ขอมูล อยางไรกต็ ามการนำหนวยความจำอีอีพรอมมาใชส ำหรับการอาน และ การเขยี นขอมูลจะสามารถดำเนินการไดท้ังหมดอยูท่ีประมาณ 1 แสนครัง้ โปรแกรม Arduino IDE มี ฟงกชันที่สำคัญสำหรับจัดการหนวยความจำอีอีพรอม ดังนี้ ฟงกชัน EEPROM.write() เปนฟงกชันที่ ใชสำหรับเขียนขอมูลที่มีขนาดไมเกิน 1 ไบต (0 – 255 ไปยังตำแหนงหนึ่งของหนวยความจำ อีอีพรอม ฟงกชัน EEPROM.read() เปนฟงกชันที่ใชสำหรับอานขอมูลที่มีขนาดไมเกิน 1 ไบต (0 – 255 จากตำแหนง หนึ่งของหนวยความจำอีอีพรอม ฟงกชัน EEPROM.update() เปนฟงกชันที่ใช สำหรับเขียนขอมูลทีม่ ีขนาดไมเกิน 1 ไบต (0 – 255 ไปยังตำแหนงหนึ่งของหนวยความจำอีอีพรอม โดย EEPROM.update() จะเกิดการเขยี นขอมูลก็ตอเมื่อขอ มูลใหมตางจากคา ขอ มูลเดิมท่ีบรรจอุ ยูใน ตำแหนงเดียวกันจึงเปรียบเสมือนการแกไขขอมูล ฟงกชัน EEPROM.put() เปนฟงกชันที่ใชสำหรับ เขียนขอมูลลงหนวยความจำอีอีพรอม โดยขอมูลที่ถูกเขียนลงสามารถมีขนาดที่ใหญกวา 1 ไบต และ ฟง กช นั EEPROM.get() เปนฟง กชันทีใ่ ชส ำหรับอา นขอมูลจากหนว ยความจำอีอีพรอม โดยขอมูลที่ถูก อานสามารถมขี นาดทใี่ หญกวา 1 ไบต หรือเปนออปเจค็ ได
392 แบบฝก หดั ทา ยบท บทที่ 15 1. หนวยความออี พี รอมคอื อะไร 2. หนว ยความออี พี รอมมีพืน้ ที่สำหรบั จดั เกบ็ ขอ มลู อยทู เ่ี ทา ใด 3. จุดเดนของหนว ยความจำอีอพี รอมคอื อะไร 4. หนว ยความจำอีอพี รอมสามารถถกู อาน เขียนไดประมาณก่ีคร้งั 5. ฟง กช นั ท่ใี ชส ำหรับอานขอมลู จากหนว ยความจำอีอีพรอมมชี ื่อวา อะไร 6. คาสูงสดุ ทีฟ่ งกชนั EEPROM.write() สามารถเขียนขอมลู ลงหนวยความจำออี พี รอมไดค ือเทาใด 7. ความแตกตางระหวางฟงกชัน EEPROM.write() และ EEPROM.put() คืออะไร 8. จากโปรแกรมที่กำหนดใหจงหาผลลัพธสุดทายของ z (คำนวณเอง โดยหามนำโปรแกรมไป ประมวลผล) #include <EEPROM.h> byte x; byte y; byte z; void setup() { Serial.begin(9600); EEPROM.write(0, 21); EEPROM.write(1, 14); x = EEPROM.read(0); y = EEPROM.read(1); z = x + y; EEPROM.write(1, z); x = EEPROM.read(1); Serial.println(x); } void loop() { }
393 เอกสารอา งองิ กอบเกียรติ สระอุบล. (2561). พัฒนา IoT บนแฟรตฟอรม Arduino และ Raspberry Pi. กรุงเทพฯ: หสม สำนักพิมพ อินเตอรมเี ดยี . ประภาส พุมพวง. (2561). การเขียนและการประยุกตใชงานโปรแกรม Arduino. กรุงเทพฯ: ซีเอ็ด ยูเคชั่น. Bell, C. (2016). MySQL for the Internet of Things. United States: Apress. Nandanwar, V.G., Kashif, M.M. and Ankushe, R.S. (2017). Portable Weight Measuring Instrument. Proceedings of the International Conference on Recent Trends in Electrical, Electronics and Computing Technologies, July 30-31 2017. (pp. 44 – 48). India: IEEE.
แผนบรหิ ารการสอนประจำบทที่ 16 การสรา งไลบรารสี ำหรบั โปรแกรม Arduino IDE หวั ขอเนือ้ หา 1. ไฟลส ว นหัว 2. ไฟลห ลัก 3. การสรา งไลบรารี 4. การสรางไลบรารสี ำหรบั แอลอดี ี 7 สวน 5. บทสรุป แบบฝก หัด เอกสารอา งองิ วัตถปุ ระสงคเ ชิงพฤติกรรม เมอื่ ผเู รียน เรยี นจบบทนแ้ี ลว ผเู รยี นควรมคี วามสามารถ ดังนี้ 1. อธบิ ายเกยี่ วกับการสรางไลบรารีข้ึนใชง านเองได 2. อธิบายเก่ียวกับการสรางไฟลสว นหัวสำหรบั ไลบรารีได 3. อธบิ ายเก่ยี วกบั การสรางไฟลหลักสำหรับไลบรารไี ด 4. เขยี นโปรแกรมเพือ่ สรา งไลบรารีขึน้ ใชงานเอง และทดลองเรียกใชง าน 5. มีความต้งั ใจในการเรยี นและการฝก ปฏบิ ัติการเขียนโปรแกรม วิธีการสอนและกิจกรรมการเรยี นการสอนประจำบท 1. บรรยายเนอื้ หาในแตล ะหัวขอ พรอมยกตัวอยางประกอบ โดยใชเ อกสารคำสอน และสื่อ power point 2. ทดลองปฏิบัติจริง โดยการสรางไลบรารีสำหรับโปรแกรม Arduino IDE และทดสอบ เรียกใชง านผานฟงกช นั setup() หรือ loop() 3. ผสู อนสรปุ เนอ้ื หา 4. ทำแบบฝก หัดเพ่ือทบทวนบทเรยี น 5. เปดโอกาสใหผเู รยี นถามขอสงสยั 6. ผสู อนทำการซักถาม
396 สอ่ื การเรยี นการสอน 1. เอกสารคำสอนวิชาการประยุกตใ ชง านไมโครคอนโทรลเลอร 2. ส่อื power point การวัดผลและการประเมิน 1. การเขา เรียนตรงตอเวลา และการแตงกาย 2. ความรวมมอื และความรบั ผดิ ชอบตอ การเรยี น 3. การถาม-ตอบ 4. การสง งานที่ไดรับมอบหมายภายในเวลาทก่ี ำหนด 5. การทำแบบฝกหดั ทม่ี ีความถูกตอ งไมนอ ยกวา 80%
บทที่ 16 การสรางไลบรารสี ำหรับโปรแกรม Arduino IDE ในบทนี้จะกลาวถึงวิธีการสรางไลบรารีอยางงายสำหรับโปรแกรม Arduino IDE ขอดีของการ สรางไลบรารีคือชวยประหยัดเวลาในการพัฒนาโปรแกรมทั้งสำหรับผูพัฒนา (กอบเกียรติ สระอุบล, 2561) และผใู ชงานท่ีนำไลบรารไี ปใชงาน โดยการสรา งไลบรารจี ำเปน ตองมไี ฟลหลกั อยา งนอ ย 2 ไฟล คอื ไฟลส ว นหวั (Header File และไฟลหลัก 1. ไฟลสว นหัว ไฟลสวนหัวคือ ไฟลที่มีนามสกุล .h คือไฟลที่ใชเก็บขอมูลตวั แปร และฟงกชันทั้งหมดที่มีอยู ในไฟลหลัก (เดชฤทธิ์ มณีธรรม, 2559) โดยจะเปนเพียงการประกาศชื่อตัวแปร และชื่อฟงกชันเพียง เทานนั้ โดยคาตัวแปร หรอื การทำงานภายในฟง กช นั จะถกู สรา งไวภายในไฟลห ลักท้ังหมด โดยรปู แบบการสรา งไฟลสว นหวั เปน ดงั ตารางท่ี 16.1 ตารางท่ี 16.1 โครงสรางไฟลสวนหัว 1 #ifndef (ชื่อไฟลส วนหวั )_h 2 #define (ชื่อไฟลส วนหวั )_h 3 #include \"Arduino.h\" 4 /* 5 พน้ื ที่เขยี นการโปรแกรม 6 */ 7 #endif จากตารางที่ 16.1 การเขียนโปรแกรมประกอบดวยกำหนดชื่อตัวแปร และฟงกชันทั้งหมดท่ี ถูกใชงานภายในพื้นที่การเขียนโปรแกรม อยางไรก็ตามภายนอกพื้นที่การเขียนโปรแกรมมีคำสั่งท่ี สำคัญที่อยูบรรทัดที่ 1, 2 และ 7 ซึ่งเปนคำสั่งที่มีไวสำหรับตรวจสอบชื่อไลบรารซี ้ำหรือไม เนื่องจาก หากชื่อไลบรารีที่สรางขึ้นใหมมีอยูแลวโปรแกรมจะไมทำงานตามคำสั่งภายในไลบรารีที่สรางขึ้นใหม โดยอธิบายการทำงานแตละบรรทัดดงั นี้
398 บรรทดั ที่ 1: ตรวจสอบวา ชอ่ื ไลบรารถี ูกกำหนดไวแลว หรือไมซ ่ึงกรณีที่ยังไมมีการกำหนดชื่อ ไฟลด ังกลาว เง่ือนไขเปน จรงิ จึงทำงานในบรรทดั ถดั ไป บรรทัดท่ี 2: กำหนดใหสรางไลบรารไี วสำหรับการเรียกใชง าน บรรทัดที่ 3: เรียกใชงานไลบรารีของ Arduino โดยการสรางไลบรารีสำหรับโปรแกรม Arduino IDE จะตองมีการเรยี กใชไ ลบรารดี งั กลา วเสมอ บรรทัดท่ี 7: ส้นิ สดุ คำสั่งเงือ่ นไขบรรทัดท่ี 1 รูปที่ 16.1 แสดงตัวอยางการสรางไฟลสวนหัวชื่อ “ledblink.h” ซึ่งมีการประกาศฟงกชัน สำหรบั ใชง าน 2 ฟงกช ันคือ ฟง กช ัน LEDBlinK( และ ฟงกชัน LEDBlink2Times() โดยทัง้ 2 ฟงกชัน มกี ารรบั พารามิเตอรจำนวน 2 คา คอื pin สำหรับแทนตำแหนง ขาของบอรด Arduino และ mstime แทนการหนวงเวลาในหนวยมลิ ลวิ ินาที #ifndef ledblink_h #define ledblink_h #include \"Arduino.h\" void LEDBlink(int pin, int mstime); void LEDBlink2Times(int pin, int mstime); #endif รปู ท่ี 16.1 ตัวอยางการสรางไฟลสว นหวั ชอ่ื “ledblink.h” ท่มี า: ผูเขียน 2. ไฟลห ลัก ไฟลหลักสำหรับการสรางไลบรารีคือไฟลทีเ่ ก็บคาตัวแปร และคำสั่งทั้งหมดของตัวแปร และ ฟงกชันทั้งหมดที่ถูกประกาศภายในไฟลสวนหัว โดยจะมีนามสกุลเปน “.cpp” โดยรูปแบบการสราง ไฟลห ลกั เปน ดงั ตารางที่ 16.2
399 ตารางที่ 16.2 โครงสรางไฟลหลกั 1 #include \"Arduino.h\" 2 #include \"ชอ่ื ไฟลส วนหัว.h\" 3 /* 4 พน้ื ท่ีเขยี นการโปรแกรม 5 */ จากตารางที่ 16.2 การเขียนโปรแกรมประกอบดวยกำหนดตัวแปร และคำสั่งภายในฟงกชนั ทั้งหมดทถี่ กู ประกาศไวท ี่ไฟลส ว นหวั อยูภ ายในพืน้ ทีก่ ารเขยี นโปรแกรม #include \"Arduino.h\" #include \"ledblink.h\" void LEDBlink(int pin, int mstime){ digitalWrite(pin, HIGH); delay(mstime); digitalWrite(pin, LOW); delay(mstime); }void LEDBlink2Times(int pin, int mstime){ digitalWrite(pin, HIGH); delay(mstime); digitalWrite(pin, LOW); delay(mstime); digitalWrite(pin, HIGH); delay(mstime); digitalWrite(pin, LOW); delay(mstime); } รูปที่ 16.2 ตวั อยางการสรางไฟลห ลักชือ่ “ledblink.cpp” ท่มี า: ผูเขยี น
400 รูปที่ 16.2 แสดงตัวอยางการสรางไฟลหลักชื่อ “ledblink.cpp” ซึ่งบรรจุชุดคำสั่งภายใน ฟงกช นั ท้ังหมดท่ีประกาศไวท่ีไฟลสว นหวั โดยมีรายละเอยี ดดงั น้ี ฟงกชัน LEDBlink() : แสดงการสลับสถานะของ pin จำนวน 1 รอบโดยกำหนดการหนวง เวลาการของเปล่ยี นสถานะในแตละชว งเปน mstime มิลลิวนิ าที ฟงกชัน LEDBlink2Times() : แสดงการสลบั สถานะของ pin จำนวน 2 รอบโดยกำหนดการ หนวงเวลาการของเปล่ียนสถานะในแตล ะชว งเปน mstime มิลลิวินาที 3. วิธีการสรางไลบรารี หัวขอนี้จะกลาวถึงขั้นตอนการสรางไลบรารีสำหรับใชงาน โดยตัวอยางประกอบการใชงาน ประกอบดว ย 2 ไฟลคอื ไฟลสว นหัวและไฟลหลักจากหัวขอท่ี 16.1 (ledblink.h) และจากหวั ขอ 16.2 (ledblink.cpp ตามลำดับ โดยมขี น้ั ตอนการดำเนินการเปน ดงั นี้ ลำดับที่ 1: สรางโฟลเดอรขึ้นมาใหม โดยจากตัวอยางตั้งชื่อโฟลเดอรเปน “myArduino_Library”และนำไฟล “ledblink.h” และ “ledblink.cpp” บรรจุไวในโฟลเดอร ดังกลา ว ลำดับท่ี 2: นำโฟลเดอรด ังกลาวน้ีไปเก็บไวท ี่ “arduino\\libraries” รปู ที่ 16.3 การนำโฟลเดอรเ กบ็ ไลบรารที ่สี รางใหมเ ก็บไวท ี่ “arduino\\libraries” ทีม่ า: ผเู ขียน
401 ลำดับที่ 3: เพิ่มไฟลไปยัง Arduino IDE เปดโปรแกรม Arduino IDE เลือก Sketch -> Add file -> ledblink และเมื่อสังเกตที่ Sketch -> Include Libraly จะพบไลบรารีช่ือ “myArduino_Library” ซง่ึ คอื ไลบรารีทสี รางขึน้ ใหม รูปที่ 16.4 ไลบรารีท่ีสรา งข้ึนใหม ทมี่ า: ผเู ขียน ลำดับที่ 4: กรณีที่ผูใชงานตองการใชงานไลบรารีดังกลาว ใหเขาในสวนของ editor ไดโดย เลือกที่ Sketch -> Include Library -> myArduino_Library ซึ่งจะมีการประกาศไฟลสวนหัว (Header File) ของไลบรารดี ังกลาวที่สวนบนสุดของโปรแกรม (สนธยา นงนุช, 2560) รูปที่ 16.5 การประกาศไฟลส วนหวั สำหรบั เรียกใชงาน ไลบรารที ีส่ รางขึ้นใหม ทม่ี า: ผูเขยี น
402 หลังจากนั้นสามารถเรียกใชฟงกชันทั้งหมดภายในไลบรารี ledblink ซึ่งประกอบดวย LEDBlink() และ LEDBlink2Times() ไดท ง้ั ผานฟงกช นั setup() และ loop() ตัวอยางที่ 16.1 ตัวอยางการสงั่ การทำงานของหลอดแอลอีดี 1 หลอดใหเกดิ การกระพริบ 1 ครั้ง การทำงาน: หลอดแอลอีดีจะแสดงสถานะของการ “ติด” และ “ดับ” เพียง 1 ครั้งผานการเรียกใช งานไลบรารี “myArduino_Library” วิธีทำ 1. สวนวงจรทดลอง รูปที่ 16.6 วงจรทดลองการไฟกระพริบของจากหลอดแอลอดี ี 1 หลอด ผา นการเรียกใชไ ลบรารี “myArduino_Library” ที่มา: ผเู ขียน คำอธิบาย: ตอ หลอดแอลอดี เี ขากับตำแหนงขาที่ 3 ของบอรด Arduino โดยจากภาพหากกำหนดใหมี สถานะ “HIGH” ออกจากขา 3 เพื่อทำใหหลอดแอลอีดีมีสถานะ “ติด” แตหากกำหนดใหมีสถานะ “LOW” ออกจากตำแหนงขา 3 ดงั กลาวสงผลใหห ลอดแอลอีดมี สี ถานะ “ดับ” 2. สวนโปรแกรม #include <ledblink.h> int pin = 3; void setup() { pinMode(pin,OUTPUT); LEDBlink(pin, 1000); }
403 void loop() {} คำอธิบาย: สวนบนสุดของโปรแกรมมีการประกาศใชงานไลบรารี “myArduino_Library” ผานชื่อ ไฟลสวนหัว คือ “ledblink.h” และกำหนดตัวแปรภายนอกฟงกชัน pin สำหรับอางอิงตำแหนงขาที่ เช่อื มตอกับหลอดแอลอดี :ี โดยจากตัวอยางคอื เช่ือมตอแอลอีดีกบั ตำแหนง ขา 3 ของบอรด Arduino ฟงกชนั Setup():กำหนดใหต ำแหนง ขาท่ี 3 ของบอรด Arduino ทำหนาท่เี ปน เอาตพตุ และ เรียกใชงานฟงกชัน LEDBlink() เพื่อแสดงสถานะของการ “ติด” และ “ดับ” ของหลอดแอลอีดีเพียง 1 คร้ังโดยกำหนดชว งการหนวงเวลาเปน 1 วินาที ฟงกช นั loop(): - หมายเหตุ: 1) หากเรียกใชฟงกชัน LEDBlink() ภายในฟงกชัน loop( จะไมสามารถสังเกตเห็นการ กระพริบเพียง 1 ครั้งจากหลอดแอลอีดี แตจะเกิดการกระพริบแบบไมมีที่สิ้นสุด เนื่องจากฟงกชัน loop() จะวนรอบการทำงานไมมีที่สน้ิ สดุ 2) หากตองการเปลี่ยนเปนการควบคุมใหหลอดแอลอีดีเกิดการกระพริบ 2 ครั้งสามารถ ทำไดโดยการเปลี่ยนฟงกช นั LEDBlink() เปน ฟง กชนั LEDBlink2Times() 4. การสรา งไลบรารีสำหรบั แอลอดี แี บบ 7 สวน หัวขอนี้จะกลาวถึงตัวอยางการสรางไลบรารีสำหรับควบคุมการทำงานแอลอีดีแบบ 7 สวน โดยภายในไลบรารปี ระกอบดวย 2 ไฟล คือไฟลสว นหวั “seg7.h” และไฟลหลัก “seg7.cpp” #ifndef seg7_h #define seg7_h #include \"Arduino.h\" void AssignpinMode(int pin_a, int pin_b, int pin_c, int pin_d, int pin_e, int pin_f, int pin_g); void showOutput(int pin_a, int pin_b, int pin_c, int pin_d, int pin_e, int pin_f, int pin_g, boolean a, boolean b, boolean c, boolean d, boolean e, boolean f, boolean g); #endif รปู ที่ 16.7 ตัวอยางการสรา งไฟลสว นหวั ช่ือ “seg7.h” ทีม่ า: ผเู ขียน
404 รูปที่ 16.7 แสดงตวั อยางการสรางไฟลสวนหวั ชื่อ “seg7.h” ซ่ึงมกี ารประกาศฟงกชันสำหรับ ใชงาน 2 ฟง กชันคือ ดงั น้ี 1. ฟงกชัน AssignpinMode( คือฟงกชันสำหรับกำหนดโหมดการทำงานตำแหนงขาทั้ง 7 ขาของบอรด Arduino เปนสถานะของเอาตพุตทั้งหมดโดยพารามิเตอรทั้ง 7 คาจะถูกเชื่อมตอกับ ตำแหนงขาของแอลอีดี 7 สวนเปนดงั ตารางท่ี 16.3 ตารางท่ี 16.3 ความสัมพันธระหวางคา พารามิเตอรสำหรบั ฟงกช ัน AssignpinMode( และตำแหนง ขาท่ีเช่อื มตอ กับแอลอีดี 7 สว น พารามเิ ตอร ตำแหนงขาแอลอีดี 7 สวน pin_a a pin_b b pin_c c pin_d d pin_e e pin_f f pin_g g 2. ฟงกชัน showOutput( คือฟงกชันสำหรับกำหนดสถานะของการทำงานตำแหนงขาทั้ง 7 ขาของบอรด Arduino ที่เชื่อมกับแอลอีดี 7 สวน โดยพารามิเตอรที่ 8 – 14 แทนสถานะของ พารามิเตอรที่ 1 – 7 ตามลำดับโดยกรณีที่พารามิเตอรสำหรับแสดงสถานะมีคาเปน ‘1’ ความหมาย คือแทนสถานะ “HIGH” แตหากพารามิเตอรสำหรับการแสดงสถานะมีคาเปน ‘0’ ความหมายคือ แทนสถานะ “LOW” ตัวอยา งการสรา งไฟลห ลกั ชื่อ “seg7.cpp” #include \"Arduino.h\" #include \"seg7.h\" void AssignpinMode(int pin_a, int pin_b, int pin_c, int pin_d, int pin_e, int pin_f, int pin_g){ pinMode(pin_a, OUTPUT); pinMode(pin_b, OUTPUT);
405 pinMode(pin_c, OUTPUT); pinMode(pin_d, OUTPUT); pinMode(pin_e, OUTPUT); pinMode(pin_f, OUTPUT); pinMode(pin_g, OUTPUT); } void showOutput(int pin_a, int pin_b, int pin_c, int pin_d, int pin_e, int pin_f, int pin_g, boolean a, boolean b, boolean c, boolean d, boolean e, boolean f, boolean g){ if(a == 1){ digitalWrite(pin_a, HIGH); } else{ digitalWrite(pin_a, LOW); } if(b == 1){ digitalWrite(pin_b, HIGH); } else{ digitalWrite(pin_b, LOW); } if(c == 1){ digitalWrite(pin_c, HIGH); } else{ digitalWrite(pin_c, LOW); } if(d == 1){ digitalWrite(pin_d, HIGH); } else{ digitalWrite(pin_d, LOW); } if(e == 1){ digitalWrite(pin_e, HIGH); }
406 else{ digitalWrite(pin_e, LOW); } if(f == 1){ digitalWrite(pin_f, HIGH); } else{ digitalWrite(pin_f, LOW); } if(g == 1){ digitalWrite(pin_g, HIGH); } else{ digitalWrite(pin_g, LOW); } } โปรแกรมขางตนแสดงตัวอยางการสรางไฟลหลักชื่อ “seg7.cpp” ซึ่งมีการบรรจุคำสั่ง ทั้งหมดไวภายในฟงกชันที่ประกาศไวในไฟลสวนหัว โดยภายในฟงกชัน showOutput() จะมีการ ตรวจสอบคาของพารามิเตอร สำหรับแสดงสถานะ คือหากพารามิเตอรมีคาเปน ‘1’ จะแสดงสถานะ “HIGH” ที่ตำแหนงขาที่สัมพันธกันผานฟงกชัน digitalWrite() ในทางกลับกันหากพารามิเตอรมีคา เปน ‘0’ จะแสดงสถานะ “LOW” ท่ตี ำแหนงขาที่สัมพันธก ันผา นฟงกช นั digitalWrite() ตวั อยา งท่ี16.2 โปรแกรมควบคุมแอลอีดี 7 สวนแบบคอมมอนแคโทดเพื่อแสดงผลเปนตัวเลข 1 การทำงาน: หลอดแอลอดี ี 7 สว นจะแสดงผลออกเปนเลข 1 วิธที ำ 1. สวนวงจรทดลอง
407 รปู ท่ี 16.8 วงจรทดลองหลอดแอลอีดี 7 สวนแบบคอมมอนแคโทด แสดงผลเปนตวั เลข 1 ควบคุมผานไลบรารี “Seg7” ทม่ี า: ผูเขียน คำอธิบาย: ตอ หลอดแอลอีดี 7 สวนเขากับวงจรทดลองโดยตำแหนง a, b, c,…,g ของหลอดแอลอีดี 7 สว นถูกตอเขา กบั ขาที่ 0 – 6 ตามลำดับ 2. สว นโปรแกรม #include <seg7.h> int pin_a = 0; int pin_b = 1; int pin_c = 2; int pin_d = 3; int pin_e = 4; int pin_f = 5; int pin_g = 6; void setup() { AssignpinMode(pin_a, pin_b, pin_c, pin_d, pin_e, pin_f, pin_g); showOutput(pin_a, pin_b, pin_c, pin_d, pin_e, pin_f, pin_g, 0, 1, 1, 0 ,0, 0, 0); } void loop() { }
408 คำอธิบาย: สวนบนสุดของโปรแกรมมีการประกาศใชงานไลบรารี “Seg7” ผานชื่อไฟลสวนหัว คือ “seg7.h” และกำหนดตัวแปรภายนอกฟงกชัน 7 ตัวแปรคือ pin_a, pin_b, pin_c, pin_d, pin_e, pin_f และ pin_g สำหรับอางอิงตำแหนงขาที่เชื่อมตอกับแอลอีดีแบบ 7 สวนโดยจากตัวอยางคือ เชื่อมตอ ผา นตำแหนงขา 0 – 6 ตามลำดับ ฟงกชัน Setup(): เรียกใชงานฟงกชัน AssignpinMode() เพื่อกำหนดโหมดการทำงาน ตำแหนง ขาของบอรด Arduino ที่เชื่อมตอกับแอลอดี ี 7 สวนเปนโหมดสงออกสัญญาณทั้งหมด และ เรียกใชฟ ง กชัน showOutput() เพือ่ ควบคุมการแสดงผลผา นแอลอดี ี 7 สวน ฟง กชนั loop(): - 5. บทสรุป การสรางไลบรารีเพื่อใชงานมีขอดีคือชวยประหยัดเวลาในการพัฒนาโปรแกรมทั้งสำหรับ ผูพัฒนา และผูใชงานที่นำไลบรารีไปใชงาน โดยการสรางไลบรารีจำเปนตองมีไฟลหลักอยางนอย 2 ไฟล คือไฟลส ว นหัว (Header File) และไฟลห ลกั ไฟลส ว นหัวคือ ไฟลท ม่ี ีนามสกุล .h คอื ไฟลท ่ใี ชเก็บ ขอมูลตัวแปร และฟงกชันทั้งหมดที่มีอยูในไฟลหลัก โดยจะเปนเพียงการประกาศชื่อตัวแปร และช่ือ ฟงกชันเพียงเทานั้น โดยคาตัวแปร หรือการทำงานภายในฟงกชันจะถูกสรางไวภายในไฟลหลัก ทั้งหมด สวนอีกไฟลที่สำคัญคือ ไฟลหลักซึ่งถูกสรางเพื่อใชสำหรับเก็บคาตัวแปร และคำสั่งทั้งหมด ของตวั แปร และฟง กชนั ท้ังหมดทถี่ ูกประกาศภายในไฟลส วนหวั โดยจะมนี ามสกลุ เปน “.cpp”
409 แบบฝกหัดทายบท บทท่ี 16 1. การสรา งไลบรารเี พอ่ื ใชงานเองมีประโยชนอ ยา งไร 2. การสรางไลบรารจี ำเปน ตอ งสรางไฟลทีส่ ำคญั ทงั้ หมดก่ีไฟลอะไรบา ง 3. ไฟลส ว นหัวคอื อะไร 4. จากไฟลหลักทก่ี ำหนดให จงสรา งไฟลส ว นหวั #include \"Arduino.h\" #include \"tt.h\" void test(){ // ชุดคำสั่ง } 5. ไฟลท้ังหมดของไลบรารีที่ถูกสรางข้นึ ใหมจ ะตองถูกนำไปเกบ็ ไวต ำแหนง ใดในโปรแกรม Arduino IDE
410 เอกสารอา งอิง กอบเกียรติ สระอุบล. (2561). พัฒนา IoT บนแฟรตฟอรม Arduino และ Raspberry Pi. กรุงเทพฯ: หสม สำนกั พิมพ อนิ เตอรม ีเดีย. เดชฤทธิ์ มณีธรรม. (2559). คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino. กรุงเทพฯ: ซีเอ็ด ยูเคช่นั . สนธยา นงนุช. (2560). การใชงาน ESP32 เบื้องตน. ชลบุรี: รานไอโอเอ็กซฮอ บ.
บรรณานุกรม กอบเกียรติ สระอุบล. (2561). พัฒนา IoT บนแฟรตฟอรม Arduino และ Raspberry Pi. กรงุ เทพฯ: หสม สำนกั พมิ พ อินเตอรมเี ดยี . ดอนสัน ปงผาบ และ ทิพวัลย คำน้ำนอง. (2557). ไมโครคอนโทรลเลอร PIC และการประยุกตใช งาน. กรงุ เทพฯ: สำนกั พมิ พ ส.ส.ท. ดอนสัน ปงผาบ. (2560). ภาษาซแี ละ Arduino อานงาย เขาใจงา ย. กรงุ เทพฯ: ซีเอด็ ยเู คชั่น. เดชฤทธิ์ มณีธรรม. (2559). คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino. กรุงเทพฯ: ซีเอ็ด ยูเคชั่น. เดชฤทธิ์ มณีธรรม. (2559). คัมภีรการใชงาน ไมโครคอนโทรลเลอร MCS51. กรุงเทพฯ: ซีเอ็ด ยูเคช่ัน. ทีมงานสมารทเลิรนนิ่ง. (2553). เรียนรูไมโครคอนโทรลเลอร PIC ดวยภาษา Basic. กรุงเทพฯ: สมารท เลริ นนง่ิ . ทีมงานสมารทเลิรนนิ่ง. (2554). Advanced PIC Microcontroller in C : การประยุกตใชงาน PIC ขัน้ สงู ดวยภาษา C. กรุงเทพฯ: สมารทเลิรนนิ่ง. ทีมงานสมารทเลิรนนิ่ง. (2555). เรียนรูไมโครคอนโทรลเลอร MCS-51 ดวยภาษา C. กรุงเทพฯ: สมารทเลิรน นง่ิ . ธวัชชยั เลื่อนฉวี และ อนรุ ักษ เถื่อนฉวี. (2527). ดจิ ิตอลเทคนิคเลม 1. กรุงเทพฯ: มติ รนราการพมิ พ. นพ มหิษานนท. (2557 . ออกแบบและทดสอบวงจรดวย Proteus. กรุงเทพฯ: คอรฟ งชั่น. ประจิน พลังสันติกุล. (2549). การเขียนโปรแกรมควบคุมไมโครคอนโทรลเลอร AVR ดวยภาษาซี กบั WinAVR (C Compiler) กรุงเทพฯ: บรษิ ทั แอพซอฟตเทค จำกัด. ประจิน พลังสันติกุล. (2553). เรียนรูการเขียนโปรแกรมภาษา C ควบคุม PIC MCU จากตัวอยาง และโคดภาษา C ดวย CSS C คอมไพเลอร. กรงุ เทพฯ: บรษิ ทั แอพซอฟตเทค จำกัด. ประภาส พุมพวง. (2561). การเขียนและการประยุกตใชงานโปรแกรม Arduino. กรุงเทพฯ: ซีเอ็ด ยูเคชัน่ . มงคล ลี้ประกอบบุญ. (2549). ไมโครคอนโทรลเลอร 8051 และการประยุกตใช. ขอนแกน: หนวย สารบรรณ งานบริหารและธุรการ คณะวิศวกรรมศาสตร มหาวิทยาลยั ขอนแกน.
412 วิลาศิณี วิสิทธ์ิกาศ วรพจน กรแกววัฒนกลุ และ ชัยวัฒน ลม้ิ พรจติ รวไิ ล. (2551). ทดลองและใชงาน ไมโครคอนโทรลเลอร ATmega128 ดวยโปรแกรมภาษา C กับซอฟตแวร Wiring. กรงุ เทพฯ : อนิ โนเวตีฟ เอ็กพอรเิ มนต. สนธยา นงนุช. (2560). การใชง าน ESP32 เบ้ืองตน . ชลบุรี: รานไอโอเอก็ ซฮ อ บ. อภชิ าติ ภพู ลบั . (2552). เขยี นโปรแกรมควบคุม Microcontroller ดว ยภาษา C, Assembly และ VB. กรุงเทพฯ: บริษทั ไอดซี ี อินโฟ ดิสทรบิ ิวเตอร เซน็ เตอร จำกัด. อลงกรณ พรมที. (2551). อุปกรณที่ยึดอยูบนผิวและการใชงานไมโครคอนโทรลเลอร. อุดรธานี: มหาวทิ ยาลัยราชภัฏอดุ รธาน.ี เอกชัย มะการ. (2552). เรียนรู เขาใจ ใชงาน ไมโครคอนโทรลเลอรตระกูล AVR ดวย Arduino. กรงุ เทพฯ: บริษทั อีทที ี จำกัด. Adith, J. B. (2015). Arduino by Example. Birmingham: Packt Publishing Ltd. Barrett, S.F. (2013). Arduino Microcontroller Processing for Everyone!. United States: Morgan & Claypool Publishers. Bell, C. (2016). MySQL for the Internet of Things. United States: Apress. Borowik, B. (2011). Interfacing PIC Microcontrollers to Peripherial Devices. United States: Springer Dordrecht. Davis II, R.J. (2013). Arduino LCD Projects. United States: CreateSpace Independent Publishing Platform. Don, W. (2015). Arduino Electronics Blueprints. Birmingham: Packt Publishing Ltd. Jeremy, B. (2013). Exploring Arduino: Tools and Techniques for Engineering Wizardry. Indianapolis: John Wiley & Sons, Inc. Jestop, C., Marimuthu, B. and Chithra, K. (2017). Ultrasonic water level indicator and controller using AVR microcontroller. Proceedings of the International Conference on Information Communication and Embedded Systems, Febuary 23-24 2017. (pp. 1 – 6). China: IEEE. John, D. W., Josh, A. and Harald, M. (2011). Arduino Robotics. New York: Apress Open. Margolis, M. (2011). Arduino Cookbook. United States: O’Reilly Media, Inc. Nandanwar, V.G., Kashif, M.M. and Ankushe, R.S. (2017). Portable Weight Measuring Instrument. Proceedings of the International Conference on Recent Trends in Electrical, Electronics and Computing Technologies, July 30-31 2017. (pp. 44 – 48). India: IEEE.
413 Omar, J., Shahnawaz, K. and Zainulabideen. (2012). PC BASED WIRELESS STEPPERMOTOR CONTROL. Degree of Bachelor of Science in Electrical Engineering, Department of Electrical Engineering, Blekinge Institute of Technology, Karlskrona, Sweden. Tero, K. and Kimmo, K. (2011). Make: Arduino Bots and Gadgets. Canada: O’Reilly Media, Inc. Tero, K., Kimmo, K. and Ville, V. (2014). Make: Sensors. Canada: Maker Media. Inc. Wilmshutst, T. (2007). Designing Embeded Systems with PIC Microcontrollers Principles and Application. United Kingdom: Newnes.
ภาคผนวก
ภาคผนวก ก ใบงาน
ใบงานท่ี 1 เร่อื ง การควบคมุ หลอดแอลอีดี วิชา ไมโครคอนโทรลเลอรและการประยุกตใ ชงาน ชือ่ – สกลุ …………………………………………… รหัสนักศึกษา……………………………………………….. ชอ่ื – สกุล ………………………………………….. ช่อื – สกลุ ………………………………………….. รหสั นักศกึ ษา……………………………………………….. รหัสนักศกึ ษา……………………………………………….. วตั ถุประสงค เพอ่ื ใหผูเรยี นมีความรแู ละทักษะดังนี้ 1. เพือ่ เรยี นรตู ำแหนง ขาบนบอรด Arduino Uno R3 ทีส่ ามารถเช่ือมตอกับหลอดแอลอีได 2. เพ่ือเรยี นรูการเขยี นโปรแกรมโดยใช Arduino IDE เพื่อควบคมุ หลอดแอลอดี ี 3. เพอ่ื ใชโปรแกรม Proteus ในการจำลองพฤติกรรมการทำงานของวงจรทดลอง ทฤษฎี แอลอีดี (Light Emitting Diode: LED คือไดโอดเปลงแสงซึ่งปจจุบันมีใหเลือกใชงาน หลากหลายสีโดยใชไ ฟเล้ยี งประมาณ 5 โวลตโ ดยจะตอ งตอ ไฟเลยี้ ง ทข่ี ้วั แอโนด และท่ีขัว้ แคโทดจะถูก ตอลงกราวด การตอแอลอีดีกับบอรด Arduino Uno R3 จะตองตอเขากับตำแหนงขาที่รับสัญญาณแบบ ดิจิทัลที่อยูบนบอรด ซึ่งโดยทั่วไปจะนิยมตอใชงานอยูระหวางตำแหนงที่ 0 – 7 อยางไรก็ตาม เนื่องจากแอลอีดีเปนอุปกรณประเภทรอรับสัญญาณจากบอรด ดังนั้นจึงตองกำหนดสถานะเริ่มตน ของตำแหนงขาที่เช่ือมตอ กับหลอดแอลอดี เี ปน แบบเอาตพุตผา นฟงกชัน pinmode() และการควบคุม สถานะการทำงานของหลอดแอลอีดีสามารถทำไดโดยการเรยี กใชง านผานฟง กชัน digitalWrite() การสง สัญญาณจากบอรด Arduino เพ่อื ไปควบคุมหลอดแอลอีดสี ามารถทำได 2 วิธี ดังน้ีวิธี ที่ 1 คือการสงสถานะ “HIGH” เพื่อควบคุมใหหลอดแอลอดี มี ีสถานะ “ติด” โดยจะตองตอขั้วแอโนด เขากับขาของบอรดและตอขั้วแคโทดลงกราวด วิธีที่ 2 คือการสงสถานะ “LOW” เพื่อควบคุมให หลอดแอลอีดีมีสถานะ “ติด” โดยจะตองตอขั้วแคโทดเขากับขาของบอรดและตอขั้วแอโนดเขากับ แรงดัน 5 โวลต
420 รูปที่ 1 วงจรสำหรบั การทดลอง ท่มี า: ผูเขยี น ข้นั ตอนการทดลอง 1. ออกแบบวงจรเพื่อใชใ นการแสดงการติด – ดับ ของหลอดแอลอีดี ซึ่งในการทดลองน้ีจะกำหนดให สง ขอ มูลออกทางขา 0 – 7 โดยจะกำหนดใหห ลอดแอลอดี ีทีเ่ ชื่อมตอกบั ตำแหนงขาที่ 0 – 3 มีสถานะ “ติด” และ “ดับ” พรอมกัน ซึ่งจะมีสถานะที่ตรงกันขามกับหลอดแอลอีดีที่เชื่อมตอกับตำแหนงขาท่ี 4 – 7 ที่มสี ถานะมีสถานะ “ติด” และ “ดับ” พรอ มกันเชนกนั โดยชว งเวลาการติดของหลอดแอลอีดี ที่เชื่อมตอกับตำแหนงขาที่ 0 – 3 คือ 300 มิลลิวินาที และชวงเวลาการติดของหลอดแอลอีดีท่ี เช่ือมตอกับตำแหนง ขาที่ 4 – 7 คอื 500 มลิ ลวิ นิ าที 2. เขียนโปรแกรมเพอื่ ใหเ กดิ ผลลพั ธ ดงั ที่กลา วไวในขัน้ ตอนที่ 1 int led0 = 0; int led1 = 1; int led2 = 2; int led3 = 3; int led4 = 4; int led5 = 5; int led6 = 6; int led7 = 7; void setup() { pinMode(……, ……..); pinMode(……, ……..); ….. } void loop() { digitalWrite(led0, HIGH);
421 digitalWrite(led1, ……); digitalWrite(led2, ……); …… delay(……..); digitalWrite(led0, LOW); digitalWrite(led1, ……); digitalWrite(led2, ……); …… delay(……..); } 3. สงั เกตและอธิบายสวนของโปรแกรมที่เขยี นขน้ึ อยางละเอยี ด คำอธิบาย ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… 4. ปรบั แกวงจรโดยสลับข้วั แคโทดไปตอ กับขาของบอรดทดลองและตอขั้วแอโนดกบั แรงดัน 5 โวลต และทดสอบเขียนโปรแกรมใหผลทำงานเปน ไปในลักษณะเดิม 5. สรปุ ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… ………………………………………………………………………………………………………………………………………………
ใบงานที่ 2 เรอ่ื ง การรับขอมูลจากวงจรรับขอ มูล วชิ า ไมโครคอนโทรลเลอรแ ละการประยุกตใชง าน ชื่อ – สกุล …………………………………………… รหัสนักศกึ ษา……………………………………………….. ชือ่ – สกลุ ………………………………………….. ชอื่ – สกลุ ………………………………………….. รหสั นักศกึ ษา……………………………………………….. รหสั นกั ศกึ ษา……………………………………………….. วตั ถุประสงค เพ่อื ใหผเู รยี นมีความรแู ละทักษะดงั น้ี 1. เพ่ือเรยี นรูตำแหนง ขาบนบอรด Arduino Uno R3 ทสี่ ามารถเชือ่ มตอกับสวิตซได 2. เพือ่ เรยี นรูการเขียนโปรแกรมรับขอ มลู จากสวิตซส ูบอรด Arduino 3. เพ่ือใชโ ปรแกรม Proteus ในการจำลองพฤติกรรมการทำงานของวงจรทดลอง ทฤษฎี สวิตซคืออุปกรณที่นำหนาที่เปนตัวสงสัญญาณไปยังวงจร จึงเปนอุปกรณที่ทำหนาที่เปน อินพุตใหกับวงจรทดลอง โดยมีขาสำหรับการใชงานจริง 2 ขา โดยขาหนึ่งจะตองรับสถานะ “HIGH” อีกขาหนง่ึ รับสถานะ “LOW” โดยสญั ญาณที่สงไปยงั วงจรทดลองข้ึนอยูสถานะปจจุบันของสวิตซซ่ึงมี 2 สถานะคือ กด หรือ ปลอย การสรางวงจรสวิตซสามารถทำได 2 วิธีคือ วงจรสวิตซที่มีการทำงานที่สถานะ “HIGH” คือ วงจรที่จะสงสถานะ “LOW” ไปยังวงจรทดลองในกรณีที่ผูใชไมไดเริ่มกดสัมผัสที่ปุม และสงสถานะ “HIGH” ในกรณีที่มีการสัมผัสปุม และ วงจรสวิตซที่มีการทำงานที่สถานะ “LOW” คือวงจรที่จะสง สถานะ “HIGH” ไปยังวงจรทดลองในกรณีที่ผูใชไมไดเริ่มกดสัมผัสที่ปุม และสงสถานะ “LOW” ใน กรณีท่ีมกี ารสัมผัสปุม
424 รปู ที่ 1 วงจรสวิตซทม่ี ีการทำงานทีส่ ถานะ “HIGH” ที่มา: ผูเ ขียน รูปท่ี 2 วงจรสวติ ซท ม่ี ีการทำงานท่สี ถานะ “LOW” ที่มา: ผเู ขยี น การตอสวิตซกับบอรด Arduino Uno R3 จะตองตอเขากับตำแหนงขาที่รับสัญญาณแบบ ดิจิทัลที่อยูบนบอรด ซึ่งโดยทั่วไปจะนิยมตอใชงานอยูระหวางตำแหนงที่ 0 – 7 อยางไรก็ตาม เนื่องจากสวิตซเปนอุปกรณประเภทสงสัญญาณสูบอรด ดังนั้นจึงตองกำหนดสถานะเริ่มตนของ ตำแหนงขาที่เชื่อมตอกับสวิตซเปนแบบอินพุตผานฟงกชัน pinMode() และการรอรับสัญญาณจาก สวิตซสามารถทำไดโ ดยการเรยี กใชงานผานฟงกช ัน digitalRead() เบาซ (Bounce) ของสัญญาณคือปญหาที่เกิดจากการสัมผัสสวิตซในระยะเวลาที่นาน จนกระทั่งโปรแกรมวนกลับมารับคำสั่งเดิมอีกครั้งจึงเปนสาเหตุใหโปรแกรมตรวจจับการสมั ผัสสวิตซ มากกวา 1 ครั้งทั้งที่ในความเปนจริงผูใชงานประสงคทีจ่ ะสัมผัสเพียงคร้ังเดียว ซึ่งจากปญหาดังกลา ว สามารถแกไดโดยการดีเบาซ (Debounce ซึ่งมีหลายวิธี เชน การใชการหนวงเวลา หรือการรอการ หยดุ สัมผัสสวิตซ
425 รปู ที่ 3 วงจรสำหรบั การทดลอง ที่มา: ผูเ ขียน ขน้ั ตอนการทดลอง 1. ออกแบบวงจรเพื่อใช วงจรสวติ ซท่มี กี ารทำงานทส่ี ถานะ “LOW” ในการควบคมุ การติด – ดับ ของ หลอดแอลอีดี ซึ่งในการทดลองนี้จะกำหนดใหหากกดสวิตซ sw1 หลอดแอลอีดี led1 จะแสดง สถานะการติด – ดับ โดยหากกดสวิตซดังกลาวอีกครั้งหลอดแอลอีดีหลอดดังกลาวจะดับ โดยสวิตซ sw2 จะใชส ำหรับควบคมุ หลอดแอลอีดี led2 ใหมกี ารทำงานเชนเดียวกันกบั คูของ sw1 และ led1 2. เขยี นโปรแกรมเพอื่ ใหเกิดผลลพั ธ ดงั ท่ีกลาวไวใ นขั้นตอนท่ี 1 3. สงั เกตและอธบิ ายสวนของโปรแกรมท่ีเขยี นข้ึนอยางละเอยี ด คำอธิบาย ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… 4. ปรับแกว งจรโดยเปลีย่ นวงจรสวิตใหมเ ปน วงจรสวิตซทมี่ ีการทำงานทส่ี ถานะ “HIGH” และ ทดสอบเขียนโปรแกรมใหผลทำงานเปนไปในลักษณะเดิม
426 5. สรุป ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… ………………………………………………………………………………………………………………………………………………
ใบงานท่ี 3 เรือ่ ง การควบคุมแอลอีดี 7 สวน วชิ า ไมโครคอนโทรลเลอรและการประยุกตใ ชง าน ชอื่ – สกลุ …………………………………………… รหัสนักศึกษา……………………………………………….. ชื่อ – สกลุ ………………………………………….. ชือ่ – สกุล ………………………………………….. รหสั นักศกึ ษา……………………………………………….. รหสั นักศึกษา……………………………………………….. วัตถุประสงค เพื่อใหผ เู รียนมคี วามรูและทักษะดังน้ี 1. เพอื่ เรียนรูตำแหนงขาบนบอรด Arduino Uno R3 ทส่ี ามารถเชือ่ มตอกบั หลอดแอลอี 7 สว นได 2. เพอื่ เรียนรูการเขียนโปรแกรมโดยใช Arduino IDE เพื่อควบคุมหลอดแอลอดี ี 7 สว น 3. เพ่ือใชโ ปรแกรม Proteus ในการจำลองพฤติกรรมการทำงานของวงจรทดลอง ทฤษฎี แอลอีดี 7 สวนคอื การนำหลอดแสดงผลมาจัดวางเรียงกันใหม ลี ักษณะทส่ี ามารถแสดงผลได อยางหลากหลาย เชนสามารถนำแอลอีดี 7 สวนมาแสดงตัวเลข 0 – 9 และตัวอักษรภาษาอังกฤษใน บางตัวอยางไรก็ตาม ผูใชง านจำเปน ตองเลือกตอ ขาของแอลอดี ี 7 สวนใหถ ูกตอง แอลอีดี 7 สวน แบง ออกเปน 2 ประเภทคอื แบบคอมมอนแอโนด และแบบคอมมอนแคโทด โดยหากใชงานแบบคอมมอนแอโนดตองตอขาคอมมอนเขากับแรงดัน 5 โวลตและหากตองการให หลอดแอลอีดีสวนใดมีสถานะ “ติด” ใหสงสถานะ “HIGH” ไปยังสวนดังกลาว แตหากตอแบบ คอมมอนแคโทดตองตอขาคอมมอนเขากับ กราวด และหากตองการใหหลอดแอลอีดสี วนใดมสี ถานะ “ติด” ใหสงสถานะ “LOW” ไปยังสวนดงั กลาว
428 รปู ท่ี 1 รปู แบบของแอลอดี ี 7 สว น ท่ีมา: ผูเ ขียน สำหรับกรณีที่ตองการใชงานแอลอีดี 7 สวนมากกวา 1 ตัวสามารถทำไดโดยใชงานแอลอีดี 7 สวนแบบมัลติเพล็กต ซึ่งขอดี คือ จะชวยประหยัดจำนวนพอรตโดยจะใชเพียง 8 บิตและใชขาใน การเลือกตำแหนงการแสดงผล ตามจำนวนของแอลอีดี 7 สวนที่เลือกใชงาน เชนเลือกใชงานแอลอีดี 7 สวนแบบมลั ติเพลก็ ตจ ำนวน 2 ตัวกจ็ ะใชขาของพอรต เพ่ิมอีก 2 บิตรวมเปนทงั้ หมด 10 บิต เปนตน รูปที่ 2 แอลอีดี 7 สวนแบบมัลติเพล็กต ที่มา: ผูเขียน
429 รูปที่ 3 วงจรสำหรบั การทดลอง ทม่ี า: ผเู ขยี น ขั้นตอนการทดลอง 1. ออกแบบวงจรเพื่อใชในการแสดงการติด – ดับ ของหลอดแอลอีดี 7 สวนแบบคอมมอนแคโทดใน ทกุ ๆ 1 วินาทีดงั น้ี วนิ าทที ี่ 1: สว น a มีสถานะ “ติด” เพียงสว นเดียว วนิ าทีท่ี 2: สว น b มีสถานะ “ตดิ ” เพยี งสว นเดยี ว วินาทที ี่ 3: สวน c มสี ถานะ “ติด” เพียงสว นเดยี ว วินาทีที่ 4: สว น d มีสถานะ “ติด” เพยี งสว นเดียว วินาทีท่ี 5: สว น e มีสถานะ “ติด” เพยี งสวนเดยี ว วนิ าทที ่ี 6: สวน f มสี ถานะ “ตดิ ” เพยี งสวนเดียว กลบั ไปวนซ้ำ โดยเรม่ิ ในวินาทีที่ 1 ใหม 2. เขยี นโปรแกรมเพอื่ ใหเกดิ ผลลัพธ ดังทก่ี ลา วไวในขนั้ ตอนท่ี 1 3. สังเกตและอธบิ ายสวนของโปรแกรมท่เี ขียนข้นึ อยางละเอยี ด คำอธิบาย ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… ………………………………………………………………………………………………………………………………………………
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: