หน่วยที่ 9 ไมโครคอนโทรลเลอร์ arduino · (ก)...

73
เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 335 หน่วยที9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรียงโดยครูบุญเกิด สนธิพันธ์ หน่วยที9 ไมโครคอนโทรลเลอร์ Arduino สาระสาคัญ ไมโครคอนโทรลเลอร์ Arduino (ออกเสียงเป็นภาษาอิตาลีว่า อา-ดู-อิ-โน หรือ อาดุยโน) ทีพัฒนาขึ้นในแบบโอเพนซอร์ส (Open Source) คือ เปิดเผยข้อมูลทั้งทางด้านฮาร์ดแวร์และด้านซอฟต์แวร์ ที่นักพัฒนาด้านไมโครคอนโทรลเลอร์สามารถนาไปพัฒนาต่อยอดได้ในด้านธุรกิจและการศึกษาโดยไม่เสีย ค่าลิขสิทธิแผงวงจรหรือบอร์ด Arduino ใช้ชิปไมโครคอนโทรลเลอร์ตระกูล AVR ของบริษัท Atmel ทีออกแบบมาให้ใช้งานได้ง่าย และซอฟต์แวร์ Arduino IDE ที่ใช้ภาษาซี (C/C++) สาหรับการพัฒนา โปรแกรม รวมถึงได้พัฒนาโปรแกรมควบคุมการทางานพื้นฐาน ที่เรียกว่า “บูทโหลดเดอร์” (Boot loader Firmware) ที่ทาหน้าที่ควบคุมการทางานของรีจิสเตอร์ภายใน และเป็นเครื่องโปรแกรม (Programmer) ทาให้การพัฒนาโปรแกรมควบคุมไมโครคอนโทรลเลอร์ทาได้ง่ายและสะดวกขึ้น จึงได้รับความนิยมในการ นามาพัฒนาและประยุกต์ใช้งานอย่างมากในปัจจุบัน แผงวงจรของไมโครคอนโทรลเลอร์ Arduino มีหลายรุ่น แต่ละรุ่นมีคุณสมบัติ, จานวนขาพอร์ต (I/O Port หรือเรียกว่า Pin) และหน่วยความจาแตกต่างกันตามความต้องการของผู้ใช้งาน ในหน่วยนี้จะ ศึกษาและปฏิบัติเกี่ยวกับการใช้งานไมโครคอนโทรลเลอร์ Arduino รุ่น UNO, การใช้ซอฟต์แวร์ Arduino IDE ภาษาซีสาหรับไมโครคอนโทรลเลอร์ Arduino และการเชื่อมต่อกับอุปกรณ์อินพุต เอาต์พุตพื้นฐาน และการเขียนโปรแกรมควบคุมเบื้องต้น โดยใช้บอร์ด i-Duino UNO ที่มีคุณสมบัติเหมือนกันกับบอร์ด Arduino UNO ต้นแบบ สาระการเรียนรู9.1 คุณสมบัติของไมโครคอนโทรลเลอร์ Arduino 9.2 ซอฟต์แวร์ Arduino IDE 9.3 ภาษาซีสาหรับไมโครคอนโทรลเลอร์ Arduino 9.4 การใช้งานไมโครคอนโทรลเลอร์ Arduino กับอุปกรณ์เอาต์พุตพื้นฐาน 9.5 การใช้งานไมโครคอนโทรลเลอร์ Arduino กับอุปกรณ์อินพุตพื้นฐาน

Upload: others

Post on 27-Dec-2019

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 335

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino

สาระส าคัญ

ไมโครคอนโทรลเลอร์ Arduino (ออกเสียงเป็นภาษาอิตาลีว่า อา-ดู-อิ-โน หรือ อาดุยโน) ที่พัฒนาขึ้นในแบบโอเพนซอร์ส (Open Source) คือ เปิดเผยข้อมูลทั้งทางด้านฮาร์ดแวร์และด้านซอฟต์แวร์ ที่นักพัฒนาด้านไมโครคอนโทรลเลอร์สามารถน าไปพัฒนาต่อยอดได้ในด้านธุรกิจและการศึกษาโดยไมเ่สียค่าลิขสิทธิ์ แผงวงจรหรือบอร์ด Arduino ใช้ชิปไมโครคอนโทรลเลอร์ตระกูล AVR ของบริษัท Atmel ที่ออกแบบมาให้ใช้งานได้ง่าย และซอฟต์แวร์ Arduino IDE ที่ใช้ภาษาซี (C/C++) ส าหรับการพัฒนาโปรแกรม รวมถึงได้พัฒนาโปรแกรมควบคุมการท างานพ้ืนฐาน ที่เรียกว่า “บูทโหลดเดอร์” (Boot loader Firmware) ที่ท าหน้าที่ควบคุมการท างานของรีจิสเตอร์ภายใน และเป็นเครื่องโปรแกรม (Programmer) ท าให้การพัฒนาโปรแกรมควบคุมไมโครคอนโทรลเลอร์ท าได้ง่ายและสะดวกข้ึน จึงได้รับความนิยมในการน ามาพัฒนาและประยุกต์ใช้งานอย่างมากในปัจจุบัน แผงวงจรของไมโครคอนโทรลเลอร์ Arduino มีหลายรุ่น แต่ละรุ่นมีคุณสมบัติ, จ านวนขาพอร์ต (I/O Port หรือเรียกว่า Pin) และหน่วยความจ าแตกต่างกันตามความต้องการของผู้ใช้งาน ในหน่วยนี้จะศึกษาและปฏิบัติเกี่ยวกับการใช้งานไมโครคอนโทรลเลอร์ Arduino รุ่น UNO, การใช้ซอฟต์แวร์ Arduino IDE ภาษาซีส าหรับไมโครคอนโทรลเลอร์ Arduino และการเชื่อมต่อกับอุปกรณ์อินพุต เอาต์พุตพ้ืนฐาน และการเขียนโปรแกรมควบคุมเบื้องต้น โดยใช้บอร์ด i-Duino UNO ที่มีคุณสมบัติเหมือนกันกับบอร์ด Arduino UNO ต้นแบบ

สาระการเรียนรู้

9.1 คุณสมบัติของไมโครคอนโทรลเลอร์ Arduino 9.2 ซอฟต์แวร์ Arduino IDE 9.3 ภาษาซีส าหรับไมโครคอนโทรลเลอร์ Arduino 9.4 การใช้งานไมโครคอนโทรลเลอร์ Arduino กับอุปกรณ์เอาต์พุตพ้ืนฐาน 9.5 การใช้งานไมโครคอนโทรลเลอร์ Arduino กับอุปกรณ์อินพุตพ้ืนฐาน

Page 2: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 336

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

จุดประสงค์การเรียนรู้

จุดประสงค์ทั่วไป

1. เพ่ือให้นักเรียนมีความรู้และเข้าใจเกี่ยวกับไมโครคอนโทรลเลอร ์Arduino 2. เพ่ือให้นักเรียนมีความรู้และเข้าใจการใช้ซอฟต์แวร์ Arduino IDE ส าหรับเขียนโปรแกรมควบคุม

ไมโครคอนโทรลเลอร ์Arduino ด้วยภาษาซ ี3. เพ่ือให้นักเรียนมีทักษะการใช้งานไมโครคอนโทรลเลอร์ Arduino กับอุปกรณ์เอาต์พุต อินพุต

พ้ืนฐาน

จุดประสงค์เชิงพฤติกรรม นักเรียนสามารถ

1. บอกคุณสมบัติที่ส าคัญของไมโครคอนโทรลเลอร์ Arduino ได้ 2. บอกชื่อรุ่นของบอร์ดไมโครคอนโทรลเลอร์ Arduino ได ้3. อธิบายคุณสมบัติที่ส าคัญของบอร์ดไมโครคอนโทรลเลอร์ Arduino UNO ได้ 4. อธิบายคุณลักษณะทั่วไปของซอฟแวร์ Arduino IDE ได้ 5. อธิบายขั้นตอนการติดตั้งซอฟต์แวร์ Arduino IDE ได้ 6. อธิบายขั้นตอนการติดตั้งไดร์เวอร์บอร์ด Arduino UNO ได้ 7. บอกวิธีการก าหนดค่าการเชื่อมต่อบอร์ด Arduino UNO กับเครื่องคอมพิวเตอร์ได้ 8. บอกความหมายแถบเมนูของซอฟต์แวร์ Arduino IDE ได ้9. บอกความหมายแถบเครื่องมือซอฟต์แวร์ Arduino IDE ได้ 10. อธิบายโครงสร้างภาษาซีส าหรับไมโครคอนโทรลเลอร์ Arduino ได้ 11. อธิบายการใช้ฟังก์ชันส าเร็จรูปของไมโครคอนโทรลเลอร์ Arduino ได้ 12. อธิบายการใช้ไฟล์ไลบรารีส าเร็จรูปของไมโครคอนโทรลเลอร์ Arduino ได้

13. ต่อวงจรพอร์ตของบอร์ด Arduino UNO กับวงจรแสดงผลแบบ LED ตามแบบวงจรได้ 14. ต่อวงจรพอร์ตของบอร์ด Arduino UNO กับวงจรสวิตช์ตามแบบวงจรได้ 15. เขียนโปรแกรมควบคุมการแสดงผลของ LED ตามเงื่อนไขที่ก าหนดได้

Page 3: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 337

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

ผังความคิดเนื้อหาหน่วยที่ 9

Page 4: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 338

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

หน่วยที่ 9

ไมโครคอนโทรลเลอร์ Arduino

Arduino เป็นภาษาอิตาลี ออกเสียงว่า “อา-ดู-อิ-โน่” เป็นบอร์ดไมโครคอนโทรลเลอร์ส าเร็จรูป ที่ใช้ไมโครคอนโทรลเลอร์ตระกูล AVR ของบริษัท Atmel Corporation เป็นตัวประมวลผล พัฒนาต่อยอดมาจากโครงการ Wring ซึ่งเป็นโครงงานของนักศึกษาระดับปริญญาโท ที่มีแนวคิดจะพัฒนางานด้านอิเล็กทรอนิกส์ให้ใช้งานได้ง่ายและสะดวก นายมัสซิโม บันชี (Massimo Banzi) ชาวอิตาลีกับกลุ่มเพ่ือนชาวสเปนและอเมริกา น ามาพัฒนาต่อ แต่ยังมจีุดมุง่หมายเดิมที่อยู่ในรูปแบบโอเพนซอร์ส (Open Source) คือ เปิดเผยข้อมูลที่เกี่ยวข้องกับฮาร์ดแวร์และซอฟต์แวร์ทั้งหมด เพ่ือให้นักพัฒนาด้านไมโครคอนโทรลเลอร์น าไปพัฒนาต่อยอดได้ ด้วยแนวคิดท่ีว่า การน าไมโครคอนโทรลเลอร์มาใช้งานเป็นเรื่องยากเพราะต้องมีความรู้ทั้งด้านโครงสร้าง รีจิสเตอร์ภายในและการใช้งานซอฟต์แวร์รวมทั้งขั้นตอนการโปรแกรมชุดค าสั่งลงในตัวไอซีต้องใช้เครื่องโปรแกรม (Programmer) ซึ่งมีความยุ่งยาก จึงได้พัฒนาบอร์ด Arduino ส าเร็จรูป พร้อมซอฟต์แวร์ Arduino IDE ที่ใช้ในการเขียนโปรแกรมด้วยภาษาซี (C/C++) และพัฒนาโปรแกรมควบคุมการท างานพ้ืนฐาน ที่เรียกว่า “บูทโหลดเดอร์” (Bootloader Firmware) ส าหรับโปรแกรมลงในไมโครคอนโทรลเลอร์ AVR เพ่ือท าหน้าที่ติดต่อรีจิสเตอร์และเป็นเครื่องโปรแกรม ท าให้การประยุกต์ใช้งานไมโครคอนโทรลเลอร์ท าได้ง่าย จึงได้รับความนิยมเป็นอย่างมากในปัจจุบัน

รูปที่ 9.1 ทีมวิศวกรที่พัฒนาไมโครคอนโทรลเลอร์ Arduino (ท่ีมา : https://www.emaze.com/@AORZQWTCO/arduino)

Page 5: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 339

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

Atmega328

9.1 คุณสมบัติของไมโครคอนโทรลเลอร ์Arduino แผงวงจรหรือบอร์ด Arduino ที่ออกแบบและพัฒนามาใช้งานมีด้วยกันหลายรุ่นให้เลือกใช้ตาม

ความต้องการของผู้ใช้งาน เช่น Arduino UNO, Arduino LEONARDO, Arduino ESPLORA, Arduino MICRO, Arduino NANO, Arduino,MINI, Arduino MEGA, Arduino DUE เป็นต้น แต่ละรุ่นจะมีคุณสมบัติแตกต่างกัน นักเรียนสามารถศึกษารายละเอียดคุณสมบัติของบอร์ดแต่ละรุ่นได้จากเว็บไซต์ https://www.arduino.cc/en/Main/Products ส าหรับเนื้อหาการเรียนนี้น าเสนอบอร์ด Arduino รุ่นที่นิยมน ามาใช้งาน คือ Arduino UNO

บอร์ด Arduino UNO ใช้ไมโครคอนโทรลเลอร์ตระกูล AVR เบอร์ ATmega328 เป็นตัวประมวลผล ค าว่า UNO ในภาษาอิตาลีแปลว่า หนึ่ง ซ่ึงเป็นบอร์ด Arduino บอร์ดแรกที่ออกแบบและพัฒนามาใช้งาน และเป็นบอร์ดที่นิยมใช้งานมากท่ีสุด เนื่องจากมีขนาดกะทัดรัด เหมาะส าหรับการเริ่มต้นเรียนรู้ และมีแผงวงจรหรือบอร์ดต่อพ่วงส าเร็จรูปที่เรียกว่า ชิลด์ ( Shields or Arduino Shileds) ให้เลือกใช้งานหลายแบบ บอร์ด Arduino UNO ได้รับการพัฒนาต่อเนื่องมาปัจจุบันเป็นรุ่น Arduino UNO R3 รูปที่ 9.2 แสดงด้านหน้าและด้านหลังบอร์ด Arduino UNO รุ่นมาตรฐานที่ใช้ไอซีเบอร์ ATmega328 ตัวถังแบบ DIP 28 Pin และรูปที่ 9.3 แสดงด้านหน้าและด้านหลังบอร์ด Arduino UNO รุ่นที่มีการผลิตใช้งานอีกรุ่นจะใช้ไอซี ATmega328 ตัวถังแบบ QFP หรอืเรียกกันทั่วไปว่าแบบ SMD และรายละเอียดคุณลักษณะเฉพาะทางเทคนิค (Technic Specifications) ของบอร์ด Arduino UNO แสดงดังตารางที่ 9.1

(ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด Arduino UNO

รูปที่ 9.2 บอร์ด Arduino UNO รุ่นมาตรฐานที่ใช้ไอซีเบอร์ ATmega328 ตัวถังแบบ DIP (ท่ีมา : https://store.arduino.cc/usa/arduino-uno-rev3)

Page 6: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 340

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

(ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด Arduino UNO

รูปที่ 9.3 บอร์ด Arduino UNO รุ่นที่ใช้ไอซีเบอร์ ATmega328 ตัวถังแบบ QFP(SMD) (ท่ีมา : https://www.arduino.cc/en/Main/ArduinoBoardUnoSMD)

ตาราง 9.1 รายละเอียดคุณลักษณะเฉพาะของบอร์ด Arduino UNO คุณลักษณะเฉพาะทางเทคนิค (Technic Specifications)

ชิปไอซไีมโครคอนโทรลเลอร์ ATmega328 ใช้แรงดันไฟฟ้า 5 V รองรับการจ่ายแรงดันไฟฟ้า (ที่แนะน า) 7 – 12 V รองรับการจ่ายแรงดันไฟฟ้า (ที่จ ากัด) 6 – 20 V พอร์ต Digital I/O 14 พอร์ต (มี 6 พอร์ต PWM output)

พอร์ต Analog Input 6 พอร์ต การเช่ือมต่อกับคอมพิวเตอร ์ USB PORT กระแสไฟท่ีจ่ายได้ในแตล่ะพอรต์ 40 mA กระแสไฟท่ีจ่ายได้ในพอร์ต 3.3V 50 mA พื้นที่โปรแกรมภายใน - 32 KBพื้นที่โปรแกรม

- 500B ใช้โดย Boot Loader พื้นที่แรม 2 KB

พื้นที่หน่วยความจ าถาวร (EEPROM) 1 KB ความถี่ครสิตัล 16 MHz ขนาด 68.6 x 53.4 mm

น้ าหนัก 25 กรัม

Atmega328

Page 7: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 341

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

ในการศึกษาและปฏิบัติการทดลองเก่ียวกับไมโครคอนโทรลเลอร์ Arduino เลือกจะใช้บอร์ด i-Duino UNO ที่ผลิตโดยบริษัทอินโนเวตีฟ เอ็กเพอริเมนต์ จ ากัด (INEX) ที่มีคุณสมบัติเหมือนบอร์ด Arduino UNO ต้นแบบ ส่วนประกอบและขาพอร์ตแสดงดังรูปที่ 9.4 และรายละเอียดแสดงดังตาราง 9.2

รูปที่ 9.4 บอร์ด i-Duino UNO ที่ผลิตและพัฒนาโดยบริษัท INEX (ประเทศไทย) (ท่ีมา : www.inexglobal.com)

ตาราง 9.2 รายละเอียดคุณสมบัติของบอร์ด i-Duino UNO ล าดับ ส่วนประกอบ รายละเอียดคุณสมบตั ิ

1 Vin 7-23 V ส าหรับรองรับแหล่งจ่ายแรงดันไฟฟ้ากระแสตรงจากภายนอก 7-23 VDC เป็นขั้วต่อแบบ (voltage via the power jack)

2 Switching Power Supply เป็นวงจร Step-down Voltage 7-23 VDC to 5 VDC, 3.3 VDC

3 3.3V/5V Select switch เลือกใช้งาน Power Supply Voltage 3.3V หรือ 5 V 4 Mini USB/ +5V 500mA

Supply จุดต่อแบบ Mini USB ส าหรับการ Upload โปรแกรม และเป็นไฟเลีย้งวงจร +5V จาก USB

5 Digital Pin Connector จุดต่อแบบ Pin-head ตัวผู้ของขา Digital I/O (D0-D13) ที่ออกแบบส าหรับเชื่อมต่ออุปกรณ์อินพุตเอาต์พุทแบบดิจิทัลที่มีขาใช้งาน 3 ขา Vcc, Signal, Ground (V-S-G)

Page 8: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 342

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

ตาราง 9.2 (ต่อ) ล าดับ ส่วนประกอบ รายละเอียดคุณสมบตั ิ

6 Digital Pin Connector จุดต่อแบบ Pin-head ตัวเมียของขา Digital I/O (D0-D13,D18,D19) และขาใช้งานอ่ืนตามมาตรฐานของบอร์ด Arduino UNO

7 USART Pin Connector จุดต่อแบบ Pin-head ตัวผู้ของขาสื่อสารข้อมลูแบบอนุกรม (RxD, TxD, 3.3V/5V, GND)

8 ICSP Pin Connector จุดต่อแบบ Pin-Head ตัวผู้ส าหรบัการโปรแกรมโดยใช้เครื่องโปรแกรม ของไมโครคอนโทรลเลอร์ตระกูล AVR

9 RESET สวิตช์ RESET การท างานของโปรแกรม 10 I2C Pin Connector จุดต่อแบบ Pin-head ตัวผู้ของขาสื่อสารข้อมูลแบบ I2C

(SDA, SCL, 3.3V/5V, GND) 11 Analog Pin Connector จุดต่อแบบ Pin-head ตัวเมียของขา Analog Input (A0-A5)

และขาใช้งานอ่ืนตามมาตรฐานของบอร์ด Arduino UNO 12 Analog Pin Connector จุดต่อแบบ Pin-head ตัวผู้ของขา Analog Input (A0-A5) ออกแบบส าหรับ

เชื่อมต่ออุปกรณ์อินพุตท่ีมีขาใช้งาน 3 ขา Vcc, Signal, Ground (V-S-G)

จากรูปเป็นส่วนประกอบของบอร์ด i-Duino UNO โดยบริษัทอินโนเวตีฟ เอ็กเพอริเมนต์ จ ากัด (INEX) เป็นผู้ผลิตและพัฒนาตาม Arduino Platform ที่มีคุณสมบัติเหมือนกับบอร์ด Arduino UNO รุ่นมาตรฐาน ที่ใช้ชิปไอซีเบอร์ Atmega328 แบบ QPF (SMD) และจากรายละเอียดคุณสมบัติของบอร์ด i-Duino UNO จะเห็นว่ามีองค์ประกอบครบถ้วนส าหรับการน าไปประยุกต์ใช้งานที่มีท้ังขาพอร์ตอินพุตแบบแอนะล็อก (A0-A5) ขาพอร์ตอินพุต เอาต์พุตแบบดิจิทัล (D0-D13) และขาพอร์ตส าหรับการสื่อสารกับอุปกรณ์ภายนอก ตามมาตรฐานของบอร์ด Arduino UNO แต่ออกแบบและผลิตโดยบริษัทของคนไทยใน ดังนั้น ในเอกสารนี้ขอใช้ค าว่าบอร์ด Arduino UNO ซึ่งจะหมายถึงบอร์ด i-Duino UNO นี้

9.2 ซอฟต์แวร์ Arduino IDE ซอฟต์แวร์ Arduino IDE เป็นซอฟต์แวร์ที่ใช้ในการพัฒนาโปรแกรมส าหรับบอร์ด Arduino ด้วยภาษาซี (C/C++) ซึ่งในตัวซอฟต์แวร์มีเครื่องมือ (Tools) ให้ใช้งานที่เป็นทั้ง Editor ส าหรับเขียนชุดค าสั่งโปรแกรม, เป็น Compiler ส าหรับแปลงชุดค าสั่งภาษาซีเป็นภาษาเครื่อง และ เป็น Programmer ส าหรับโปรแกรมชุดค าสั่งภาษาเครื่องลงในตัวไมโครคอนโทรลเลอร์ รวมทั้งมีหน้าต่าง Serial Monitor ส าหรับดูผลลัพธ์การสื่อสารแบบอนุกรม และที่ส าคัญสามารถติดตั้งใช้งานร่วมกับระบบปฏิบัติการของเครื่องคอมพิวเตอร์ได้ทั้ง Window, Mac OS และ Linux ถือว่าเป็นซอฟต์แวร์ที่มีความสามารถสูงส าหรับใช้ในการพัฒนาโปรแกรมส าหรับไมโครคอนโทรลเลอร์ สะดวกต่อการใช้งาน

Page 9: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 343

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

9.2.1 การติดตั้งซอฟต์แวร์ Arduino IDE ซอฟต์แวร์ Arduino IDE ดาวน์โหลดได้ฟรีจากเว็บไซต์ https://www.arduino.cc การดาวน์โหลด และการติดตั้งซอฟต์แวร์ Arduino IDE มีข้ันตอนดังนี้ 9.2.1.1 เชื่อมต่อเว็บไซต์ https://www.arduino.cc และที่เมนู SOFTWARE ให้เลือกที่ DOWNLOADS จะได้หน้าต่างดังรูปที่ 9.5

รูปที่ 9.5 หน้าต่างส าหรับดาวน์โหลดซอฟต์แวร์ Arduino IDE (ที่มา : https://www.arduino.cc/en/Main/Software)

จากรูปที่ 9.5 สามารถเลือกการติดตั้งได้หลายแบบกับหลายระบบปฏิบัติการทั้งระบบปฏิบัติการ Window, ระบบปฏิบัติการ Mac Os และระบบปฏิบัติการ Linux ในที่นี้เลือกติดตั้งกับระบบปฏิบัติการ Window แบบ Window Install, for Window XP and up เมื่อเลือกติดตั้งจะได้หน้าต่างดังรูปที่ 9.6

รูปที่ 9.6 ตัวเลือกการดาวน์โหลดซอฟต์แวร์ Arduino IDE (ที่มา : https://www.arduino.cc/en/Main/Donate)

Page 10: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 344

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

9.2.1.2 เลือกที่ JUST DOWNLOAD จะได้หน้าต่างแสดงดังรูปที ่9.7 เป็นขั้นตอนการดาวน์โหลด ซอฟต์แวร์เพ่ือจัดเก็บในเครื่องคอมพิวเตอร์ ซึ่งจะเป็นต้องเลือกพ้ืนที่จัดเก็บไฟล์ให้เหมาะสม จากหน้าต่างเลือกเก็บที่ Local Disk (D:) ในโฟลเดอร์ Arduino_IDE_1.8.5 จากนั้นเลือก Save และรอการดาวน์โหลดเสร็จ

รูปที่ 9.7 หน้าต่างแสดงพ้ืนที่จัดเก็บไฟล์ดาวน์โหลด

9.2.1.3 ดาวน์โหลดเสร็จจะแสดงหน้าต่างไฟล์ arduino-1.8.5-windows.exe เลือก RUN

รูปที ่9.8 หน้าต่างไฟล์ arduino-1.8.5-windows.exe

Page 11: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 345

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

9.2.1.4 ที่หน้าต่าง Arduino Setup : License Agreement เลือกที่ยอมรับเพ่ือด าเนินการติดตั้งซอฟต์แวร์ (I Agree)

รูปที่ 9.9 หน้าต่างไฟล์ Arduino Setup

9.2.1.5 หน้าต่าง Arduino Setup : Installation Option แสดงตัวเลือกการติดตั้งให้เลือกที่ Next

รูปที่ 9.10 หน้าต่าง Arduino Setup แสดงตัวเลือกการติดตั้ง

Page 12: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 346

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

9.2.1.6 หน้าต่าง Arduino Setup : Installation Folder แสดงพ้ืนที่จัดเก็บไฟล์ติดตั้งให้ เลือกที่ Install

รูปที่ 9.11 หน้าต่าง Arduino Setup แสดงพ้ืนที่จัดเก็บไฟล์ติดตั้ง

9.2.1.7 หน้าต่าง Arduino Setup : Installing แสดงผลการด าเนินการติดตั้ง ให้รอจนกว่า การด าเนินการจะเสร็จ

รูปที่ 9.12 หน้าต่าง Arduino Setup แสดงผลการด าเนินการติดตั้ง

Page 13: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 347

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

9.2.1.8 การติดตั้งเสร็จสมบูรณ์ ให้เลือก Close

รูปที่ 9.13 การติดตั้งซอฟต์แวร์เสร็จสมบูรณ์

9.2.1.9 เมื่อติดตั้งซอฟต์แวร์เสร็จสมบูรณ์ที่หน้าต่าง Desktop จะสร้างไอคอนของโปรแกรม ส าหรับเปิดใช้งานดังรูป

9.2.2 การติดตั้งไดร์เวอร์บอร์ด Arduino UNO การเชื่อมต่อเครื่องคอมพิวเตอร์กับบอร์ด Arduino UNO จะเชื่อมต่อผ่านพอร์ต USB ของ

เครือ่งคอมพิวเตอร์ ในส่วนของบอร์ด Arduino UNO จะมีชิปไอซีท าหน้าที่แปลงสัญญาณข้อมูลจาก USB เป็น RS232/USART ส าหรบัอัปโหลด (Upload) โปรแกรมลงในตัวไมโครคอนโทรลเลอร์ Atmega328) ดังนั้นต้องติดตั้งไดรเวอร์ (Driver) เพ่ือให้สามารถเชื่อมต่อและรับ-ส่งข้อมูลระหว่างเครื่องคอมพิวเตอร์กับบอร์ด Arduino UNO การติดตั้งไดร์เวอร์มีข้ันตอนดังนี้ หมายเหตุ : ตัวอย่างส าหรับ Window 7 และกรณีเป็นบอร์ด Arduino UNO ต้นแบบ มีข้ันตอนการติดตั้งไดร์เวอร์เหมือนกัน)

9.2.2.1 เชื่อมต่อบอร์ด Arduino UNO กับเครื่องคอมพิวเตอร์ ผ่านพอร์ต USB โดยใช ้สายแบบ Mini USB ดังรูปที่ 9.4

Page 14: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 348

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

รูปที่ 9.14 การเชื่อมต่อบอร์ด Arduino UNO กับเครื่องคอมพิวเตอร์ผ่านพอร์ต USB

9.2.2.2 ที่หน้าต่าง Desktop คลิกเมาส์ขวาที่ไอคอน Computer แสดงตัวเลือกดังรูปที่ 9.15

รูปที่ 9.15 ตัวเลือกการท างานของ Computer

9.2.2.3 เลือกที่ Properties จะได้หน้าต่างดังรูปที่ 9.16 ให้เลือกที่ Device Manager

รูปที่ 9.16 หน้าต่าง Control Panel Home

Page 15: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 349

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

9.2.2.4 ทีห่น้าต่าง Device Manager ให้สังเกตเครื่องหมาย ? ที่ Other device และ เครื่องหมาย i ที่ Arduino UNO แสดงการเชื่อมต่อบอร์ด Arduino UNO ไม่สมบูรณ์

รูปที่ 9.17 หน้าต่าง Device Manager แสดงการเชื่อมต่อบอร์ด Arduino UNO ไม่สมบูรณ์

9.2.2.5 ให้คลิกเมาส์ขวาที่ Arduino UNO และเลือกที่ Update Driver Software

รูปที่ 9.18 เลือกการติดตั้ง Driver Software

9.2.2.6 หน้าต่าง Update Driver Softwaer- Arduino UNO ให้เลือกที่ Browse my computer for driver software

Page 16: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 350

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

รูปที่ 9.19 หน้าต่าง Update Driver Softwaer- Arduino UNO

9.2.2.7 ให้เลือก Browse และเลือกไปที่ต าแหน่งจัดเก็บไฟล์โปรแกรม Arduino\driver ดังรูปที่ 9.21 แล้วเลือกที่ Next

รูปที่ 9.20 เลือก Browse และเลือกไปที่ต าแหน่งจัดเก็บไฟล์ Arduino\driver

Page 17: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 351

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

9.2.2.8 เลือกที่ Install จะด าเนินการติดตั้ง Driver Software รอจนการด าเนินการเสร็จ

รูปที่ 9.21 หน้าต่าง Update Driver Software

9.2.2.9 เมื่อติดตั้งเสร็จสมบูรณ์จะแสดงล าดับพอร์ตที่เชื่อมต่อ Arduino UNO (COM7)

รูปที่ 9.22 การด าเนินการเสร็จจะแสดงล าดับพอร์ตที่เชื่อมต่อบอร์ด Arduino UNO

9.2.2.10 ตรวจสอบผลการติดตั้งไดร์เวอร์ของบอร์ด Arduino UNO ได้ที่หน้าต่าง Device Manager ดังรูปที่ 9.23

Page 18: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 352

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

รูปที่ 9.23 หน้าต่าง Device Manager แสดงการเชื่อมต่อที่สมบูรณ์

9.2.3 ส่วนประกอบหน้าต่างซอฟต์แวร์ Arduino IDE เมื่อเปิดใช้งานซอฟต์แวร์ Arduino IDE จะได้หน้าต่างซอฟต์แวร์ ดังรูปที่ 9.24

รูปที่ 9.24 หน้าต่างซอฟต์แวร์ Arduino IDE

แถบเครื่องมือ (Tools bar) แถบเมนู (Menus bar)

แถบเลือกโปรแกรม (Tabs)

Serial Monitor

ชื่อไฟล์ (Sketch Name)

พ้ืนที่ส าหรับเขียนค าสั่งโปรแกรม (Sketch Editor Area)

พ้ืนที่แสดงสถานะการท างาน (Massage Area)

Page 19: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 353

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

9.2.3.1 ชื่อไฟล์ (File Name) จะแสดงชื่อไฟล์หรือเรียกว่า สเก็ตช์บุ๊กหรือไฟล์สเก็ตช์ และ แสดงเวอร์ชันของซอฟต์แวร์ Arduino 1.8.5 (เวอร์ชันปัจจุบัน) 9.2.3.2 แถบเมนู (Menus bar) เป็นค าสั่งเพ่ือการด าเนินการเกี่ยวกับโปรแกรม โดยใน ซอฟต์แวร์ Arduino IDE จะเรียกโปรแกรมที่พัฒนาขึ้นว่า ไฟล์สเก็ตช์ (File Sketch) มีรายละเอียดดังนี้

เมนู File ประกอบด้วยค าสั่งดังนี้ 1) New : สร้าง ไฟล์สเก็ตช์ใหม่ (คีย์ลัด Ctrl+N)

2) Open… : เปิด ไฟล์สเก็ตช์ที่บันทึกไว้ (คีย์ลัด Ctrl+O) 3) Open Recent : เปิดไฟล์สเก็ตช์ที่เคยเปิดมาใช้งานก่อนหน้านี้ 4) Sketchbook : เปิดไฟล์สเก็ตช์ล่าสุดที่เคยเปิดใช้งาน 5) Example : เปิดไฟล์สเก็ตช์ตัวอย่างที่รวบรวมไว้ในโปรแกรม Arduino 6) Close : ปิดไฟล์สเก็ตช์ปัจจุบันที่เปิดใช้งาน (คีย์ลัด Ctrl+W) 7) Save : บันทึกไฟล์สเก็ตช์ปัจจุบันที่เปิดใช้งาน (คีย์ลัด Ctrl+S) 8) Save as… : บันทึกไฟล์สเก็ตช์ปัจจุบันที่เปิดใช้งาน โดยเปลี่ยนชื่อไฟล์ (คีย์ลัด Ctrl+Shift+S) 9) Page Setup : ต้ังค่าหน้ากระดาษของไฟล์สเก็ตช์ปัจจุบัน (คีย์ลัด Ctrl+Shift+P) 10) Print : พิมพ์ค าสั่งโปรแกรมไฟล์สเก็ตช์ปัจจุบันออกทางเครื่องพิมพ์ (คีย์ลัด Ctrl+P) 11) Preference : ก าหนดค่าการท างานของโปรแกรม เช่น เลือกภาษา ขนาดตัวอักษร

ก าหนดรูปแบบ แสดงสถานะการท างานของโปรแกรม เป็นต้น (คีย์ลัด Ctrl+Comma) 12) Quit : จบการท างานและออกจากโปรแกรม (คีย์ลัด Ctrl+Q)

เมนู Edit ประกอบด้วยค าสั่งดังนี้ 1) Undo : ยกเลิกค าสั่งหรือการพิมพ์ครั้งสุดท้าย (คีย์ลัด Ctrl+Z) 2) Redo : ท าซ้ าค าสั่งหรือการพิมพ์ครั้งสุดท้าย (คีย์ลัด Ctrl+Y) 3) Cut : ตัดข้อความท่ีเลือกไว้ออกจากไฟล์สเก็ตช์ (คีย์ลัด Ctrl+X) 4) Copy : คัดลอกข้อความท่ีเลือกไว้ในไฟล์สเก็ตช์ (คีย์ลัด Ctrl+C) 5) Copy for Forum : คัดลอกข้อความที่เลือกไปยังฟอรัมที่ก าหนด 6) Copy as HTML : คัดลอกข้อความที่เลือกเพ่ือแปลงเป็นภาษา HTML ส าหรับเว็บเพจ 7) Paste : น าข้อมูลที่คัดลอกมาวางในต าแหน่งเคอร์เซอร์ปัจจุบัน (คีย์ลัด Ctrl+V) 8) Select All : เลือกข้อความทั้งหมดในไฟล์สเก็ตช์ ปัจจุบัน (คีย์ลัด Ctrl+A) 9) Go to line… : เลือกล าดับบรรทัดที่ต้องการเลื่อนเคอร์เซอร์ไป (คีย์ลัด Ctrl+L) 10) Comment/Uncomment : เพ่ิม/น าออกเครื่องหมายคอมเม้นท์ // (คีย์ลัด Ctrl+/)

Page 20: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 354

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

11) Increase Indent : เพ่ิมขนาดย่อหน้า (คีย์ลัด Tab) 12) Decrease Indent : ลดขนาดย่อหน้า(คีย์ลัด Shift+Tab) 13) Increase Font Size : เพ่ิมขนาดตัวอักษร 14) Decrease Font Size : ลดขนาดตัวอักษร 15) Find… : ค้นหาข้อความในไฟล์สเก็ตช์ ปัจจุบัน (คีย์ลัด Ctrl+F) 16) Find Next : ค้นหาข้อความถัดไปไฟล์สเก็ตช์ ปัจจุบัน (คีย์ลัด Ctrl+G) 17) Find Previos : ค้นหาข้อความย้อนกลับไฟล์สเก็ตช์ ปัจจุบัน (คีย์ลัด Ctrl+Shift+G)

เมนู Sketch ประกอบด้วยค าสั่งดังนี้ 1) Verify/Compiler : ตรวจสอบการเขียนค าสั่งว่าถูกต้องหรือไม่ และคอมไพล์ให้เป็น ภาษาเครื่อง (คีย์ลัด Ctrl+R)

2) Upload : โปรแกรมไฟล์สเก็ตช์ ไปยังบอร์ด Arduino (คีย์ลัด Ctrl+U) 3) Upload Using Programmer : อัปโหลดโดยผ่านเครื่องโปรแกรม

(คีย์ลัด Ctrl+Shift+U) 4) Show Sketch Folder : แสดงโฟลเดอร์ที่เก็บไฟล์สเก็ตช์ ปัจจุบัน (คีย์ลัด Ctrl+K) 5) Import Library… : เพ่ิมไลบรารี โดยโปรแกรม Arduino จะแสดงไลบรารีให้เลือก เมื่อ

เลือกแล้วโปรแกรมจะเพ่ิมบรรทัดค าสั่ง #include <………> ลงในส่วนหัวของไฟล์สเก็ตช์ ปัจจุบัน 6) Add File… : เพ่ิมไฟล์ใน ไฟล์สเก็ตช์ ปัจจุบัน โดยโปรแกรม Arduino จะเพ่ิมไฟล์ลงใน

โฟลเดอร์ที่เก็บไฟล์สเก็ตช์ ปัจจุบัน

เมนู Tools ประกอบด้วยค าสั่งดังนี้ 1) Auto Format : จัดรูปแบบของค าสั่งโปรแกรมให้สวยงาม เช่น กั้นหน้าเยื้องขวา การจัด ต าแหน่งวงเล็บปีกกาปิดให้ตรงกันกับปีกกาเปิด เป็นต้น (คีย์ลัด Ctrl+T) 2) Archive Sketch : บีบอัดไฟล์โปรแกรมโฟลเดอร์หลักและโฟลเดอร์ย่อยของ ไฟล์สเก็ตช์ ปัจจุบัน ไฟล์บีบอัดที่สร้างใหม่จะมีชื่อเดียวกับไฟล์สเก็ตช์ปัจจุบันต่อท้าย ด้วย -00x.zip 3) Fix Encoding & Reload : ปรับรูปแบบค าสั่งในไฟล์สเก็ตช์ และยกเลิกการปรับรูปแบบ 4) Serial Monitor : เปิดหน้าต่าง Serial Monitor เพ่ือตรวจสอบและการรับ-ส่งข้อมูลผ่าน Serial Port (คีย์ลัด Ctrl+Shift+M)

5) Board : เลือกบอร์ดไมโครคอนโทรลเลอร์ Arduino ที่ใช้งานร่วมกับโปรแกรมที่พัฒนาขึ้น โดยมีรายการบอร์ดของ Arduino ให้เลือก

Page 21: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 355

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

6) Serial Port : เลือกและแสดงหมายเลขพอร์ตอนุกรมที่เชื่อมต่อระหว่างเครื่องคอมพิวเตอร์ กับบอร์ด Arduino 7) Programmer : เลือกเครื่องโปรแกรมส าหรับ Burn Bootloader 8) Burn Bootloader : ส าหรับท าการ Burn Bootloader ของ Arduino ลงตัวชิปของ บอร์ดไมโครคอนโทรลเลอร์

เมนู Help กรณีต้องการความช่วยเหลือส าหรับการใช้งานโปรแกรมและการพัฒนาโปรแกรม Arduino IDE จะมีข้อมูลที่ให้ค าแนะน าซึ่งเป็นไฟล์เว็บเพจ (.html) ซึ่งสามารถเปิดได้โดยไม่ต้องออนไลน์ แต่ถ้าต้องการเยี่ยมชมเว็บเพจ www.Arduino.cc จ าเป็นต้องออนไลน์

9.2.3.3 แถบเครื่องมือ (Menus bar) ส าหรับค าสั่งในเมนูที่มีการใช้บ่อย ๆ ซอฟต์แวร์ Arduino IDE ได้น ามาสร้างเป็นแถบเครื่องมือ เพื่อให้ใช้งานได้รวดเร็วและสะดวกขึ้น

รูปที่ 9.25 แถบเครื่องมือของซอฟต์แวร์ Arduino IDE

1) Verify : ตรวจสอบการเขียนค าสั่งว่าถูกต้องหรือไม่ และคอมไพล์ให้เป็นภาษาเครื่อง 2) Upload : โปรแกรมไฟล์สเก็ตช์ไปยังบอร์ด Arduino โดยก่อนโปรแกรมจะท าการ Verify/Compiler ให้ด้วย 3) New : สร้างไฟล์สเก็ตช์ใหม่ 4) Open… : เปิดไฟล์สเก็ตช์ที่บันทึกไว้

5) Save : บันทึกไฟล์สเก็ตช์ปัจจุบันที่เปิดใช้งาน 6) Serial Monitor : เปิดหน้าต่าง Serial Monitor เพ่ือตรวจสอบการรับ-ส่งข้อมูลระหว่าง เครื่องคอมพิวเตอร์กับบอร์ด Arduino ผ่านพอร์ตอนุกรม

9.2.3.4 แถบเลือกโปรแกรม (Tabs) เป็นแถบที่ใช้เลือกไฟล์สเก็ตช์ แต่ละไฟล์มาแสดง (กรณีเปิดไฟล์สเก็ตช์หลายไฟล์)

Page 22: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 356

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

9.2.3.5 พ้ืนที่ส าหรับเขียนค าสั่งโปรแกรม (Text Editor) เป็นพื้นที่ส าหรับเขียนค าสั่งโปรแกรมภาษาซี (C/C++)

9.2.3.6 พ้ืนที่แสดงสถานะการท างาน (Massage area) เป็นพื้นทีส่ าหรับซอฟต์แวร์แจ้งสถานะการท างาน เช่น ผลการตรวจสอบโปรแกรม ผลการคอมไพล์ เป็นต้น

9.2.4 การใช้ซอฟต์แวร์ Arduino IDE การใช้งานซอฟต์แวร์ Arduino IDE ส าหรับเขียนโปรแกรมด้วยภาษาซี (C/C++) ร่วมกับบอร์ด Arduino UNO เบื้องต้น มีขั้นตอนดังนี้ 9.2.4.1 เชื่อมต่อบอร์ด Arduino UNO กับเครื่องคอมพิวเตอร์ผ่านพอร์ต USB 9.2.4.2 เปิดโปรแกรม Arduino IDE 9.2.4.3 ตั้งค่าเริ่มต้นเลือกบอร์ด Arduino ที่ใช้งานโดยเลือกเมนู Tools --->Board: เลือกเป็น Arduino/Genuino Uno และตั้งค่าเลือกพอร์ตที่ใช้เชื่อมต่อระหว่างเครื่องคอมพิวเตอร์กับ บอร์ด Arduino UNO โดยเลอืกเมนู Tools ---> Port: เลอืกเป็น COM7(Arduino/Genuino Uno) (อาจเป็นล าดับพอร์ตอื่น ตามที่ระบบคอมพิวเตอร์จะเลือกให้ใช้งาน) จะได้ผลการตั้งค่าดังรูปที่ 9.26

รูปที่ 9.26 เมนูตั้งค่าบอร์ด และพอร์ตเชื่อมต่อบอร์ด Arduino UNO

9.2.4.4 พิมพ์ค าสั่งไฟล์สเก็ตช์ Test_1 และคอมไพล์ไฟล์สเก็ตช์โดยเลือกแถบเครื่องมือ

(Verify/Compiler) สังเกตข้อความ Done Compiling ดังรูปที่ 9.27 (ก) คือ การคอมไพล์ส าเร็จ และเมื่อโปรแกรมไฟล์สเก็ตช์ลงชิปไมโครคอนโทรลเลอร์ของบอร์ด Arduino UNO (การ Programmer) โดย

Page 23: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 357

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

เลือกที่แถบเครื่องมือ (Upload) จะได้ผลลัพธ์ดังรูปที่ 9.27 (ข)

(ก) ผลการ Compiling (Done compiling)

(ข) ผลการ Upload (Done upload)

รูปที่ 9.27 ผลการ Compiling และอัปโหลด (Upload) ไฟล์สเก็ตช์

Page 24: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 358

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

จากรูปที่ 9.27 (ข) สังเกตการแสดงผลการอัปโหลดจะเป็น Done uploading คือ อัปโหลดส าเร็จ และผลการท างานที่บอร์ด Arduino UNO จะได้ LED ที่ต่อกับขา D13 หรือ Pin 13 ติดกระพริบ หมายเหตุ : การอัปโหลดซอฟต์แวร์จะท าการคอมไพล์ไฟล์สเก็ตช์ก่อน แล้วจึงอัปโหลด ดังนั้นการใช้งานจะเลือกการอัปโหลดเลยโดยไม่ต้องเลือกการคอมไพล์ก่อนก็ได้

รูปที่ 9.28 ต าแหน่ง LED Pin 13 บนบอร์ด Arduino UNO

จะเห็นว่าซอฟต์แวร์ Arduino IDE ใช้งานง่ายและสะดวก สามารถโปรแกรมไฟล์สเก็ตช์ลงชิปไมโครคอนโทรลเลอร์ของบอร์ด Arduino ไดโ้ดยไม่ต้องใช้เครื่องโปรแกรม

9.3 ภาษาซีส าหรบัไมโครคอนโทรลเลอร ์Arduino การเขียนโปรแกรมควบคุมไมโครคอนโทรลเลอร์ Arduino ใช้หลักการพ้ืนฐานของภาษาซี (C/C++) แต่เนื่องจากผู้พัฒนาซอฟต์แวร์ Arduino IDE ได้สร้างฟังก์ชันและไลบรารีส าเร็จรูปไว้พร้อมแล้วบางส่วน ท าให้การเขียนโปรแกรมท าได้ง่ายและสะดวกขึ้น จึงเหมาะสมส าหรับการเริ่มต้นเรียนรู้ การน าไมโครคอนโทรลเลอร์ไปประยุกต์ใช้งาน ในหัวข้อนี้ขออธิบายเนื้อหาของภาษาซี (C/C++) เฉพาะส่วนที่จ าเป็นส าหรับการพัฒนาโปรแกรมควบคุมไมโครคอนโทรลเลอร์ Arduino

9.3.1 โครงสร้างภาษาซีของไมโครคอนโทรลเลอร์ Arduino ส่วนประกอบโครงสร้างโปรแกรมภาษาซีของ Arduino ลักษณะเหมือนกับโครงสร้างโปรแกรม

ภาษาซีพ้ืนฐาน คือ ประกอบด้วย 2 ส่วน ได้แก่ ส่วนหัวโปรแกรม (Header) หรือเรียกว่า พรีโปรเซสเซอร์-ไดเร็กตีฟ (Preprocessor-directive) และส่วนตัวโปรแกรม (Body) หรือเรียกว่า ฟังก์ชันหลัก (Main function) ที่แตกต่างกันคือฟังก์ชันหลักภาษาซีของ Arduino แยกเป็น 2 ฟังก์ชันย่อย คือ ฟังก์ชัน setup และฟังกช์ัน loop ดังตัวอย่างโปรแกรม 9.1

Page 25: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 359

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

ตัวอย่างโปรแกรม 9.1

1 2 3 4 5 6 7 8 9

10

#define ledpin 13 //Header void setup() { //Function setup pinMode(ledpin, OUTPUT); } void loop() { //Function loop digitalWrite(ledpin, HIGH); delay(1000); digitalWrite(ledpin, LOW); delay(1000); }

จากตัวอย่างโปรแกรม 9.1 สว่นประกอบโปรแกรมประกอบด้วย

ส่วนหัวโปรแกรม คือ ค าสั่ง #define ledpin 13 หมายถึง ก าหนดให้ ledpin เป็นต าแหน่งจุดต่อ LED ทีข่า Pin13

ส่วนของฟังชันที่เปรียบเหมือนฟังก์ชันหลัก จะแบ่งออกเป็น 2 ฟังก์ชัน คือ - void setup( ) หรือฟังก์ชัน setup

ฟังก์ชันนี้จะเขียนไว้ส่วนต้นของโปรแกรม โดยมีหลักการคือ ค าสั่งที่อยู่ภายในฟังก์ชันนี้จะ ท างานเพียงครั้งเดียว ใช้เพ่ือก าหนดค่าเริ่มต้นหรือก าหนดคุณสมบัติขาพอร์ตของบอร์ด Arduino

- void loop( ) หรือ ฟังก์ชั่น loop ฟังก์ชันนี้เป็นการท างานตามค าสั่งที่อยู่ภายในฟังก์ชั่น ที่เกี่ยวข้องกับการรับค่าจากพอร์ตอินพุต

การประมวลผลและการส่งค่าออกพอร์ตเอาต์พุต โดยจะวนลูปท างานซ้ าต่อเนื่องเหมือนกับค าสั่ง while(1)

9.3.2 ฟังก์ชันเกี่ยวกับพอร์ตของ Arduino ขาพอร์ตของบอร์ดไมโครคอนโทรลเลอร์ Arduino UNO แสดงดังรูปที่ 9.29

รูปที่ 9.29 ขาพอร์ตของบอร์ด Arduino UNO

Page 26: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 360

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

จากรูปที่ 9.29 ขาพอร์ตของบอร์ด Arduino UNO แบ่งได้เป็น 2 กลุ่ม คือ กลุ่มขาพอร์ตที่เป็นพอร์ตอินพุต เอาต์พุตแบบดิจิทัล (Digital Pin) ได้แก่ Digital Pin0 ถึง Digital Pin13 และกลุ่มขาพอร์ตที่เป็นพอร์ตอินพุตแบบแอนะล็อก (Analog Pin) ได้แก่ Analog Pin0 ถึง Analog Pin5 ซึ่งผู้พัฒนาซอฟต์แวร์ Arduino IDE ได้สร้างฟังก์ชันส าเร็จรูปส าหรับควบคุมการท างานของขาพอร์ตบอร์ด Arduino เพ่ือให้ง่ายและสะดวกต่อการพัฒนาโปรแกรม ดังนี้

9.3.2.1 ฟังก์ชัน pinMode( ) เป็นฟังก์ชันใช้ก าหนดหน้าที่ขาพอร์ตของบอร์ด Arduino (Digital Pin) ให้เป็นพอร์ตอินพุต (Input Port) หรือพอร์ตเอาต์พุต (Output) แบบดิจิทัลส าหรับการเชื่อมต่ออุปกรณ์ภายนอก รูปแบบ pinMode(pin, mode) พารามิเตอร์ pin คือ หมายเลขขาพอร์ตของบอร์ด Arduino mode คือ ก าหนดเป็น INPUT ส าหรับพอร์ตอินพุต ก าหนดเป็น INPUT_PULLUP ส าหรับพอร์ตอินพุตและการ Pull-up ด้วย

ก าหนดเป็น OUTUT ส าหรับพอร์ตเอาต์พุต ตัวอย่าง pinMode(2,INPUT); // ก าหนดให้ขา Digital Pin2 เป็นขาพอร์ตอินพุต pinMode(2,INPUT_PULLUP); // ก าหนดให้ขา Digital Pin2 เป็นขาพอร์ตอินพุต ที่มีการ Pull-up pinMode(13,OUTPUT); // ก าหนดให้ขา Digital Pin13 เป็นขาพอร์ตเอาต์พุต หากมีการก าหนดชื่อขา Digital Pin ด้วยค าสั่ง #define หรือก าหนดเป็นตัวแปร เช่น #define SW1 2 หรือ int SW1=2; ค าสั่งของฟังก์ชันเป็น pinMode(SW1,INPUT); #define led 13

หรือ int led=13; ค าสั่งของฟังก์ชันเป็น pinMode(led,OUTPUT);

หมายเหตุ : 1. บอร์ด Arduino UNO จะมีขา Digital Pin คือ Digital Pin0 ถึง Digital Pin13 แต่สามารถใช้งานขา Analog Pin0 (A0) ถึง Analog Pin 5 (A5) เป็นขา Digital Pin ได ้ โดยล าดับเป็น Digital Pin14 ถึง Digital Pin19

2. การก าหนดหน้าที่ขาพอร์ตด้วยฟังก์ชัน pinMode( ) จะก าหนดเพียงครั้งเดียว ค าสั่งนี้จะอยู่ในฟังก์ชั่น void setup( )

Page 27: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 361

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

9.3.2.2 ฟังก์ชัน digitalRead( ) ใช้อ่านค่าสถานะลอจิกของขาพอร์ตอินพุตแบบดิจิทัล (Input Digital Pin) ทีเ่ชื่อมต่อกับ

อุปกรณ์อินพุตแบบดิจิทัล รูปแบบ digitalRead(pin) พารามิเตอร์ pin คือ หมายเลขขาพอร์ตของบอร์ด Arduino ตัวอย่าง digitalRead(2); // อ่านค่าสถานะลอจิกขา Input Digital Pin2 หากมีการก าหนดชื่อขา Digital Pin ด้วยค าสั่ง #define หรือก าหนดเป็นตัวแปร เช่น #define SW1 2 หรือ int SW1=2; ค าสั่งของฟังก์ชันเป็น digitalRead(SW1); // อ่านค่าสถานะลอจิกของ SW1 ที่ต่อกับขา Input Digital Pin2

9.3.2.3 ฟังก์ชัน digitalWrite( ) ใช้สั่งงานขาพอร์ตเอาต์พุตแบบดิจิทัล (Output Digital Pin) ให้มีสถานะเป็นลอจิกสูง (HIGH หรือ “1”) หรือลอจิกต่ า (LOW หรือ “0”) เพ่ือควบคุมการท างานของอุปกรณ์ รูปแบบ digitalWrite(pin,value) พารามิเตอร์ pin คือ หมายเลขขาพอร์ตของบอร์ด Arduino value คือ ค่าลอจิก HIGH หรือ LOW ตัวอย่าง digitalWrite(13,High); // สั่งงานขา Digital Pin13 ให้มีสถานะลอจิก HIGH digitalWrite(13,LOW); // สั่งงานขา Digital Pin13 ให้มีสถานะลอจิก LOW หากมีการก าหนดชื่อขา Digital Pin ด้วยค าสั่ง #define หรือก าหนดเป็นตัวแปร เช่น #define led 13 หรือ int led=13; ค าสั่งของฟังก์ชันเป็น digitalWrite(led,HIGH); // สั่งงาน led ที่ขา Digital Pin13 ให้มีลอจิก

HIGH หมายเหตุ : ที่ขาพอร์ตจะค่าลอจิกตามค าสั่งของฟังก์ชัน digitalWrite( ) และ digitalRead( ) ต้องก าหนดหน้าที่ขาพอร์ตด้วยฟังก์ชัน pinMode ( ) ก่อน

การใช้ฟังก์ชัน pinMode( ), ฟังก์ชัน digitalRead( ) และฟังก์ชัน digitalWrite( ) แสดงได้ดังตัวอย่างโปรแกรม 9.2 ส าหรับควบคุมการท างานวงจรดังรูปที่ 9.30

Page 28: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 362

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

ตัวอย่างโปรแกรม 9.2 1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18

# define led 13 # define SW1 2 void setup() //Function setup { pinMode(led, OUTPUT); pinMode(SW1,INPUT); } void loop() //Function loop { if(digitalRead(SW1)==LOW) { digitalWrite(ledpin, HIGH); } else { digitalWrite(ledpin, LOW); } }

- บรรทัดที่ 5-6 ใช้ฟังก์ชัน pinMode( ) ก าหนดหน้าที่ขาพอร์ต Pin13 เป็นพอร์ตเอาต์พุตและ ขาพอร์ต Pin2 เป็นพอร์ตอินพุต - บรรทัดที่ 10 ใช้ฟังก์ชัน digitalRead( ) อ่านค่าสถานะลอจิกที่ขาพอร์ต Pin2 ที่เกิดจากการ กดสวิตช์ SW1 โดยใช้ค าสั่ง if( )…else ซึ่งเป็นค าสั่งภาษาซีพ้ืนฐาน - บรรทัดที่ 12 และ 16 ใช้ฟังก์ชัน digitalWrite( ) สั่งงานขาพอร์ต Pin13 ให้ลอจิกเป็น HIGH และ LOW เพ่ือควบคุมให้ LED ติดและดับ ดังนั้นสรุปได้ว่า 1. หากก าหนดฟังก์ชัน pinMode(pin,INPUT) จะใช้ร่วมกับฟังก์ชัน digitalRead( ) 2. หากก าหนดฟังก์ชัน pinMode(pin,OUTPUT) จะใช้ร่วมกับฟังก์ชัน digitalWrite( )

รูปที่ 9.30 วงจรสวิตช์ควบคุมการติด-ดับของ LED

Page 29: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 363

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

9.3.2.4 analogRead( ) ใช้อ่านค่าสัญญาณแอนะล็อกที่ขาอินพุตพอร์ตแบบแอนะล็อก (Analog Pin0 ถึง Analog Pin5 : A0 ถึง A5) ที่ต่อกับอุปกรณ์อินพุตแบบแอนะล็อก ซึ่งภายในไมโครคอนโทรลเลอร์จะมีโมดูลแปลงสัญญาณแอนะล็อกเป็นดิจิทัล (ADC) ความละเอียด 10 บิต ท าให้สามารถแปลงค่าแรงดันอินพุต 0 ถึง 5V ให้เป็นข้อมลูดิจิทัลที่มีค่า 0 ถึง 1023 รูปแบบ analogRead (pin) พารามิเตอร์ pin คือ ขาอินพุตพอร์ตแบบแอนะล็อก ตัวอย่าง int sensor0, sensor1; //ประกาศตัวแปร sensor1 และ sensor2

Sensor0 = analogRead(0); //เก็บค่าในตัวแปร sensor0 และอ่านค่าสัญญาณ แอนะล็อกที่ขาพอร์ต Analog Pin1 เก็บค่าใน ตัวแปร sensor1

หมายเหตุ : 1. ส าหรับบอร์ด Arduino UNO มีขา Analog Pin 6 ขาคือ Analog Pin0 ถึง Analog Pin5 (A0 ถึง A5) การอ่านค่าสัญญาณแอนะล็อกด้วยฟังก์ชัน analogRead( ) ใช้ร่วมกับขาพอร์ต Analog Pin0 ถึง Analog Pin5 ดังนั้นต้องต่ออุปกรณ์อินพุตแบบแอนะล็อกกับขา Analog Pin นี้เท่านั้น 2. การใช้งานขาพอร์ต Analog Pin0 ถึง Analog Pin5 ไม่ต้องก าหนดค่าฟังก์ชัน pinMode( ) เนื่องจากขาพอร์ตถูกก าหนดให้เป็นอินพุตพอร์ตแล้ว

9.3.2.5 ฟังก์ชัน analogWrite( ) ใช้สั่งงานส่งค่าสัญญาณแบบแอนะล็อกหรือสัญญาณที่เปลี่ยนค่าระดับแรงดันได้ 0V ถึง 5V ออกท่ีขาพอร์ตเอาต์พุตที่ก าหนด ค่าระดับแรงดันควบคุมด้วยค่าความกว้างของสัญญาณแบบ PWM (Pulse Width Modulation) ซ่ึงค่าความกว้างของสัญญาณ PWM หรือค่าดิวตี้ไซเคิล (Duty cycle) มีลักษณะดังรูปที่ 9.31 รูปแบบ analogWrite (pin,value) พารามิเตอร์ pin คือ หมายเลขขาพอร์ตของบอร์ด Arduino value คือ ค่าดิวตี้ไซเคิลของสัญญาณแบบ PWM มีค่าระหว่าง 0 ถึง 255 (ความละเอียด 8 บิต) ตัวอย่าง analogWrite (10,128); //ส่งสัญญาณ PWM ค่าดิวตี้ไซเกิล 128 ออกขาพอร์ต P.10 หมายเหตุ : ขาพอร์ตของ Arduino ต้องมีคุณสมบัติเป็นขาสัญญาณ PWM ด้วย ส าหรับบอร์ด Arduino UNO ได้แก่ขา Digital Pin 3, Digital Pin 5, Digital Pin 6, Digital Pin 9, Digital Pin 10 และ Digital Pin 11

Page 30: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 364

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

รูปที่ 9.31 สัญญาณ PWM ที่ควบคุมระดับแรงดันด้วยค่าความกว้างของสัญญาณพัลส์

ค่าดิวตี้ไซเคิลของสัญญาณ PWM มีค่า 0 % ถึง 100 % เทียบได้กับแรงดันสัญญาณแอนะล็อกที่เปลี่ยนค่าระหว่าง 0 V ถึง 5 V จากรูปที่ 9.31 แสดงค่าดิวตี้ไซเคิลของสัญญาณ PWM เท่ากับ 20 %, 50% และ 80% เมื่อเทียบกับค่าแรงดันสัญญาณแอนะล็อกจะได้เท่ากับ 1.0V, 2.5V และ 4.0V ตามล าดับ และเม่ือเทียบกับค่าพารามิเตอร์ value ในฟังก์ชัน analogWrite( ) ที่มีค่าระหว่าง 0 ถึง 255 จะได้เท่ากับ 51,127.5 (ใช้ค่า 127) และ 204 ตามล าดับ ค านวณได้จากสมการ

20% x5V = 1.0V และ 1.0V x255 = 51 100% 5V

50% x5V = 2.5V และ 2.5V x255 = 127.5 100% 5V

80% x5V = 4.0V และ 4.0V x255 = 204 100% 5V

ดังนั้นการใช้ฟังก์ชัน analogWrite( ) สามารถก าหนดค่าแรงดันที่ขาพอร์ตระหว่าง 0V ถึง 5V ด้วยการก าหนดค่าพารามิเตอร์ value ของฟังก์ชัน ซึ่งการปรับค่าแรงดันใช้หลักการเปลี่ยนค่าความกว้างหรือค่าดิวตี้ไซเกิลของสัญญาณพัลส์

การใช้ฟังก์ชัน analogRead( ) และฟังก์ชัน analogWrite( ) แสดงดังตัวอย่างโปรแกรม 9.3 ส าหรับควบคุมการท างานวงจรดังรูปที่ 9.32

Page 31: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 365

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

ตัวอย่างโปรแกรม 9.3 1 2 3 4 5 6 7 8 9

10 11 12 13 14

# define led 3 unsigned int sensor=0; byte value=0; void setup() { pinMode(led, OUTPUT); } void loop() { sensor=analogRead(0); value=(sensor/4); analogWrite(led, value); delay(100); }

- บรรทัดที่ 10 ใช้ฟังก์ชัน analogRead( ) อ่านค่าสัญญาณแอนะล็อกที่ขา A0 มาเก็บในตัว แปร sensor - บรรทัดที่ 11 แปลงค่าสัญญาณแอนะล็อก 10 บิต (0-1023) ที่เก็บในตัวแปร sensor ให้เป็น ค่าสัญญาณแอนะล็อก 8 บิต (0-255) และเก็บค่าในตัวแปร value - บรรทัดที่ 12 ใช้ฟังก์ชัน analogWrite( ) ส่งค่าแอนะล็อกของตัวแปร value ออกท่ีขา Digital Pin3(PWM) ผลการท างาน เมื่อปรับค่า VR1 จะควบคุมความสว่างของ LED

รูปที่ 9.32 วงจรรับค่าแอนะล็อกควบคุมความสว่างของ LED

Page 32: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 366

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

9.3.3 ฟังก์ชันเกี่ยวกับเวลาของ Arduino ซอฟต์แวร์ Arduino IDE มีฟังก์ชันส าเร็จรูปที่ท างานเกี่ยวข้องกับการนับค่าเวลาและการหน่วงเวลาทั้งหมด 4 ฟังก์ชัน ดังนี้ 9.3.3.1 ฟังก์ชัน millis( ) เป็นฟังก์ชั่นส่งค่าการนับออกมาเป็นเวลา ในหน่วยมิลลิวนิาที เริ่มต้นนับตั้งแต่บอร์ด Arduino เริ่มท างาน และนับตลอดเวลาที่บอร์ดท างาน จะเริ่มต้นนับใหม่ที่ค่า 0 หลังจากนับไปประมาณ 50 วันหรือมีการรีเซ็ตการท างาน การใช้ฟังก์ชันต้องใช้ตัวแปรชนิด unsigned long ส าหรับเก็บค่าตัวแปรเนื่องจากการนับค่าเวลานานถึง 50 วัน จึงต้องใช้พ้ืนที่ในหน่วยความจ ามาก ฟังก์ชันนี้มีข้อดีคือเป็นการนับจากการท างานของไทม์เมอร์ภายในชิปไมโครคอนโทรลเลอร์ ที่ไม่ใช่การหน่วงเวลาเหมือนฟังก์ชัน delay( ) ดังนั้น ขณะที่ฟังก์ชันนี้ท างานอยู่ไมโครคอนโทรลเลอร์สามารถท างานอื่นพร้อมกันไปด้วยได้ รูปแบบ time = millis() พารามิเตอร์ ไม่มี

ตัวอย่างโปรแกรม 9.4 1 2 3 4 5 6 7 8 9

10 11 12

unsigned long time; void setup() { Serial.begin(9600); } void loop() { Serial.print("Time: "); time = millis(); Serial.println(time); //prints time since program started delay(1000); /*wait a second so as not to send massive } amounts of data */

- บรรทัดที่ 1 ประกาศตัวแปรส าหรับเก็บค่าเวลาของฟังก์ชัน millis( ) - บรรทัดที่ 9 อ่านค่าเวลาจากฟังก์ชัน millis( ) เก็บค่าในตัวแปร time - บรรทัดที่ 10 แสดงผลค่าเวลาผ่าน Serial Monitor

9.3.3.2 ฟังก์ชัน micros( ) เป็นฟังก์ชันส่งค่าการนับออกมาเป็นเวลาในหน่วยไมโครวินาที เริ่มต้นนับตั้งแต่บอร์ด Arduino เริ่มท างานและนับตลอดเวลาที่บอร์ดท างาน จะเริ่มต้นนับใหม่ที่ค่า 0 เมื่อเกิด Overflow คือเกินกว่าค่าที่นับได้มีค่าประมาณ 70 นาที หรือมีการรีเซ็ตการท างาน การท างานเหมือนฟังก์ชัน micros( ) รูปแบบ time = micros() พารามิเตอร์ ไม่มี

Page 33: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 367

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

ตัวอย่างโปรแกรม 9.5 1 2 3 4 5 6 7 8 9

10 11 12

unsigned long time; void setup() { Serial.begin(9600); } void loop() { Serial.print("Time: "); time = micros(); Serial.println(time); //prints time since program started delay(1000); /*wait a second so as not to send massive } amounts of data */

- บรรทัดที่ 1 ประกาศตัวแปรส าหรับเก็บค่าเวลาของฟังก์ชัน micros( ) - บรรทัดที่ 9 อ่านค่าเวลาจากฟังก์ชัน micros( ) เก็บค่าในตัวแปร time - บรรทัดที่ 10 แสดงผลค่าเวลาผ่าน Serial Monitor

9.3.3.3 ฟังก์ชัน delay( ) ฟังก์ชันหน่วงเวลาการท างานตามค่าเวลาที่ก าหนด ในหน่วยมิลลิวินาที (millisecond) การท างานของฟังก์ชันนี้จะหน่วงเวลาโดยหยุดการท างานทุกอย่างไว้ จนกว่าจะครบเวลาที่ก าหนดไว้จึงจะท างานต่อไป รูปแบบ delay(ms) พารามิเตอร์ ms คือ ค่าหน่วงเวลา หน่วยเป็นมิลลิวินาที (millisecond)

ตัวอย่างโปรแกรม 9.6 1 2 3 4 5 6 7 8 9

10 11 12

int ledPin = 2; // LED connected to Digital Pin 2 void setup() { pinMode(ledPin, OUTPUT); // sets the Digital Pin as output } void loop() { digitalWrite(ledPin, HIGH); // sets the LED on delay(1000); // waits for a second digitalWrite(ledPin, LOW); // sets the LED off delay(1000); // waits for a second }

- บรรทัดที่ 9 หน่วงเวลาให้คงสถานะลอจิก HIGH ที่ ledPin ไว้ 1 วินาที ท าให้ LED ติดค้างไว้ 1 วินาที - บรรทัดที่ 11 หน่วงเวลาให้คงสถานะลอจิก LOW ที่ ledPin 1 วินาที

Page 34: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 368

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

หมายเหตุ : 1. 1000 มิลลิวินาที (millisecond) = 1 วินาที (second) 2. ในงานที่ต้องการความรวดเร็วและความแม่นย าในการท างานไม่ควรใช้ฟังก์ชัน delay( ) หรือการหน่วงเวลาเพราะหากในโปรแกรมมีการใช้งานฟังก์ชัน delay( ) หน่วงเวลานานและบ่อย อาจท าให้การประมวลผลช้าและผิดพลาด ควรเลือกใช้ฟังก์ชันการนับเวลาที่เป็นการอินเตอร์รัพท์จากไทม์เมอร์ เช่นฟังก์ชัน millis( ) หรือ หรือฟังก์ชัน micros( ) แทน

9.3.3.4 ฟังก์ชัน delayMicrosecond(us) ฟังก์ชันหน่วงเวลาการท างานตามค่าเวลาที่ก าหนดในหน่วยไมโครวินาที (microsecond) ใช้ส าหรับการหน่วงเวลาในกรณีที่ต้องการหน่วงเวลาการท างานสั้น ๆ ที่มีค่าต่ ากว่า 1 มิลลิวินาที ลักษณะการท างานเหมือนกับฟังก์ชัน delay(ms) รูปแบบ delayMicroseconds (us) พารามิเตอร์ us คือ ค่าหน่วงเวลา หน่วยเป็นไมโครวินาที ตัวอย่าง delayMicroseconds(50); //หน่วงเวลาการท างาน 50 ไมโครวินาที

ตัวอย่างโปรแกรม 9.7 1 2 3 4 5 6 7 8 9

10 11 12

int outPin = 9; // Digital Pin 9 void setup() { pinMode(outPin, OUTPUT); // sets the Digital Pin as output } void loop() { digitalWrite(outPin, HIGH); // sets the pin on delayMicroseconds(50); // pauses for 50 microseconds digitalWrite(outPin, LOW); // sets the pin off delayMicroseconds(50); // pauses for 50 microseconds }

- บรรทัดที่ 8-9 ส่งค่าพัลส์ที่มีคาบเวลา 100 ไมโครวินาที (Ton=50 ไมโครวินาที, Toff=50 ไมโครวินาที) ต่อเนื่องตลอดเวลา ที่ขาพอร์ต Digital Pin 9 หมายเหตุ : ถ้าต้องการหน่วงเวลาที่มากกว่า 1000 ไมโครวินาที ควรเลือกใช้ค าสั่ง delay (ms) แทน

9.3.4 ฟังก์ชั่นเกี่ยวกับการสื่อสารผ่านพอร์ตอนุกรม การสื่อสารข้อมูลระหว่างบอร์ด Arduino กับคอมพิวเตอร์จะใช้รูปแบบการสื่อสารแบบอนุกรม (Serial) ผ่านพอร์ต USB ของเครื่องคอมพิวเตอร์ กับขาพอร์ตสื่อสารข้อมูลอนุกรมโดยใช้ขาพอร์ต Digital Pin0 (RxD) และขาพอร์ต Digital Pin1 (TxD) ดังนั้นเมื่อเลือกใช้งานขาพอร์ตนี้เป็นขาพอร์ตส าหรับสื่อสารข้อมูลอนุกรมแล้วจะไม่สามารถใช้ขาพอร์ต Digital Pin0 และ Digital Pin1 เป็นพอร์ตอินพุต เอาต์พุตแบบดิจิทัลเชื่อมต่อกับอุปกรณ์อ่ืน ๆ ได้ ซอฟต์แวร์ Arduino IDE มีหน้าต่าง Serial Monitor ส าหรับ

Page 35: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 369

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

แสดงผลการรับ-ส่งข้อมูลผ่านพอร์ตอนุกรม และมีฟังก์ชันส าเร็จรูปส าหรับใช้งานการสื่อสารผ่านพอร์ตอนุกรม ขออธิบายเฉพาะฟังก์ชันที่จ าเป็นและใช้งานบ่อย ๆ ดังนี้ 9.3.4.1 Serial.begin( ) ฟังก์ชันส าหรับก าหนดค่าอัตราของการรับส่งข้อมูลอนุกรม ในหน่วยบิตต่อวินาที (bits per second : bps) ซ่ึงใช้ค่าต่อไปนี้ 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 หรือ 115200 รูปแบบ Serial.begin(speed) พารามิเตอร์ speed คืออัตราความเร็วการรับ-ส่งข้อมูลอนุกรมในหน่วยบิตต่อวินาที (baud หรือ bps) ตัวอย่าง Serial.begin (9600) ; //เลือกความเร็วเท่ากับ 9600 บิตต่อวินาที

9.3.4.2 Serial .available ( ) ฟังก์ชันส าหรับแจ้งว่าได้รับข้อมูลตัวอักษร (characters) แล้ว และพร้อมส าหรับการอ่านค่าไปใช้งานค่าท่ีส่งกลับจากฟังก์ชันใช้ในการอ่านค่าการรับ-ส่งข้อมูลโดยเก็บข้อมูลในบัฟเฟอร์ตัวรับ ถ้าไม่มีข้อมูลจะมีค่าเป็น 0 ถ้ามีข้อมูลฟังก์ชั่นจะคืนค่าที่มากว่า 0 โดยบัฟเฟอร์สามารถเก็บข้อมูลได้สูงสุด 128 ไบต์ รูปแบบ Serial.available() พารามิเตอร์ ไม่มี

9.3.4.3 Serial.read ( ) ฟังก์ชันส าหรับอ่านค่าข้อมูลที่ได้รับจากพอร์ตอนุกรม ค่าท่ีส่งกลับจากฟังก์ชั่นเป็นค่าเลขจ านวนเต็ม (integer) ที่เป็นไบต์แรกของข้อมูลที่ได้รับ ถ้าไม่มีข้อมูลค่าท่ีส่งกลับเท่ากับ -1 รูปแบบ Serial.read() พารามิเตอร์ ไม่มี

9.3.4.4 Serial.print ( ) ฟังก์ชันส าหรับส่งข้อมูลชนิดตัวอักขระ (ASCII Character) หรือข้อความออกทางพอร์ตอนุกรม ซึ่งสามารถแสดงผลข้อมูลด้วย Serial Monitor ได ้ รูปแบบ Serial.print(val) หรือ Serial.print(val, format); //ก าหนดรูปแบบข้อมูล พารามิเตอร์ val คือ ข้อมูลที่ส่งออก format คือ รูปแบบของข้อมูล ตัวอย่าง Serial.print("Ayutthaya"); //ส่งข้อมูลชนิดข้อความ

Page 36: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 370

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

Serial.print(x,DEC); //ส่งค่าตัวแปร x แบบฐานสิบ Serial.print(98,DEC); //ส่งค่าคงท่ี 98 แบบเลขฐานสิบ=98 Serial.print(98,HEX); //ส่งคา่คงท่ี 98 แบบเลขฐานสิบหก=0x62 Serial.print(98,OCT); //ส่งค่าคงท่ี 98 แบบเลขฐานแปด=342 Serial.print(98,BIN); //ส่งค่าคงท่ี 98 แบบฐานสอง= 011100010 หมายเหตุ : การส่งค่าเลขทศนิยมจะตัดเศษเลขทศนิยมเหลือเป็นเลขจ านวนเต็ม ทางแก้ไขทางหนึ่งคือ คูณเลขทศนิยมด้วย 10, 100, 1000 ฯลฯ ขึ้นอยู่กับจ านวนหลักของเลขทศนิยม เพ่ือแปลงเลขทศนิยมเป็นจ านวนเต็มก่อน แล้วจึงส่งออกพอร์ตอนุกรม จากนั้นที่ฝั่งภาครับให้ท าการหารค่าที่รับได้เพ่ือแปลงกลับเป็นเลขทศนิยม

9.3.4.5 Serial.println ( ) ฟังก์ชันส าหรับส่งข้อมูลชนิดตัวอักขระ (ASCII Character) หรือข้อความออกทางพอร์ตอนุกรมเหมือนกับ Serial.print( ) แต่มีค าสั่งควบคุม \n (ขึ้นบรรทัดใหม่) และ \r (เลื่อนเคอร์เซอร์ต าแหน่งเริ่มต้นของบรรทัด ดังนั้นถ้าใช้การส่งข้อมูลด้วยฟังก์ชัน Serial.println( ) เมื่อส่งข้อมูลชุดแรกแล้ว ข้อมูลชุดต่อไปจะแสดงที่ต าแหน่งแรกของบรรทัดถัดไป รูปแบบ Serial.println(val) หรือ Serial.println(val, format) //ก าหนดรูปแบบข้อมูล พารามิเตอร์ val คือ ข้อมูลที่ส่งออก format คือ รูปแบบของข้อมูล ตัวอย่าง Serial.println("Ayutthaya"); //ส่งข้อมูลชนิดข้อความแล้วขึ้นบบรทัดใหม่ Serial.println(x,DEC); //ส่งค่าตัวแปร x แบบฐานสิบ แล้วขึ้นบบรทัดใหม่ ตัวอย่างโปรแกรม 9.8

1 2 3 4 5 6 7 8 9

10 11 12 13 14 15

int incomingByte = 0 ; // for incoming serial data void setup ( ) { Serial.begin(9600) ; //opens serial port, baud rate 9600 bps delay(5000) ; } void loop ( ) { if(Serial.available()>0) //send data only when you receive data { incomingByte=Serial.read(); //read the incoming byte : Serial.print(“I received :”) ; // say what you got : Serial.println(incomingByte,DEC ); } }

Page 37: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 371

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

- บรรทัดที่ 4 ฟังก์ชัน Serial.begin(9600); ก าหนค่า baud rate เท่ากับ 9600 bps - บรรทัดที่ 9 ฟังชัน if(Serial.available( )>0) ตรวจสอบว่ามีการส่งข้อมูลหรือไม่

- บรรทัดที่ 11 ฟังก์ชัน incomingByte Serial.Read( ); อ่านค่าข้อมูลเก็บในตัวแปร incomingByte

- บรรทัดที่ 12 ฟังก์ชัน Serial.print(“I received”); แสดงข้อความ “I received” - บรรทัดที่ 13 ฟังก์ชัน Serial.println(incomingByte,DEC); แสดงค่าข้อมูล incomingByte ในแบบเลขฐานสิบ หมายเหตุ : นักเรียนสามารถศึกษารายละเอียดของฟังก์ชันเกี่ยวกับการสื่อสารผ่านพอร์ตอนุกรมเพ่ิมเติมได้จากเว็บไซต์ https://www.arduino.cc/reference/en/language/functions/communication/serial

9.3.5 ฟังก์ชันเกี่ยวกับการอินเตอร์รัพท์ แหล่งก าเนิดสัญญาณอินเตอร์รัพท์ของไมโครคอนโทรลเลอร์ Arduino แบ่งออกเป็น 2 แหล่ง คือ การอินเตอร์รัพท์จากการนับเวลาของไทม์เมอร์ภายในไมโครคอนโทรลเลอร์ และการอินเตอร์รัพท์จากการเปลี่ยนค่าลอจิกจากภายนอก ฟังก์ชันการอินเตอร์รัพท์จากการนับเวลาของไทม์เมอร์ภายในมี 2 ฟังก์ชัน ได้แก่ ฟังก์ชัน interrupts( ) และ noInterrupt( ) ฟังก์ชัการอินเตอร์รัพท์จากภายนอกมี 2 ฟังก์ชัน ได้แก่ ฟังก์ชัน attachInterrupts( ) และ detachInterrupt( ) 9.3.5.1 ฟังก์ชัน interrupt( ) เป็นฟังก์ชันส าหรับเปิดใช้งานอินเตอร์รัพท์จากการนับเวลาของไทม์เมอร์ภายใน รูปแบบ interrupts() พารามิเตอร์ ไม่มี

9.3.5.2 ฟังก์ชัน noInterrupt( ) เป็นฟังก์ชันส าหรับปิดการใช้งานอินเตอร์รัพท์จากการนับเวลาของไทม์เมอร์ภายใน ใช้งานคู่กับฟังก์ชัน interrupts( ) รูปแบบ noInterrupts() พารามิเตอร์ ไม่มี

9.3.5.3 ฟังก์ชัน attachInterrupts( ) เป็นฟังก์ชันส าหรับเปิดการใช้งานอินเตอร์รัพท์จากภายนอก ซึ่งบอร์ด Arduino UNO รองรับสัญญาณอินเตอร์รัพท์ภายนอกได้ที่ Digital Pin2 และ Digital Pin3 เมื่อเปิดใช้งานอินเตอร์รัพท์ และมีการเปลี่ยนค่าลอจิกจะเกิดการอินเตอร์รัพท์ขึ้น

Page 38: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 372

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

รูปแบบ attachInterrupts( ) พารามิเตอร์ ไม่มี

9.3.5.4 ฟังก์ชัน detachInterrupt( ) เป็นฟังก์ชันส าหรับปิดการใช้งานอินเตอร์รัพท์ภายนอก ในการใช้งานนั้นจะใช้งานคู่กับฟังก์ชัน attachInterrupts( ) รูปแบบ detachInterrupt( ) พารามิเตอร์ ไม่มี

9.3.6 ฟังก์ชันพิเศษ นอกจากฟังก์ชันใช้งานที่จ าเป็นส าหรับเขียนโปรแกรมควบคุมไมโครคอนโทรลเลอร์ Arduino ที่ได้อธิบายไว้แล้ว ผู้พัฒนาซอฟต์แวร์ Arduino IDE ได้สร้างฟังก์ชันพิเศษ เพ่ือให้การเขียนโปรแกรมท าได้ง่ายและสะดวกข้ึนมีรายละเอียดดังนี้ 9.3.6.1 ฟังก์ชัน tone( ) เป็นฟังก์ชันส าหรับสร้างสัญญาณเสียงออกล าโพงเพียโซ (Piezo buzzer) ดังรูปที่ 9.33 หรือล าโพงขนาดเล็ก เป็นสัญญาณ Square wave ค่าดิวตี้ไซเคิล 50 % ความถีต่ามที่ก าหนด รูปแบบ tone(pin,frequency) //สร้างสัญญาณเสียงต่อเนื่อง หรือ tone(pin,frequency,duration) //สร้างสัญญาณเสียงเป็นจังหวะ พารามิเตอร์ pin คือ หมายเลขขาพอร์ตของบอร์ด Arduino ที่ต้องการส่งสัญญาณเสียง frequency คือความถ่ีสัญญาณ Square wave duration คือ คาบเวลาการเกิดสัญญาณเสียงในหน่วย milliseconds ตัวอย่าง tone(6,400,500); //ส่งสัญญาณเสียงออกท่ีขาพอร์ต Digital Pin6 ความถี ่400 Hz คาบเวลา 500 ms หมายเหตุ : การส่งสัญญาณเสียงออกขาพอร์ต จะใช้งานได้เฉพาะขาพอร์ตที่มีรองรับการสร้างสัญญาณ PWM เท่านั้น และส่งสัญญาณเสียงได้ครั้งละ 1 ขาพอร์ตเท่านั้น จะส่งพร้อมกันไม่ได้

รูปที่ 9.33 ล าโพงเพียโซ (Piezo buzzer) (ที่มา : http://www.activecomponents.com/shop/Buzzers++Transducers/Buzzers )

Page 39: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 373

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

9.3.6.2 ฟังก์ชัน notone( ) เป็นฟังก์ชันส าหรับปิดสัญญาณเสียงที่สร้างจากฟังก์ชัน tone( ) การส่งสัญญาณเสียงด้วยฟังก์ชัน tone( ) จะส่งสัญญาณเสียงออกได้ครั้งละ 1 ขาพอร์ตเท่านั้น จะส่งพร้อมกันหลายขาพอร์ตไม่ได้ เมื่อต้องการสร้างสัญญาณเสียงออกหลายขาพรอ์ต จึงต้องใช้ฟังก์ชัน notone( ) ปิดการท างานของขาพอร์ตที่ส่งสัญญาณอยู่ก่อน แล้วจึงขาส่งสัญญาณเสียงออกขาพอร์ตอ่ืนได้ รูปแบบ notone(pin) พารามิเตอร์ pin คือ หมายเลขขาพอร์ตของบอร์ด Arduino ที่ต้องการปิดการส่งสัญญาณเสียง ตัวอย่าง notone(6); //ปิดการส่งสัญญาณเสียงที่ขาพอร์ต Digital Pin6

9.3.6.3 ฟังก์ชัน map( ) เป็นฟังก์ชันส าหรับแปลงค่าตัวเลขจากช่วงค่าหนึ่ง ไปเป็นช่วงตัวเลขอีกค่าหนึ่ง เช่น ต้องการแปลงค่าเลขจ านวนเต็มช่วงตัวเลข 0-100 เป็นช่วงตัวเลข 0-10 เป็นต้น ฟังก์ชัน map( ) จะแปลง ค่าช่วงตัวเลขให้โดยอัตโนมัติ โดยใส่ค่าเริ่มต้น และค่าช่วงตัวเลขปลายทางท่ีต้องการแปลง รูปแบบ map(value,fromLow,fromHigh,toLow,toHigh) พารามิเตอร์ value คือ ตัวแปรที่เก็บข้อมูลค่าตัวเลข fromLow คือ ค่าต่ าสุดของตัวเลขต้นทาง fromHigh คือ ค่าสูงสุดของตัวเลขต้นทาง toLow คือ ค่าต่ าสุดของตัวเลขปลายทาง toHigh คือ ค่าสูงสุดของตัวเลขปลายทาง ตัวอย่าง map(x,0,100,0,10); //แปลงค่าของตัวแปร x จาก 0-100 เป็น 0-10

ตัวอย่างโปรแกรม 9.9 1 2 3 4 5 6 7 8 9

/* Map an analog value 10 bits(0 to 10230) to 8 bits (0 to 255) */ void setup() { pinMode(9,OUTPUT); } void loop() { int val = analogRead(0); //Read analog from A0(0 to 1023) val = map(val, 0, 1023, 0, 255); //Map function analogWrite(9, val); //Write analog (0 to 255) to Digital Pin9 }

- บรรทัดที่ 8 อ่านค่าแอนะล็อกท่ีขาพอร์ต Analog Pin0 ซึ่งจะได้ค่าท่ีเก็บในตัวแปร val เท่ากับ 10 บิต (0 ถึง 1023) - บรรทัดที่ 9 ใช้ฟังก์ชัน map( ) แปลงค่าในตัวแปร val จาก 0 ถึง 1023 เป็น 0 ถึง 255 - บรรทัดที่ 10 ส่งค่า val (0 ถึง 255) ออกท่ีขาพอร์ต Digital Pin9 เป็นสัญญาณ PWM

Page 40: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 374

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

9.3.6.4 ฟังก์ชัน random( ) เป็นฟังก์ชันส าหรับสุ่มค่าตัวเลขแบบเทียม (Pseudo-random numbers) โดยสามารถก าหนดค่าเริ่มต้น และค่าสูงสุดได้ รูปแบบ random(max) หรือ random(min,max) พารามิเตอร์ min คือ ค่าเริ่มต้น max คือ ค่าสูงสุด ตัวอย่าง random(500); //สุ่มค่าตัวเลขตั้งแต่ 0 ถึง 500 Random(10,300); //สุ่มค่าตัวเลขตั้งแต่ 10 ถึง 300 หมายเหตุ : การสุ่มค่าตัวเลขแบบเทียม (Pseudo-random numbers) หรือการสร้างบิตสุ่มแบบก าหนดได้ (Deterministic random bit generator: DRBG) เป็นขั้นตอนวิธีส าหรับใช้ในการสร้างล าดับของตัวเลขที่มีความใกล้เคียงกับคุณสมบัติของการสุ่ม ถึงแม้ว่าล าดับตัวเลขที่ได้จากข้ันตอนวิธีการสร้างเลขสุ่มเทียมนี้จะใกล้เคียงกับล าดับเลขสุ่มแท้จริงมากแค่ไหนแต่มันก็ไม่ได้เป็นล าดับตัวเลขแบบสุ่มที่แท้จริงเนื่องจากล าดับตัวเลขที่ได้ออกมาจากการสร้างเลขสุ่มเทียมทั้งหมดได้มาจากกลุ่มเล็กๆของค่าเริ่มต้นที่เราก าหนดให้เป็นตัวตั้งต้น (seed) ของการสร้างเลขสุ่มเทียม

9.3.6.5 ฟังก์ชัน randomSeed( ) เป็นฟังก์ชันก าหนดค่าเริ่มต้นที่ใช้ในการสุ่มค่าตัวเลขของฟังก์ชัน random( ) ซ่ึงเริ่มต้นสร้างตัวเลขสุ่ม ท าให้มันสามารถเริ่มจากจุดที่มันก าหนดในล าดับการสุ่ม โดยล าดับที่เกดิจากการสุ่มนี้จะมีขนาดยาวมาก และเป็นแบบเดียวกันเสมอ รูปแบบ randomSeed(seed) พารามิเตอร์ seed คือ ค่าเริ่มต้นส าหรับ pseudo-random sequence (unsigned long) ตัวอย่าง randomSeed(analogRead(0)); ตัวอย่างโปรแกรม 9.10

1 2 3 4 5 6 7 8 9

10 11 12

long randNumber; void setup() { Serial.begin(9600); randomSeed(analogRead(0)); } void loop() { randNumber = random(300); Serial.println(randNumber); delay(50); }

Page 41: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 375

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

- บรรทัดที่ 1 ประกาศตัวแปร randNumber ชนิด long - บรรทัดที่ 5 ใช้งานฟังก์ชัน randomSeed( ) โดยใช้ค่าเริ่มต้นจากค่าแอนะล็อกท่ีอ่านได้จาก ขาพอร์ต Analog Pin0 - บรรทัดที่ 9 สุ่มค่าตัวเลข 0 ถึง 300 เก็บค่าในตัวแปร randNumber

9.3.6.6 ฟังก์ชัน puleIn( ) เป็นฟังก์ชันอ่านสัญญาณพัลส์ (HIGH หรือ LOW) จากขาพอร์ต หากก าหนดเป็น HIGH

ในฟังก์ชัน pulseIn( ) จะรอให้ขาพอร์ตนั้นมีคา่ลอจิกเป็น HIGH ก่อนแล้วจึงเริ่มจับเวลา และรอให้ขาพอร์ตมีค่าลอจิกเป็น LOW จะหยุดการจับเวลา แล้วส่งค่ากลับเป็นความยาวของพัลส์ในหน่วย ไมโครวินาที และจะส่งค่ากลับมาเป็น 0 หากไม่มีสัญญาณพัลส์เข้ามาในเวลาที่ก าหนด การจับเวลาของฟังก์ชันนี้ ถูกก าหนดไว้อย่างชัดเจนและอาจเกิดข้อผิดพลาดได้ในพัลส์ที่ยาวเกินไป สามารถท างานได้ดีในช่วงความยาวพัลส์ที่ 10 ไมโครวินาที ถึง 3 นาที รูปแบบ pulseIn(pin, value) หรือ pulseIn(pin, value, timeout) พารามิเตอร์ pin คือ หมายเลขของขาที่ต้องการอ่านค่าพัลส์ value คือ ชนิดของพัลส์ที่ต้องการอ่าน เช่น HIGH หรือ LOW timeout (option) คือ เวลาเป็นไมโครวินาทีส าหรับหน่วงเวลาก่อนพัลส์จะเริ่มต้น ค่า เริ่มต้นเป็น 1 วินาที (unsigned long) การส่งค่ากลับ ขนาดของพัลส์ (ในหน่วยไมโครวินาที) หรือ 0 ถ้าหากไม่มีสัญญาณพัลส์เข้ามาภายใน เวลาที่ก าหนด (unsigned long)

ตัวอย่างโปรแกรม 9.11 1 2 3 4 5 6 7 8 9

10

int pin = 7; unsigned long duration; void setup() { pinMode(pin, INPUT); } void loop() { duration = pulseIn(pin, HIGH); }

- บรรทัดที่ 2 ประกาศตัวแปร duration ชนิด umsigned long - บรรทัดที่ 9 ใช้งานฟังก์ชัน pulseIn( ) โดยอ่านค่าคาบเวลา (duration) ของขาพอร์ต Digital Pin7 ที่มีค่าลอจิกเป็น HIGH

Page 42: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 376

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

9.3.6.7 ฟังก์ชัน shiftIn( ) เป็นฟังก์ชันส าหรับใช้ในการเลื่อนข้อมูลทีละ 1 บิต โดยสามารถก าหนดให้เริ่มจากบิตท่ีมี

นัยส าคัญมากสุด (ซ้ายสุด) หรือบิตที่มีนัยส าคัญน้อยสุด (ขวาสุด) แต่ละบิตจะมีการเลื่อนก็ต่อเมื่อสัญญาณ clock มีค่าเป็น HIGH บิตต่อไปจะอ่านค่าจากบิตก่อนหน้า ถ้าใช้งานอุปกรณ์ที่ถูกตั้งค่าโดยสัญญาณนาฬิกาที่ขอบขาข้ึน จะต้องท าให้สัญญาณนาฬิกาเป็น LOW ก่อนที่ใช้งานฟังก์ชัน shiftIn( ) ด้วยการใช้ฟังก์ชัน digitalWrite (clockPin,LOW) เพ่ิมเติม ฟังก์ชันนี้เป็นการใช้งานซอฟต์แวร์ Arduino ยังมีส่วนของฮาร์ดแวร์ด้วยซึ่งคือ SPI library ซึ่งท าให้ท างานได้รวดเร็วยิ่งขึ้นแต่ท างานได้กับบางขาเท่านั้น รูปแบบ byte incoming = shiftIn(dataPin, clockPin, bitOrder)

พารามิเตอร์ dataPin คือ ขาท่ีใช้งานเป็นอินพุตแต่ละบิต (จ านวนเต็ม) clockPin คือ ขาท่ีรับสัญญาณ clock เพ่ืออ่านค่าจาก dataPin bitOrder คือ ชุดค าสั่งสั่งที่ใช้เลื่อนบิต เช่น MSBFIRST (Most Significant Bit First) หรือ LSBFIRST (Least Significant Bit First) การส่งค่ากลับ ค่าท่ีอ่านได้ (เป็นไบต์)

9.3.6.8 ฟังก์ชัน shiftOut( ) เป็นฟังก์ชันส าหรับการเลื่อนไบต์ของข้อมูล 1 บิต เริ่มจากบิตที่มีส าคัญมากที่สุด หรือบิตที่มีความส าคัญน้อยสุด ในแต่ละบิตจะมีการเขียนค่าให้กับขาพอร์ต หลังจากมีการก าหนดสัญญาณนาฬิกาเพ่ือท าการตรวจสอบบิตนั้น หากมีการเรียกใช้งานอุปกรณ์ในขณะที่อุปกรณ์ถูกตั้งค่าเป็นสัญญาณนาฬิกาที่ขอบขาขึ้น ต้องท าการตรวจสอบสัญญาณนาฬิกาท่ีขาพอร์ตให้เป็น LOW ก่อนใช้งานฟังก์ชัน shiftOut( ) รูปแบบ shitfOut(dataPin,clockPin,bitOrder,value) พารามิเตอร์ dataPin คือ ขาท่ีมีการใช้งานเป็น output clockPin คือขาที่มีการรับค่าจาก dataPin bitOrder คือ ก าหนดการเลื่อนของบิต เช่น MSBFIRST or LSBFIRST value คือ ข้อมูลที่ต้องการเลื่อน ค่าส่งกลับ ไม่มี

9.3.7 ไฟล์ไลบรารีส าเร็จรูป (Library) นอกจากฟังก์ชันส าเร็จรูปแล้ว ผู้พัฒนาซอฟต์แวร์ Arduino IDE ได้สร้างไฟล์ไลบรารีส าเร็จรูปไว้ให้ใช้งานและติดตั้งมาพร้อมกับซอฟต์แวร์ Arduino IDE เพ่ือให้ง่ายและสะดวกต่อการใช้งาน รวมทั้งหากผู้ใช้ต้องการใช้ไฟล์ไลบรารีนอกเหนือจากที่มีให้ ก็สามารถเพ่ิมไฟล์ไลบรารีได้ หรือหากต้องการสร้างไฟล์ไลบรารีเองก็สามารถท าได้เช่นกัน ซึ่งไฟล์ไลบรารีส่วนมากเป็นไฟล์ส าหรับใช้งานเพ่ือควบคุมอุปกรณ์

Page 43: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 377

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

อินพุต เอาต์พุตที่มีการท างานซับซ้อน และยากส าหรับเขียนโปรแกรมควบคุม เช่น จอ LCD Module, เซ็นเซอร์, การสื่อสาร, การเชื่อมต่อกับอุปกรณ์แบบไร้สาย เป็นต้น ไฟล์ไลบรารีส าเร็จรูปจะเก็บไว้ในโฟลเดอร์ libraries ของซอฟต์แวร์ Arduino IDE ดังรูปที่ 9.34 ส่วนการเรียกใช้ไฟล์ไลบรารี แสดงดังรูปที่ 9.35

รูปที่ 9.34 ต าแหน่งจัดเก็บไฟล์ไลบรารี

รูปที่ 9.35 การเรียกใช้ไฟล์ไลบรารี

Page 44: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 378

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

จากรูปที่ 9.35 สามารถเรียกใช้งานไฟล์ไลบรารีได้จากแถบเมนู Sketch -->Include Library และเลือกไฟล์ไลบรารีที่ต้องการใช้งาน เช่น ต้องการใช้งานไฟล์ไลบรารี SoftwareSerial ก็เลือกท่ีรายการ และจะแสดงไฟล์ไลบรารีที่เชื่อมโยงในซอฟต์แวร์ Arduino IDE ด้วยค าสั่ง #include < > ดังรูปที่ 9.36

รูปที่ 9.36 การใช้งานไฟล์ไลบรารีในซอฟต์แวร์ Arduino IDE

9.4 การใช้งานไมโครคอนโทรลเลอร์ Arduino กับอุปกรณ์เอาตพ์ุตพ้ืนฐาน

การใช้งานไมโครคอนโทรลเลอร์ Arduino สามารถใช้ร่วมกับอุปกรณ์อินพุตและเอาต์พุตได้ทั้งแบบดิจิทัลและแอนะล็อก โดยมีฟังก์ชันส าเร็จรูปและไฟล์ไลบรารี สนับสนุนการใช้งาน ในเบื้องต้นนี้ขออธิบายการใช้งานไมโครคอนโทรลเลอร์ Arduino กับอุปกรณ์เอาต์พุตพ้ืนฐาน คือ ไดโอดเปล่งแสง (LED) และอุปกรณ์อินพุตพ้ืนฐาน คือ สวิตช์ (Switch) 9.4.1 การเชื่อมต่อขาพอร์ตของบอร์ด Arduino UNO กับ LED การเชื่อมต่อขาพอร์ตของบอร์ด Arduino UNO กับวงจร LED มีรูปแบบการต่อ 2 แบบ คือ 9.4.1.1 แบบควบคุมการท างานด้วยการจ่ายกระแสออก (Source current) 9.4.1.2 แบบควบคุมการท างานด้วยการรับกระแสเข้า (Sink current) รูปแบบการต่อขาพอร์ตของบอร์ด Arduino UNO กับวงจร LED แสดงดังรูปที่ 9.37

Page 45: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 379

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

รูปที่ 9.37 การต่อขาพอร์ตของบอร์ด Arduino UNO กับวงจร LED

จากรูปที่ 9.37 การควบคุมการติดดับของ LED ที่ต่อแบบ Source Current หากต้องการให้ LED13 ติดสว่างต้องส่งค่าลอจิก HIGH และถ้าต้องการให้ LED13 ดับ ต้องส่งค่าลอจิก LOW ที่ขาพอร์ต Digital Pin13 ส่วนการควบคุมการติดดับของ LED ที่ต่อแบบ Sink Current ถ้าต้องการให้ LED2 ติดสว่างต้องส่งค่าลอจิก LOW และถ้าต้องการให้ LED2 ดับ ต้องส่งค่าลอจิก HIGH ที่ขาพอร์ต Digital Pin2

9.4.2 การเขียนโปรแกรมควบคุม LED อุปกรณ์เอาต์พุต LED สามารถเชื่อมต่อและควบคุมผ่านขาพอร์ตของบอร์ด Arduino UNO ได้แก่ขาพอร์ต Digital Pin0 ถึง Digital Pin13 แต่ก็สามารถน าขาพอร์ต Anolog pin0 ถึง Analog Pin5 เป็นขา Digital Pin ได้โดยล าดับเป็น Digital Pin14 ถึง Digital Pin19 เขียนโปรแกรมการควบคุมการท างานของ LED เกี่ยวข้องกับฟังก์ชันต่อไปนี้ - ฟังก์ชัน pinMode( ) ส าหรับก าหนดหน้าที่ขาพอร์ต - ฟังก์ชัน digitalWrite( ) ส าหรับส่งค่าลอจิกออกขาพอร์ตเพ่ือควบคุมให้ LED ติด-ดับ (ดังตัวอย่างโปรแกรม 9.1 และ 9.2) - ฟังก์ชัน analogWrite( ) ส าหรับส่งค่า PWM ออกขาพอร์ตเพ่ือควบคุมความสว่างของ LED (ดังตัวอย่างโปรแกรม 9.3)

Page 46: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 380

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

9.5 การใช้งานไมโครคอนโทรลเลอร์ Arduino กับอุปกรณ์อินพุตพื้นฐาน

9.5.1 การเชื่อมต่อขาพอร์ตของบอร์ด Arduino UNO กับวงจรสวิตช์ การเชื่อมต่อขาพอร์ตของบอร์ด Arduino UNO กับวงจรสวิตช์ มีรูปแบบการต่อ 2 แบบ คือ 9.5.1.1 แบบพูลอัป (Pull-up) 9.5.1.2 แบบพูลดาวน์ (Pull-down รูปแบบการต่อขาพอร์ตของบอร์ด Arduino UNO กับวงจรสวิตช์ แสดงดังรูปที่ 9.38

รูปที่ 9.38 การต่อขาพอร์ตของบอร์ด Arduino UNO กับวงจรสวิตช ์

จากรูปที่ 9.38 ค่าลอจิกท่ีเกิดจากการกดสวิตช์ของการต่อแบบ Pull-up คือ หากไม่กดสวิตช ์SW1 ที่ขาพอร์ต Ditgital pin12 จะมีค่าลอจิกเป็น HIGH และหากดสวิตช์ SW1 จะมีค่าลอจิกเป็น LOW ส่วนการต่อแบบ Pull-down คือ หากไม่กดสวิตช์ SW2 ที่ขาพอร์ต Ditgital pin2 จะมีค่าลอจิกเป็น LOW และหากกดสวิตช์ SW2 จะมีค่าลอจิกเป็น LOW เนื่องจากซอฟต์แวร์ Arduino IDE มีฟังก์ชันที่สามารถก าหนดให้มีการต่อตัวต้านทาน Pull-up ภายในด้วยการใช้ค าสั่งในฟังก์ชัน pinMode( ) ตัวอย่างเช่น การต่อวงจรสวิตช์แบบ Pull-up ที่ขาพอร์ต Digital Pin12 สามารถก าหนดค่าในฟังก์ชัน pinMode( ) ได้เป็น pinMode(12,INPUT_PULLUP); คือก าหนดขาพอร์ต Digital Pin12 เป็นการท าหน้าที่เป็นพอร์ตอินพุตแบบดิจิทัล และให้มีการต่อตัวต้านทาน Pull-up ภายในด้วย ท าให้การต่อวงจรไม่ต้องมีตัวต้านทาน Pull-up ดังรูปที่ 9.39

Page 47: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 381

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

รูปที่ 9.39 การต่อขาพอร์ตของบอร์ด Arduino UNO กับวงจรสวิตช์แบบ Pull-up ภายใน

9.5.2 การเขียนโปรแกรมรับค่าลอจิกจากสวิตช์ สวิตช์เป็นอุปกรณ์อินพุตแบบดิจิทัล สามารถเชื่อมต่อผ่านขาพอร์ตของบอร์ด Arduino UNO ได้แก่ขาพอร์ต Digital Pin0 ถึง Digital Pin13 แต่ก็สามารถน าขาพอร์ต Analog pin0 ถึง Analog Pin5 เป็นขา Digital Pin ได้โดยล าดับเป็น Digital Pin14 ถึง Digital Pin19 การเขียนโปรแกรมรับค่าลอจิกจากการกดสวิตช์เกี่ยวข้องกับฟังก์ชันต่อไปนี้ - ฟังก์ชัน pinMode( ) ส าหรับก าหนดหน้าที่ขาพอร์ต - ฟังก์ชัน digitalRead( ) ส าหรับอ่านค่าลอจิกที่ขาพอร์ต (ดังตัวอย่างโปรแกรม 9.2)

สรุปเนื้อหาสาระส าคัญ

ไมโครคอนโทรลเลอร์ Arduino เป็นไมโครคอนโทรลเลอร์ที่น าชิปไมโครคอนโทรลเลอร์ตระกูล AVR ของบริษัท Atmel มาพัฒนาสร้างเป็นบอร์ด Arduino รุ่นต่าง ๆ ให้พร้อมน าไปใช้งาน โดยมีโปรแกรมบูทโหลดเดอร์ (Boot loader Firmware) ควบคุมรีจิสเตอร์ภายในและเป็นเครื่องโปรแกรมและได้พัฒนาซอฟต์แวร์ Arduino IDE ส าหรับพัฒนาโปรแกรมด้วยภาษาซี (C/C++) ที่มีความสามารถสูง มีฟังก์ชันส าเร็จรูป เช่น ฟังก์ชันเกี่ยวกับใช้งานขาพอร์ต, ฟังก์ชันเกี่ยวกับเวลา, ฟังก์ชันเกี่ยวกับการสื่อสารผ่านพอร์ตอนุกรม, ฟังก์ชันเกี่ยวกับการอินเตอร์รัพท์ และฟังก์ชันพิเศษ มีไฟล์ ไลบรารีส าเร็จรูปส าหรับการใช้งานร่วมกับอุปกรณ์ที่มีการท างานซับซ้อน ซึ่งท าให้การเขียนโปรแกรมควบคุมท าได้ง่ายและสะดวกมาก และยังมีการเปิดเผยข้อมูลทุกอย่างทั้งด้านฮาร์ดแวร์และซอฟต์แวร์เพ่ือให้สามารถน าไปพัฒนาต่อยอดได้ ท าให้ง่ายและสะดวก จึงได้รับความนิยมอย่างมากในด้านการศึกษาและน าไปประยุกต์ใช้งาน

Page 48: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 382

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

บรรณานุกรม

อินโนเวตีฟ เอ็กเพอริเมนต์. POP-BOT XT คู่มือการสร้างและพัฒนาโปรแกรมควบคุมหุ่นยนต์อัตโนมัติ ด้วยภาษา C/C++ กับ Arduino. อินโนเวตีฟเอ็กเพอริเมนต์, กรุงเทพฯ. เอกชัย มะการ. เรียนรู้ เข้าใจ ใช้งานไมโครคอนโทรลเลอร์ตระกูล AVR ด้วย Arduino. อีทีที, กรุงเทพฯ, 2552. Arduino. [ออนไลน์]. เข้าถึงได้จาก : https://www.arduino.cc/ (13 มกราคม 2560). Arduino IDE. [ออนไลน์]. เข้าถึงได้จาก : https://www.arduino.cc/en/Main/Software (13 มกราคม 2560).

Arduino Language Reference. [ออนไลน์]. เข้าถึงได้จาก : https://www.arduino.cc/

reference/en/ (13 มกราคม 2560). Arduino UNO R3. [ออนไลน์]. เข้าถึงได้จาก : https://store.arduino.cc/usa/arduino-uno-rev3 (13 มกราคม 2560). Arduino UNO SMD. [ออนไลน์]. เข้าถึงได้จาก : https://www.arduino.cc/en/Main/ ArduinoBoardUnoSMD (13 มกราคม 2560). Contribute to the Arduino Software. [ออนไลน์]. เข้าถึงได้จาก : https://www.arduino.cc/en/ Main/Donate (13 มกราคม 2560). i-Duino UNO. [ออนไลน์]. เข้าถึงได้จาก : www.inexglobal.com/products.php?pcode=iduino (15 มกราคม 2560). Team Arduino. [ออนไลน์]. เข้าถึงได้จาก : https://www.emaze.com/@AORZQWTCO/arduino (13 มกราคม 2560).

Page 49: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 383

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

แบบฝึกหัดหนว่ยที ่ 9 ค าชี้แจง 1. แบบฝึกหัดมีทั้งหมด 2 ตอน ประกอบด้วยตอนท่ี 1 และตอนที่ 2 (20 คะแนน) 2. แบบฝึกหัดตอนที่ 1 เป็นค าถามแบบจับคู ่ มีทั้งหมด 20 ข้อ (10 คะแนน) 3. แบบฝึกหัดตอนที่ 2 เป็นค าถามแบบเลือกตอบ มีทั้งหมด 10 ข้อ (10 คะแนน) ตอนที่ 1 ค าชี้แจง ให้จับคูข่้อความที่สัมพันธ์กันและเขียนตัวอักษร a ถึง t หน้าข้อความแต่ละข้อ

1. หัวหน้าทีมพัฒนาไมโครคอนโทรลเลอร์ Arduino a. www.arduino.cc 2. จุดเด่นที่ส าคัญของไมโครคอนโทรลเลอร์ Arduino b. digitalWrite( )

3. ภาษาท่ีใช้เขียนโปรแกรมควบคุมไมโครคอนโทรลเลอร์ Arduino c. Pin3,5,6,9,10,11

4. บอร์ดของไมโครคอนโทรลเลอร์ Arduino ที่ได้รับความนิยมมาก d. void loop( ) 5. บอร์ดต่อพ่วงส าเร็จรูปของไมโครคอนโทรลเลอร์ Arduino e. analogWrite( )

6. เวปไซต์ส าหรับค้นคว้าและเรียนรู้ไมโครคอนโทรลเลอร์ Arduino f. Massimo Banzi

7. ไมโครคอนโทรลเลอร์ตระกูล AVR ของบอร์ด Arduino UNO g. digitalRead( ) 8. ขาพอร์ต Digital I/O ของบอร์ด Arduino UNO h. Arduino Shileds

9. ขาพอร์ต Analog Input ของบอร์ด Arduino UNO i. ฟังก์ชัน PinMode 10. ขาพอร์ต Digital I/O ของบอร์ด Arduino UNO ที่เป็น

PWM Output

j. delay( )

k. Open Source 11. ขาพอร์ตบอร์ด Arduino UNO ส าหรับสื่อสารข้อมูลแบบอนุกรม l. Pin0-Pin13 12. ฟังก์ชันที่มีการวนลูปการท างานเหมือนค าสั่ง while(1) m. interrupt( )

13. ฟังก์ชันก าหนดหน้าที่ขาพอร์ตของบอร์ด Arduino (Digital Pin) n. ATmega328 14. ฟังก์ชันส่งค่าระดับแรงดันควบคุมด้วยค่าความกว้างของสัญญาณ

แบบ PWM ออกที่ขาพอร์ต

o. Arduino UNO R3

p. C/C++ 15. ฟังก์ชันอ่านค่าสถานะลอจิกของขาพอร์ตอินพุตแบบดิจิทัล

(Input Digital Pin) q. Pin0,1

r. Serial.print ( ) 16. ฟังก์ชันส่งค่าลอจิกออกท่ีขาพอร์ตเอาต์พุตแบบดิจิทัล (Output

Digital Pin) เพ่ือควบคุมการท างานของอุปกรณ์ s. PinA0-PinA5

t. Serial.begin( ) 17. ฟังก์ชันหน่วงเวลาการท างานในหน่วยมิลลิวินาที (millisecond) 18. ฟังก์ชันก าหนดค่าอัตราของการรับส่งข้อมูลอนุกรม

19. ฟังก์ชันส่งข้อมูลออกทางพอร์ตอนุกรม

20. ฟังก์ชันเปิดใช้งานการอินเตอร์รัพท์

Page 50: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 384

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

ตอนที่ 2 ค าชี้แจง ให้นักเรียนท าเครื่องหมายกากบาท (X) ลงบนค าตอบที่ถูกต้องที่สุด 1. ข้อใดไม่ใช่คุณสมบัติที่เกี่ยวกับไมโครคอนโทรลเลอร์ Arduino ก. เป็น Open Source ที่เปิดเผยข้อมูลส าหรับนักพัฒนาโปรแกรม ข. พัฒนาเป็นบอร์ด Arduino ส าเร็จรูปพร้อมใช้งาน ค. ใช้ซอฟต์แวร์ใด ๆ ส าหรับเขียนโปรแกรมควบคุมก็ได้ ง. มีฟังก์ชันและไลบรารีส าเร็จรูปให้ใช้งานได้สะดวก 2. ซอฟต์แวร์ส าหรับเขียนโปรแกรมควบคุมไมโครคอนโทรลเลอร์ Arduino คือข้อใด ก. Audition IDE ข. Automation IDE ค. Altium Designer IDE ง. Arduino IDE 3. ข้อใดไม่ใช่คุณสมบัติของบอร์ด Arduino UNO ก. ใช้ไมโครคอนโทรลเลอร์ตระกูล ARM เป็นตัวประมวลผล ข. เชื่อมต่อกับคอมพิวเตอร์ผ่านพอร์ต USB ค. สามารถโปรแกรมข้อมูลโดยไม่ต้องใช้เครื่องโปรแกรม ง. มีวงจรสื่อสารแบบอนุกรมในบอร์ด 4. ข้อใดใช้ฟังก์ชันก าหนดหน้าที่ขาพอร์ตถูกต้อง ก. pinmode(13, Output); ข. Pinmode(13, Output); ค. PinMode(13,Output); ง. pinMode(13,OUTPUT); 5. ขาพอร์ตใดของ Arduino UNO ใช้ในการสื่อสารข้อมูลแบบอนุกรม ก. ขาพอร์ต Digital Pin0 และ Digital Pin1 ข. ขาพอร์ต Digital Pin3 และ Digital Pin13 ค. ขาพอร์ต Analog Pin0 และ Analog Pin1 ง. ขาพอร์ต Analog Pin4 และ Analog Pin5

Page 51: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 385

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

6. ขาพอร์ตใดของ Arduino UNO สามารถก าหนดให้มีการต่อตัวต้านทาน Pull-up ภายในได้ ก. ขาพอร์ต RE4 ข. ขาพอร์ต Digital Pin2 ค. ขาพอร์ต Analog Pin0 ง. ขาพอร์ต Digital Pin25 7. หากต้องการควบคุมความสว่างของไดโอดเปล่งแสง (LED) นักเรียนจะต่อ LED กับขาพอร์ตใด ก. ขาพอร์ต Digital Pin1 ข. ขาพอร์ต Digital Pin2 ค. ขาพอร์ต Digital Pin3 ง. ขาพอร์ต Digital Pin4 8. ข้อใดเป็นความหมายของค าสั่ง digitalWrite(5, HIGH); ก. รับค่าระดับแรงดันเข้าที่ขาพอร์ต Digital Pin5 ข. รับค่าลอจิก HIGH เข้าท่ีขาพอร์ต Digital Pin5 ค. ส่งค่าระดับแรงดันออกที่ขาพอร์ต Digital Pin5

ง. ส่งค่าลอจิก HIGH ออกท่ีขาพอร์ต Digital Pin5 9. ข้อใดเป็นหน้าที่ของ Serial Monitor ก. แสดงข้อมูลผลการตรวจสอบค าสั่งโปรแกรม (Verify) ข. แสดงข้อมูลผลการโปรแกรมค าสั่ง (Upload) ค. แสดงข้อมูลการสื่อสารผ่านพอร์ตอนุกรม ง. แสดงข้อมูลของต าแหน่งการจัดเก็บไฟล์สเก็ตช์

10. ข้อใดเป็นการท างานของแถบเครื่องมือ ก. การสร้างไฟล์สเก็ตช์ใหม่ (New) ข. การจัดเก็บไฟล์สเก็ตช์ (Save) ค. การตรวจสอบค าสั่งโปรแกรม (Verify) ง. การโปรแกรมค าสั่ง (Upload)

Page 52: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 386

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

ใบปฏิบัติงานที่ 9 หน่วยที่ 9

ชื่อวิชา ไมโครคอนโทรลเลอร์ รหัสวิชา 2105-2105 จ านวน 6 ชั่วโมง เรื่อง การใช้งานไมโครคอนโทรลเลอร์ Arduino กับอุปกรณ์อินพุต เอาต์พุตพ้ืนฐาน

ค าชี้แจง ให้นักเรียนแบ่งกลุ่มตามความสมัครใจ กลุ่มละ 2 คน และท าการฝึกตามใบปฏิบัติงานที่ 9 เรื่อง การใช้งานไมโครคอนโทรลเลอร์ Arduino กับอุปกรณ์อินพุต เอาต์พุตพ้ืนฐาน

จุดประสงค์เชิงพฤติกรรม 1. ต่อขาพอร์ตของบอร์ด Arduino UNO กับวงจรแสดงผลแบบ LED ตามแบบวงจรได้ 2. ต่อขาพอร์ตของบอร์ด Arduino UNO กับวงจรสวิตช์ตามแบบวงจรได้ถูกต้อง 4. เขียนโปรแกรมควบคุมการแสดงผลของ LED ตามรูปแบบที่ก าหนดได้ 5. เขียนโปรแกรมรบัค่าจากสวิตช์ควบคุมการแสดงผลของ LED ตามรูปแบบที่ก าหนดได้ 6. เขียนโปรแกรมควบคุมความสว่างของ LED ตามรูปแบบที่ก าหนดได้

อุปกรณ์ประกอบการปฏิบัติงาน 1. เครื่องคอมพิวเตอร์พร้อมซอฟต์แวร์ Arduino IDE จ านวน 1 เครื่อง 2. แผงวงจร NX-887 จ านวน 1 แผง 3. บอร์ด Arduino UNO จ านวน 1 บอร์ด 4. แหล่งจ่ายไฟ DC (DC Adapter 12 Vdc) จ านวน 1 เครื่อง 5. สาย USB แบบขั้วต่อ Type-A, Type-B mini จ านวน 1 เส้น 6. สายต่อวงจร จ านวน 15 เส้น

ข้อควรระวัง 1. การต่อแหล่งจ่ายไฟตรง (DC 12 Vdc) กับ DC Input 12 Vdc ของแผงวงจร NX-887 และการเชื่อมต่อสายแรงดันไฟเลี้ยงบอร์ด Arduino UNO (+5V, Ground) ต้องตรวจสอบขั้วให้ถูกต้อง หากผิดขั้วจะท าให้ไมโครคอนโทรลเลอร์เสียหายได้ 2. การต่อวงจรบนแผงวงจร NX887 ต้องให้ Power Switch อยู่ในต าแหน่ง OFF 3. การต่อสาย mini-USB กับบอร์ด Arduino UNO และการต่อวงจรต้องต่อให้แน่น หากไม่แน่นจะท าให้การทดลองผิดพลาดได้ 4. หากมีข้อสงสัยให้สอบถามครูผู้สอน

Page 53: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 387

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

ขั้นตอนการปฏิบัติงาน ปฏิบัติงานที่ 9.1 การเขียนโปรแกรมควบคุมการติด-ดับของ LED

1. เตรียมอุปกรณ์ประกอบการปฏิบัติงานตามรายการที่ก าหนดให้ 2. ต่อวงจรพอร์ตของบอร์ด Arduino UNO กับวงจรแสดงผลแบบ LED ของแผงวงจร NX-887

ตามวงจรรูปที่ 9.40

(ก) วงจรพอร์ตของบอร์ด Arduino UNO กับวงจร LED

(ข) การต่อวงจรพอร์ตของบอร์ด Arduino UNO กับวงจร LED ของแผงวงจร NX-887 รูปที่ 9.40 การต่อวงจรพอร์ตของบอร์ด Arduino UNO กับวงจร LED

Page 54: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 388

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

3. เชื่อมต่อบอร์ด Arduino UNO กับเครื่องคอมพิวเตอร์ด้วยสาย mini-USB เปิดใช้งาน ซอฟต์แวร์ Arduino IDE ตั้งค่า Board : และ Port: ที่แถบเมนู Tools และสร้างไฟสเก็ตช์ชื่อ Lab9_1 4. เขียนค าสั่งภาษาซีตามค าสั่งโปรแกรม Lab9_1

โปรแกรม Lab9_1 1 2 3 4 5 6 7 8

#define LED0 2 void setup() { pinMode(LED0,OUTPUT); //Digital Pin2 as Output } void loop() { digitalWrite(LED0,HIGH); delay(500); //LED0 on and delay 500 ms digitalWrite(LED0,LOW); delay(500); //LED0 off and delay 500 ms }

อธิบายโปรแกรม : โปรแกรมควบคุม LED0 ที่ต่อกับขาพอร์ต Digital Pin 2 ติดกระพริบ

5. ท าการคอมไพล์ และอัปโหลดไฟล์สเก็ตช์ลงบอร์ด Arduino UNO 6. เลื่อน Power Switch ON เพ่ือจ่ายแรงดันไฟเลี้ยงวงจร สังเกตการแสดงผลของวงจร LED0 บนแผงวงจร NX-887 ผลการทดลอง :

งานที่มอบหมายหลังปฏิบัติงานที่ 9.1 1. ศึกษาชุดค าสั่งโปรแกรมและเขียนโปรแกรมควบคุมให้ LED0 และ LED1 ติดกระพริบ

สลับกัน ดังตาราง 9.4 และบันทึกค าสั่งทั้งหมดลงในตาราง (2 คะแนน)

ตาราง 9.4 โปรแกรมควบคุมให้ LED0 และ LED1 ติดกระพริบสลับกัน การท างาน LED1 LED0

การท างานในฟังก์ชัน loop LED0 และ LED1 ติดกระพริบสลับกัน (ค่าdelay 500 ms)

ค าสั่ง :

Page 55: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 389

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

ปฏิบัติงานที่ 9.2 การเขียนโปรแกรมควบคุมการติด-ดับของ LED 8 ดวง แบบที่ 1 1. สร้างไฟล์สเก็ตช์ชื่อ Lab9_2 และเขยีนค าสั่งภาษาซีตามค าสั่งโปรแกรม Lab9_2 โปรแกรม Lab9_2

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

#define LED0 2 #define LED1 3 #define LED2 4 #define LED3 5 #define LED4 6 #define LED5 7 #define LED6 8 #define LED7 9 void setup() { pinMode(LED0,OUTPUT); //Digital Pin2,3,4,5,6,7,8,9 as Output pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT); pinMode(LED3,OUTPUT); pinMode(LED4,OUTPUT); pinMode(LED5,OUTPUT); pinMode(LED6,OUTPUT); pinMode(LED7,OUTPUT); } void loop() { digitalWrite(LED0,HIGH); // LED0 on digitalWrite(LED7,LOW); // LED7 off delay(500); digitalWrite(LED0,LOW); // LED0 off digitalWrite(LED1,HIGH); // LED1 on delay(500); digitalWrite(LED0,LOW); // LED0 off digitalWrite(LED1,LOW); // LED1 off digitalWrite(LED2,HIGH); // LED2 on delay(500); digitalWrite(LED0,LOW); // LED0 off digitalWrite(LED1,LOW); // LED1 off digitalWrite(LED2,LOW); // LED2 off digitalWrite(LED3,HIGH); // LED3 on delay(500); digitalWrite(LED0,LOW); // LED0 off digitalWrite(LED1,LOW); // LED1 off digitalWrite(LED2,LOW); // LED2 off digitalWrite(LED3,LOW); // LED3 off digitalWrite(LED4,HIGH); // LED4 on delay(500); digitalWrite(LED0,LOW); // LED0 off digitalWrite(LED1,LOW); // LED1 off digitalWrite(LED2,LOW); // LED2 off digitalWrite(LED3,LOW); // LED3 off digitalWrite(LED4,LOW); // LED4 off digitalWrite(LED5,HIGH); // LED5 on delay(500); digitalWrite(LED0,LOW); // LED0 off digitalWrite(LED1,LOW); // LED1 off digitalWrite(LED2,LOW); // LED2 off

Page 56: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 390

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

โปรแกรม Lab9_2 (ต่อ) 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65

digitalWrite(LED3,LOW); // LED3 off digitalWrite(LED4,LOW); // LED4 off digitalWrite(LED5,LOW); // LED5 off digitalWrite(LED6,HIGH); // LED6 on delay(500); digitalWrite(LED0,LOW); // LED0 off digitalWrite(LED1,LOW); // LED1 off digitalWrite(LED2,LOW); // LED2 off digitalWrite(LED3,LOW); // LED3 off digitalWrite(LED4,LOW); // LED4 off digitalWrite(LED5,LOW); // LED5 off digitalWrite(LED6,LOW); // LED6 off digitalWrite(LED7,HIGH); // LED7 on delay(500); }

อธิบายโปรแกรม : โปรแกรมควบคุม LED0-LED7 ติดทีละดวง จาก LED0 ไป LED7 แบบวนลูป

2. ท าการคอมไพล์ และอัปโหลดไฟล์สเก็ตช์ลงบอร์ด Arduino UNO 3. เลื่อน Power Switch ON เพ่ือจ่ายไฟเลี้ยงวงจร สังเกตการแสดงผลของวงจร LED0 บนแผงวงจร NX-887 ผลการทดลอง :

ปฏิบัติงานที่ 9.3 การเขียนโปรแกรมควบคุมการติด-ดับของ LED 8 ดวง แบบที่ 2 1. สร้างไฟล์สเก็ตช์ชื่อ Lab9_3 และเขียนค าสั่งภาษาซีตามค าสั่งโปรแกรม Lab9_3

โปรแกรม Lab9_3 1 2 3 4 5 6 7 8 9

10 11 12 13

Unsigned char ledPin[ ]={2,3,4,5,6,7,8,9}; void setup() { for(int i=0;i<8;i++) pinMode(ledPin[i],OUTPUT);//Digital Pin2,3,4,5,6,7,8,9 as Output } void loop() { for(int j=0;j<8;j++) { digitalWrite(ledPin[j],HIGH); //LED0 … LED7 on delay(500); digitalWrite(ledPin[j],LOW); //LED0 … LED7 0ff } }

อธิบายโปรแกรม : โปรแกรมควบคุม LED0-LED7 ติดทีละดวง จาก LED0 ไป LED7 แบบวนลูป โดยใช ้การวนลูปแบบ for( )

Page 57: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 391

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

2. ท าการคอมไพล์ และอัปโหลดไฟล์สเก็ตช์ลงบอร์ด Arduino UNO 3. เลื่อน Power Switch ON เพ่ือจ่ายไฟเลี้ยงวงจร สังเกตการแสดงผลของวงจร LED0 บนแผงวงจร NX-887 และบันทึกผล ผลการทดลอง :

งานที่มอบหมายหลังปฏิบัติงานที่ 9.3 1. ศึกษาชุดค าสั่งโปรแกรมและเขียนโปรแกรมควบคุม LED0-LED7 ติดทีละดวง จาก LED7 ไป LED0 แบบวนลูป โดยใช้การวนลูปแบบ for( ) ดังตาราง 9.5 (3 คะแนน) 2. และบันทึกค าสั่งในฟังก์ชัน loop ลงในตาราง 9.5

ตาราง 9.5 เขียนโปรแกรมควบคุม LED0-LED7 ติดทีละดวง จาก LED7 ไป LED0 แบบวนลูป การท างาน LED7 LED6 LED5 LED4 LED3 LED2 LED1 LED0

โปรแกรมควบคุม LED0-LED7 ติดทีละดวง จาก LED7 ไป LED0 แบบวนลูป

เงื่อนไขการท างาน = ติด = ดับ และค่า delay 500 ms

ค าสั่งในฟังก์ชัน loop :

Page 58: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 392

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

ปฏิบัติการที่ 9.4 การเขียนโปรแกรมรับค่าลอจิกจากสวิตช์เพ่ือควบคุมการแสดงผลของ LED แบบที่ 1 1. ต่อวงจรพอร์ตของบอร์ด Arduino UNO กับวงจรสวิตช์และวงจรแสดงผลแบบ LED ของ

แผงวงจร NX-887 ตามวงจรรูปที่ 9.41

(ก) วงจรพอร์ตของบอร์ด Arduino UNO กับวงจรสวิตช์และวงจรแสดงผลแบบ LED

(ข) การต่อวงจรพอร์ตของบอร์ด Arduino UNO กับวงจรสวิตช์และวงจรแสดงผลแบบ LED ของ แผงวงจร NX-887

รูปที่ 9.41 การต่อวงจรพอร์ตของบอร์ด Arduino UNO กับวงจรสวิตช์และวงจร LED

2. สร้างไฟล์สเก็ตช์ชื่อ Lab9_4 และเขียนค าสั่งภาษาซีตามโปรแกรม Lab9_4 3. ท าการคอมไพล์ และอัปโหลดไฟล์ลงบอร์ด Arduino UNO

Page 59: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 393

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

โปรแกรม Lab9_4 1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19 20 21

#define SW1 10 #define SW2 11 Unsigned char ledPin[ ]={2,3,4,5,6,7,8,9}; void setup() { pinMode(SW1,INPUT); pinMode(SW2,INPUT); for(int i=0;i<8;i++) pinMode(ledPin[i],OUTPUT);//Digital Pin2,3,4,5,6,7,8,9 as Output } void loop() { if(digitalRead(SW1)==LOW) //SW1 Press { delay(10); digitalWrite(2,HIGH); //LED0 on } if(digitalRead(SW2)==LOW) //SW2 Press { delay(10); digitalWrite(2,LOW); //LED0 off } }

อธิบายโปรแกรม : โปรแกรมรับค่าลอจิกจากสวิตช์ SW1 และ SW2 ควบคุมการติด-ดับของ LED0 (Digital Pin2) โดยเมื่อกด SW1 ท าให้ LED0 ติด เมื่อกด SW2 ท าให้ LED0 ดับ

4. เลื่อน Power Switch ON เพ่ือจ่ายไฟเลี้ยงให้วงจร ทดลองกดสวิตช์ SW1 และสวิตช์ SW2 สังเกตการแสดงผลของ LED0 บันทึกผลการทดลอง ผลการทดลอง :

ปฏิบัติการที่ 9.5 การเขียนโปรแกรมรับค่าลอจิกจากสวิตช์เพ่ือควบคุมการท างานของ LED แบบที่ 2 1. สร้างไฟล์สเก็ตช์ชื่อ Lab9_5 และเขียนค าสั่งภาษาซีตามโปรแกรม Lab9_5 โปรแกรม Lab9_5

1 2 3 4 5 6 7 8 9

10 11

#define SW1 10 #define SW2 11 boolean SW1_State,SW2_State; boolean LED0_State=LOW,LED1_State=LOW ; unsigned char ledPin[ ]={2,3,4,5,6,7,8,9}; void setup() { pinMode(SW1,INPUT); pinMode(SW2,INPUT); for(int i=0;i<8;i++) pinMode(ledPin[i],OUTPUT); }

Page 60: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 394

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

โปรแกรม Lab9_5 (ต่อ) 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

void loop() { boolean SW1_Press = digitalRead(SW1); boolean SW2_Press = digitalRead(SW2); if(SW1_Press==LOW && SW1_State==HIGH) //SW1 Press and check state { delay (10); if(SW1_Press==LOW) LED0_State=!LED0_State; //Check SW1 Press } digitalWrite(2,LED0_State); //LED0 on/off SW1_State = SW1_Press; if(SW2_Press==LOW && SW2_State==HIGH) //SW2 Press and check state { delay (10); if(SW2_Press==LOW) LED1_State=!LED1_State; //Check SW2 Press } digitalWrite(3,LED1_State); //LED1 on/off SW2_State = SW2_Press; }

อธิบายโปรแกรม : โปรแกรมรับค่าลอจิกจากสวิตช์ SW1 ควบคุมการติด-ดับของ LED0 (Digital Pin2) โดยเมื่อกด SW1 ท าให้ LED0 ติด เมื่อกด SW1 อีกครั้งท าให้ LED0 ดับ และรับค่าลอจิกจากสวิตช์ SW2 ควบคุมการติด-ดับของ LED1 (Digital Pin3) โดยเมื่อกด SW2 ท าให้ LED1 ติด เมื่อกด SW2 อีกครั้งท าให้ LED1 ดับ ซึ่งสวิตช์จะท างานในลักษณะ Toggle

2. ท าการคอมไพล์ และอัปโหลดไฟล์ลงบอร์ด Arduino UNO 3. เลื่อน Power Switch ON จ่ายไฟเลี้ยงให้วงจร ทดลองกดสวิตช์ SW1 สังเกตการแสดงผลของ LED0 และทดลองกดสวิตช์ SW2 สังเกตการแสดงผลของ LED1 บันทึกผลการทดลอง ผลการทดลอง :

งานที่มอบหมายหลังปฏิบัติงานที่ 9.5 1. ศึกษาชุดค าสั่งโปรแกรมและเขียนโปรแกรมรับค่าจากสวิตช์ SW1 ควบคุมการท างานของ LED0-LED3 และรับค่าจากสวิตช์ SW2 ควบคุมการท างานของ LED4-LED7 มีเงื่อนไขการท างานตามท่ีก าหนดให้ในตารางที่ 9.6 ทดสอบการท างานและบันทึกค าสั่งโปรแกรมท้ังหมด ลงในตาราง (2 คะแนน)

Page 61: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 395

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

ตาราง 9.6 โปรแกรมรับค่าสวิตช์ SW1 และ SW2 ควบคุมการท างานของ LED0-LED7 แบบ Toggle การท างาน LED7 LED6 LED5 LED4 LED3 LED2 LED2 LED0

กดสวิตช์ SW1 แบบ Toggle ควบคุม LED0-LED3

กดสวิตช์ SW2 แบบ Toggle ควบคุม LED4-LED7

เงื่อนไขการท างาน = ติด = ดับ

ค าสั่ง :

Page 62: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 396

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

ตาราง 9.6 (ต่อ)

ค าสั่ง :

Page 63: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 397

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

ปฏิบัติการที่ 9.6 การเขียนโปรแกรมรับค่าลอจิกจากสวิตช์เพ่ือควบคุมการท างานของ LED 8 ดวง 1. สร้างไฟล์สเก็ตช์ชื่อ Lab9_6 และเขียนค าสั่งภาษาซีตามโปรแกรม Lab9_6 2. ท าการคอมไพล์ และอัปโหลดไฟล์ลงบอร์ด Arduino UNO โปรแกรม Lab9_6

1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

#define SW1 10 #define SW2 11 unsigned char ledPin[ ]={2,3,4,5,6,7,8,9}; void setup() { for(int i=0;i<8;i++) pinMode(ledPin[i],OUTPUT); } void loop() { boolean SW1_Press = digitalRead(SW1); boolean SW2_Press = digitalRead(SW2); if(SW1_Press==LOW) { delay (10); if(SW1_Press==LOW) { for (int pin=2;pin<10;pin++) { digitalWrite(pin,HIGH); // LED on delay(500); digitalWrite(pin,LOW); // LED off } } } }

อธิบายโปรแกรม : โปรแกรมรับค่าลอจิกจากสวิตช์ SW1 ควบคุมการติด-ดับของ LED0-LED7 เมื่อกด สวิตช์ SW1 LED0-LED7 จะติดทีละดวงจาก LED0 ไป LED7 3. เลื่อน Power Switch ON จ่ายไฟเลี้ยงให้วงจร ทดลองกดสวิตช์ SW1 สังเกตการแสดงผลของ LED0-LED7 บันทึกผลการทดลอง ผลการทดลอง :

Page 64: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 398

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

งานที่มอบหมายหลังปฏิบัติงานที่ 9.6 1. ศึกษาชุดค าสั่งโปรแกรมและเขียนโปรแกรมรับค่าลอจิกจากสวิตช์ SW1 ควบคุมการท างานของ LED0-LED7 ติดทีละดวงจาก LED0 ไป LED7 และรับค่าลอจิกจากสวิตช์ SW2 ควบคุมการท างานของ LED0-LED7 ติดทีละดวงจาก LED7 ไป LED0 ตามท่ีก าหนดให้ในตารางที่ 9.7 ทดสอบการท างานและบันทึกค าสั่งโปรแกรมทั้งหมดลงในตาราง (3 คะแนน)

ตาราง 9.7 โปรแกรมรับค่าสวิตช์ SW1 และ SW2 ควบคุมการท างานของ LED0-LED7 การท างาน LED7 LED6 LED5 LED4 LED3 LED2 LED2 LED0

กดสวิตช์ SW1

กดสวิตช์ SW2

เงื่อนไขการท างาน = ติด = ดับ และค่า delay 500 ms

ค าสั่ง :

Page 65: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 399

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

ตาราง 9.7 (ต่อ)

ค าสั่ง :

Page 66: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 400

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

ปฏิบัติการที่ 9.7 การเขียนโปรแกรมควบคุมการท างานของ LED ด้วยสัญญาณ PWM 1. ต่อวงจรพอร์ตของบอร์ด Arduino UNO กับวงจรแสดงผลแบบ LED ของแผงวงจร NX-887

ตามวงจรรูปที่ 9.42

(ก) วงจรพอร์ตของบอร์ด Arduino UNO กับวงจรแสดงผลแบบ LED

(ข) การต่อวงจรพอร์ตของบอร์ด Arduino UNO กับวงจร LED ของแผงวงจร NX-887 รูปที่ 9.42 การต่อวงจรพอร์ตของบอร์ด Arduino UNO กับวงจร LED

2. สร้างไฟล์สเก็ตช์ชื่อ Lab9_7 และเขียนค าสั่งภาษาซีตามโปรแกรม Lab9_7 3. ท าการคอมไพล์ และอัปโหลดไฟล์ลงบอร์ด Arduino UNO

Page 67: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 401

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

โปรแกรม Lab9_7 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

int pwm[] = {255,200,150,100,50,10,0,0,0,0,0,0,0}; int led_fwd[] = {3,5,6,9,10,11}; // LED0 ..... LED11 int led_rwd[] = {11,10,9,6,5,3}; // LED11 .....LED0 int dl = 100; void setup() { for(int i=0;i<7;i++) pinMode(led_fwd[i],OUTPUT); } void loop() { for(int i=0;i<13;i++) { if(i<6) { analogWrite(led_fwd[i],255); // forward for(int k=0;k<i;k++) { analogWrite(led_fwd[k],pwm[i-k]); //update previous } } else { for(int j=0;j<6;j++) { analogWrite(led_fwd[j],pwm[i-j]); // update previous } } delay(100); } }

อธิบายโปรแกรม : โปรแกรมควบคุมการแสดงผลของ LED โดยส่งค่า PWM ออกขาพอร์ตที่มีคุณสมบัติของการสร้างสัญญาณ PWM ได้แก่ขา Digital Pin3, Digital Pin5, Digital Pin6, Digital Pin9, Digital Pin10 และ Digital Pin11 เมื่อก าหนดให้มีค่าดิวตี้ไซเกิลแตกต่างกัน ความสว่างของ LED จึงแตกต่างกัน

4. เลื่อน Power Switch ON จ่ายไฟเลี้ยงให้วงจร สังเกตการแสดงผลของ LED0 - LED11 บันทึกผลการทดลอง ผลการทดลอง :

Page 68: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 402

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

งานที่มอบหมายหลังปฏิบัติงานที่ 9.7 1. ศึกษาชุดค าสั่งโปรแกรมและเขียนโปรแกรมควบคุมการท างานของ LED0-LED11 เป็นไฟวิ่งแบบ PWM จาก LED0 ไป LED11 และจาก LED11 ไป LED0 แบบวนลูป บันทึกค าสั่งโปรแกรมท้ังหมดลงในตาราง (5 คะแนน) ตาราง 9.8 โปรแกรมควบคุมการท างานของ LED0-LED11 เป็นไฟวิ่งแบบ PWM

ค าสั่ง :

Page 69: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 403

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

ตาราง 9.8 (ต่อ)

ค าสั่ง :

Page 70: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 404

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

2. ต่อวงจรพอร์ตของบอร์ด Arduino UNO กับวงจรสวิตช์และวงจร LED ของแผงวงจร NX- 887 ตามวงจรรูปที่ 9.43

(ก) วงจรพอร์ตของบอร์ด Arduino UNO กับวงจรสวิตช์และวงจร LED

(ข) การต่อวงจรพอร์ตของบอร์ด Arduino UNO กับวงจรสวิตช์และวงจร LED บนแผงวงจร รูปที่ 9.43 การต่อวงจรพอร์ตของบอร์ด Arduino UNO กับวงจรสวิตช์และวงจร LED

3. ศึกษาชุดค าสั่งโปรแกรมและเขียนโปรแกรมรับค่าลอจิกจากสวิตช์ควบคุมการแสดงผลของ LED เมื่อกด SW1 ให้ LED0-LED11 เป็นไฟวิ่งแบบ PWM จาก LED0 ไป LED11 และ เมื่อกด SW2 ให้LED0-LED11 เป็นไฟวิ่งจาก LED11 ไป LED0 บันทึกค าสั่งโปรแกรมท้ังหมดลงในตาราง (5 คะแนน)

Page 71: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 405

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

ตาราง 9.9 โปรแกรมรับค่าลอจิกจากสวิตช์ควบคุม LED0-LED11 เป็นไฟวิ่งแบบ PWM

ค าสั่ง :

Page 72: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 406

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

ตาราง 9.9 (ต่อ)

ค าสั่ง :

Page 73: หน่วยที่ 9 ไมโครคอนโทรลเลอร์ Arduino · (ก) ด้านหน้าบอร์ด Arduino UNO (ข) ด้านหลังบอร์ด

เอกสารประกอบการเรียน วิชาไมโครคอนโทรลเลอร์ (2105-2105) 407

หน่วยท่ี 9 ไมโครคอนโทรลเลอร์ Arduino เรียบเรยีงโดยครูบุญเกิด สนธพิันธ์

สรุปผลการปฏิบัติงาน