เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 34 1. คลิก 3. คลิก ขวา 2. คลกิ เลอื ก เลือก 4. ดู พอรต์ รปู ท่ี 2.11 การดูพอรต์ ท่เี ชื่อมตอ่ กับบอรด์ Arduino 2.1.3 การติดตั้งไดรเ์ วอรส์ าหรับบอร์ด Arduino บริษัทบอรด์ Arduino ปัจจบุ ันมหี ลายรุ่น ซ่ึงแต่ละรุ่นอาจใช้ชิพสาหรับติดต่อสื่อสารผ่านพอร์ต USB แตกต่างกันไป ซ่ึงบางรุ่นมีไดร์ฟเวอร์ มาให้พร้อมในตัวโปรแกรม Arduino IDE แล้ว เช่นบอร์ดท่ีใช้ชิพ CP210x, FTDI หรือบอร์ดท่ีใช้ ไมโครคอนโทรลเลอร์เป็นตัวส่ือสารผ่าน USB ดังนั้นการติดต้ังผู้ใช้งานสามารถเรียกใช้ได้เลย โดย ไม่ต้องหาดาวน์โหลดไดร์ฟเวอร์เพ่ิมเติม ยกเว้นบอร์ดที่ใช้ชิพ CH340 CH341 (เช่น บอร์ด Arduino Nano 3.0 เลือกใช้ชิพเบอร์น้ีในบางผู้ผลิต) ซ่ึงผู้ใช้งานจะต้องไปหาดาวน์โหลดไดร์ฟเวอร์เพื่อมา ตดิ ตัง้ เอง 2.2 ลกั ษณะทั่วไปสาหรับการเรม่ิ ตน้ การใชง้ านของโปรแกรม Arduino IDE สาหรับหน้าต่างของโปรแกรม Arduino IDE ออกมาให้ใช้งานง่ายและดูสบายตาสาหรับการ เขียนโปรแกรมโดยมสี ว่ นประกอบหลัก ๆ ดงั รปู ที่ 2.12 โดยมีสว่ นประกอบดงั นี้ Menu Bar: เปน็ ส่วนที่ไวส้ าหรับตัง้ คา่ หรือดูข้อมลู ตา่ ง ๆ รวมถึงการ save, open และ create ไฟล์ Toolbar: ประกอบไปด้วยหลาย ๆ ปุม่ ได้แก่ Verify: Compile เพอ่ื เช็ควา่ โปรแกรมเขยี นถูกไวยกรณ์หรอื ปา่ ว Upload: อัปโหลดโปรแกรมลงบอร์ด ซึ่งจะทาการ Compile ก่อนโดยอัติโนมตั ิ New: สรา้ ง Sketch ใหม่ Open: เปิด Sketch ทม่ี ีอยู่ หน่วยที่ 2 : ชุดคำสงั่ และกำรเขียนโปรแกรมควบคมุ
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 35 Save: บนั ทึก Sketch Serial Monitor: สาหรับแสดงข้อมลู ที่ได้รับหรือถูกสง่ จากบอรด์ Arduino Text Editor / Coding Area: เปน็ พืน้ ท่ีสาหรบั แสดงโปรแกรมท่เี ราเขยี น Debugging Console: แสดงสถานะของการ Compile และ Upload โปรกรม รวมถงึ ขอ้ ผิดพลาดตา่ ง ๆ รปู ที่ 2.12 หน้าตา่ งและสว่ นประกอบต่าง ๆ ของโปรแกรม Arduino IDE 2.2.1 Menu Bar: File เป็นส่วนท่ีไว้สาหรับตั้งค่าหรือดูข้อมูลต่าง ๆ รวมถึงการ save, open และ create ไฟล์ โดยแตล่ ะเมนปู ระกอบด้วยคาส่ังต่าง ๆ ดงั น้ี New: ใช้สรา้ งไฟล์ Sketch ตัวใหมเ่ พอ่ื เรมิ่ เขียนโปรแกรมใหม่ Open: ใช้เปดิ สเก็ตช์งานที่บนั ทกึ ไวก้ อ่ นหน้า Sketchbook: ใชเ้ ปิดไฟลส์ เก็ตช์ล่าสดุ ที่เปดิ ใช้งานเสมอ Example: ใชใ้ นการเลือกเปดิ ไฟล์ Sketch ตวั อยา่ งที่บรรจุและรวบรวมไวใ้ นโฟลเดอร์ ของ Arduino หน่วยท่ี 2 : ชุดคำสงั่ และกำรเขียนโปรแกรมควบคมุ
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 36 Save: ใช้ในการบันทกึ ไฟล์ Sketch ปจั จุบนั Save As: ใช้บันทึกไฟล์ Sketch โดยการเปล่ียนชื่อไฟล์ Upload to I/O บอร์ด: ใช้อัปโหลดโปรแกรมไปยังแผงวงจร Arduino หรือ ฮาร์ดแวร์ ของ Arduino Page Setup: ตั้งค่าหน้ากระดาษของไฟล์ Sketch ปัจจุบัน Print: ส่งั พิมพ์โคด้ ของไฟล์ Sketch ปจั จบุ นั ทางเครอื่ งพมิ พ์ Preference: ใช้กาหนดค่าการทางานของโปรแกรม Quit: ใชจ้ บการทางานและออกจากโปรแกรม 2.2.2 Menu Bar: Edit ขณะที่พิมพ์โปรแกรมใช้คาส่ังในเมนูน้ีในการส่ังยกเลิกคาส่ังท่ีแล้ว ทาซา้ และรายการคาสงั่ ตา่ ง ๆ ทค่ี วรทราบดงั น้ี Undo: ยกเลิกคาส่ังหรือการพิมพ์คร้ังสุดทา้ ย Redo: ทาซา้ คาสัง่ หรือการพิมพค์ รงั้ สดุ ทา้ ย Cut: ตดั ขอ้ ความทเี่ ลือกไวไ้ ปเกบ็ ในคลิปบอรด์ ของโปรแกรม Copy: คดั ลอกขอ้ ความทเี่ ลอื กไวม้ าเก็บในคลิปบอร์ด Paste: นาข้อความที่อยูใ่ นคลิปบอร์ดมาแปะลงในตาแหนง่ ทีเ่ คอรเ์ ซอร์ชอ้ี ยู่ Select All: เลือกขอ้ ความท้งั หมด Comment/Uncomment: ใช้เติมหรือลบเคร่ืองหมาย “//” เพื่อสรา้ งหรือยกเลิกหมาย เหตหุ รอื คาอธิบายลงในโปรแกรม 2.2.3 Menu Bar: Sketch เป็นเมนสาหรับการคอมไพล์โปรแกรมและการเพ่ิมไลเบอรี่โดย มีเมนูยอ่ ยดังนี้ Verify/Compile: ใช้คอมไพลแ์ ปลโปรแกรมภาษาซีท่เี ราเขียนขึ้นให้เปน็ ภาษาเครอ่ื ง Show Sketch folder: ส่งั เปดิ โฟลเดอรท์ ่ีเกบ็ โปรแกรมของผใู้ ช้ Add File: เพ่ิมไฟล์ให้กับ Sketch Book ปัจจุบัน เมื่อใช้คาสั่งน้ี โปรแกรม Arduino จะทาการคัดลอกไฟลท์ ี่เลือกไว้ไปเก็บไว้ในโฟลเดอรเ์ ดียวกนั กับโปรแกรมท่ีกาลังพฒั นา Import Library: เป็นคาสง่ั เรียกใช้เพ่ือนาเข้าไลบรารีเพิ่มเติม เมื่อคลกิ เลือกคาสั่งนี้แล้ว โปรแกรม Arduino IDE แสดงไลบรารีให้เลือก เมื่อเลือกแล้วโปรแกรมสามารถเรียกใช้ไลเบอรีน้ัน ๆ ด้วยการแทรกบรรทัดคาสง่ั #include ตามดว้ ยชอื่ ไลเบอร่ีน้ัน ๆ ลงในส่วนตน้ ของไฟล์ 2.2.4 Menu Bar: Tools ใช้จัดรูปแบบของโค้ดโปรแกรมท่ีเขียนขน้ึ เลือกรุ่นของฮาร์ดแวร์ Arduino และเลือกพอร์ตทใ่ี ชง้ านกบั บอร์ด Arduino มดี ังนี้ Auto Format: จดั รูปแบบของโคด้ โปรแกรมอตั โนมตั ิ Archive Sketch: สั่งบีบอัดไฟล์โปรแกรมทั้งโฟลเดอร์หลักและโฟลเดอร์ย่อยของไฟล์ Sketch ปัจจุบันไฟล์ท่ีสรา้ งใหม่จะมีชอ่ื เดยี วกับไฟล์ Sketch ปจั จบุ ัน หน่วยที่ 2 : ชดุ คำสงั่ และกำรเขียนโปรแกรมควบคมุ
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 37 Board: เลือกรนุ่ ฮารด์ แวรข์ องบอร์ดไมโครคอนโทรลเลอร์ Arduino Serial Port: เลือกหมายเลขพอร์ตของคอมพิวเตอร์ท่ีต่อกับฮาร์ดแวร์ Arduino และ บอรด์ Arduino 2.3 โครงสรา้ งภาษา ตัวแปร ค่าคงที่ โปรแกรมสาหรับบอร์ด Arduino จะต้องเขียนโปรแกรมโดยใช้ Arduino Programming Language ซึ่งตัวภาษาของ Arduino เป็นการนา Open Source Project ชื่อ Wiring มาพัฒนาต่อ ภาษาของ Arduino แบ่งได้เป็น 2 ส่วนหลักคือ โครงสร้างภาษา (Structure) ตัวแปร ค่าคงท่ีและฟังก์ช่ัน (Function) ภาษาของ Arduino จะอ้างอิงตามภาษา C/C++ หรืออาจกล่าวได้ว่าการเขียนโปรแกรม สาหรบั บอร์ด Arduino ก็คือการเขยี นโปรแกรมภาษา C โดยเรยี กใช้ฟงั กช์ ั่นและไลบรารีทีท่ าง Arduino ไดเ้ ตรยี มไวใ้ ห้แล้ว โครงสรา้ งโปรแกรมของ Arduino สามารถแบง่ ออกเปน็ 2 ส่วนหลกั ๆ คือ 1. โครงสร้างภาษา (Structure) ตัวแปร และค่าคงที่ 2. ฟงั กช์ ่นั (Function) สาหรับหัวข้อนี้จะอธิบายโครงสร้างของโปรแกรมของ Arduino แบ่งได้เป็นสองส่วนคือ void setup() และ void loop() โดยฟังก์ชั่น setup() จะทางานเพียงครั้งเดียวเม่ือโปรแกรมเร่ิมทางานเพ่ือ เป็นโหมดการกาหนดค่าการทางานต่าง ๆ ของขาที่ใช้งาน การกาหนดการสื่อสารของบอร์ด ไมโครคอนโทรลเลอร์กับอุปกรณ์ต่อพ่วงต่าง ๆ เป็นต้น ส่วนการทางาน loop() เป็นส่วนทางาน โปรแกรมฟังก์ช่ันนี้ต่อเน่ืองกันตลอดเวลาตามโค้ดที่ถูกโปรแกรมข้ึนเช่น อ่านค่าอินพุต คานวน หรือ ส่งั งานขาเอาต์พตุ ฯลฯ 2.3.1 สว่ นของฟังกช์ ัน่ setup() เป็นส่วนต้นของการเขียนโปรแกรม ฟังก์ช่ันนี้จะทางานเพียงครั้งเดียวเพ่ือกาหนดค่า การทางานของขาต่าง ๆ ของไมโครคอนโทรลเลอร์รวมถึงการกาหนดโหมดเริ่มต้นของไลเบอรีท่ี เรยี กใช้งาน ฯลฯ หน่วยที่ 2 : ชุดคำสงั่ และกำรเขียนโปรแกรมควบคมุ
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 38 2.3.2 สว่ นของฟงั กช์ ัน่ loop() การทางานของฟังกช์ ่ัน loop() จะแตกต่างไปจาก ฟังก์ชั่น setup() คือเป็นการทางานต่อเนื่องตลอดเวลาตามโปรแกรมที่ถูกเขียนข้ึน นอกจากภายใน ฟังก์ชั่นนี้ผู้ใช้งานสามารถเขียนโปรแกรมเรียกใช้ฟังก์ชั่นภายย่อยเพ่ือรับ-ส่งค่า คานวน หรือ ส่ังการ ทางานของขาเอาต์พตุ ต่าง ๆ ตามเงอื่ นไขโปรแกรมได้ รปู ที่ 2.13 แสดงสว่ น void setup() และ void loop() หน่วยท่ี 2 : ชุดคำสงั่ และกำรเขียนโปรแกรมควบคมุ
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 39 ตัวอย่าง รูปท่ี 2.14 แสดงโปรแกรมส่วนของ ฟงั กช์ น่ั setup() และ loop() 2.3.3 ชุดคาสั่ง คาสั่ง if คาสั่ง if เป็นคาสั่งที่ใช้ในการตรวจสอบเง่ือนไข (Condition) ในกรณีท่ีเงือนไข ของโปรแกรมเป็นจริง (True) ลาดับถัดไปในการทางานของโปรแกรมจะทางานในชุดคาส่ังที่ 1 (Statement1) ซึ่งอยูภ่ ายในปีกกา ({ … }) แตเ่ ง่อื นไขท่ีเป็นเท็จ (False) โปรแกรมจะยกเลิกคาสัง่ น้ันทันที คาส่งั if else คาส่ัง if…else เป็นคาส่ังที่ใช่ในการตรวจสอบเงื่อนไข (Condition) ซ่ึง เป็นรูปแบบการทางานลักษณะเดียวกับ if แต่ในการการใช้งานคาสั่ง if…else มักจะใช้ในการกาหนด รปู แบบการทางานของโปรแกรมให้สามารถเลือกทาคาส่งั ได้ 2 ชดุ โดยในกรณีที่เงือ่ นไขของคาส่ังเป็น จริง (True) ลาดับถัดไปในการทางานของโปรแกรมจะทางานในชุดคาส่ังท่ี 1 (Statement1) ซ่ึงอยู่ ภายในวงเล็บปกี กา ({…}) น่ันก็คือจะทางานภายใต้คาส่ัง if เท่านั้น และในกรณีเง่ือนไขเป็นเทจ็ ลาดับ ไปในการทางานของโปรแกรมจะทางานในชุดคาส่ังที่ 2 (Statement2) ซ่ึงอยู่ภายในวงเล็บปีกกา ({…}) นน่ั ก็คอื จะทางานภายใตค้ าสั่ง else เทา่ นั้น คาส่ัง switch case คาส่ัง switch..case เป็นคาส่ังท่ีใช้ในการเลือกให้โปรแกรม ทางานที่ชุดคาสั่งหนึ่ง (statement) ซ่ึงการที่โปรแกรมจะสามารถเลือกทางานท่ี statement ใด ๆ ได้น้ัน จะต้องขึ้นอยู่กับการตรวจสอบเงื่อนไข (condition) กับค่า (expression) เสมอ ซึ่งค่าท่ี หน่วยที่ 2 : ชดุ คำสงั่ และกำรเขียนโปรแกรมควบคมุ
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 40 สามารถนามาตรวจสอบเง่ือนไขได้น้ันสามารุใช้ได้กับข้อมูลท่ีเป็นตัวเลขจานวนเต็ม และ ตัวอักษร 1 ตวั อกั ษร ดังนี้นเราสามารถใช้งานคาสัง่ switch case ไดส้ ะดวกกว่าคาสงั่ if และ if..else คาสงั่ for การทางานของคาสั่ง for ในภาษาซี เริ่มต้นด้วยการกาหนดค่าเริม่ ต้นให้กับ ตัวแปร (assignment) ที่ทาหน้าท่ีควบคุมลูปการทางานของโปรแกรม จากนี้นจึงทดสอบว่าเงื่อนไข (condition) เป็นจริงหรือไม่ ซ่ึงจะทาการเปรียบเทียบกันระหว่างค่า assignment กับค่าเงื่อนไข ใน กรณีท่ีเป็นจริง (True) จะทาคาสั่งต่าง ๆ ท่ีอยู่ใน ({…}) จากนั้นจะเพิ่มหรือลดค่าของตัวแปรที่ควบคุม ลูป แล้วจึงทดสอบเงื่อนไขอีกคร้ังการทางานจะวนซ้าจนกระทั่งเง่ือนไขเป็นเทจ็ (False) การวนลูปจึง จะสนิ้ สุดลง คาสั่ง while คาส่ัง while ในภาษซเี ปน็ คาสั่งทีก่ าหนดให้โปรแกรมทาซ้าอีกแบบหนึ่ง ในภาษาซี นิยมใช้ในกรณีท่ีต้องการตรวจสอบเง่ือนไขของโปรแกรมว่าจริงหรือไม่ ในกรณีท่ีเงื่อนไข เป็นจริง (True) ก็จะทาซ้า แต่ในกรณีที่เง่ือนไขเป็นเท็จ (False) ก็จะออกจากการทางานซ้า ซึ่ง เงื่อนไขที่เราใช้ในการตรวจสอบของคาส่ัง while นั้นอาจจะใช้กับกรณีท่ีเรารู้จานวนรอบที่แน่นอน เช่น การวนรอบตั้งแต่ index = 1 ถึง index = 10 หรือวนรอบแบบที่ไม่ทราบจานวนรอบที่แน่นอน ได้เช่นกัน อย่างไรก็ตามถ้าตัวแปรที่ตรวจสอบน้ันมีเงื่อนไขเป็นจริงตลอดเวลา โปรแกรมก็จะทาซ้า แบบไปไม่สิ้นสุด ซ่ึงการเขียนโปรแกรมลักษระนี้เราควรระมัดระวังมากท่ีสุด ฉะนั้นจะต้องเขียน โปรแกรมให้มโี อกาสออกจากการวนรอบทาซา้ ใหไ้ ด้ 2.3.4 ตัวกระทาทางคณิตศาสตร์ บวก ลบ คูณ และหาร ใช้หาค่าผลรวม ผลต่าง ผลคูณ และผลหาร ค่าของตัวถูกกระทาสองตัวโดยให้คาตอบมีประเภทตรงกับตัวถูกกระทาท้ังสองตัว เช่น 9/4 ให้คาตอบเท่ากับ 2 เน่ืองจากท้ัง 9 และ 4 เป็นตัวแปรเลขจานวนเต็ม (int) นอกจากน้ีตัวกระทา ทางคณิตศาสตรอ์ าจทาใหเ้ กิดโอเวอร์โฟลว์ (overflow) ถา้ ผลลัพธ์ทไี่ ด้มขี นาดใหญ่เกนิ กวา่ จะสามารถ เก็บในตัวแปรประเภทน้ัน ถ้าตวั ทีถ่ กู กระทาต่างประเภทกันผลลพั ธ์ท่ีได้ 9/4 = 2 หรอื 9/4 = 2.25 ตารางที่ 2.1 สัญลักษณ์ ความหมาย ตวั อยา่ ง + การบวก x+y - การลบ x–y * การคณู x*y / การหาร x/y % การหารเอาคา่ เศษ x%y ++ การเพิ่มค่าข้นึ 1 จานวน x++ -- การลดค่าขน้ึ 1 จานวน x-- หน่วยที่ 2 : ชุดคำสงั่ และกำรเขียนโปรแกรมควบคมุ
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 41 2.3.5 ตัวกระทาเปรียบเทียบ การเขียนโปรแกรมบนระบบไมโครคอนโทรลเลอร์ ส่วนใหญ่ จะต้องมีการทระทาทางลอจิก ซึ่งจะเกี่ยวข้องกับการทางานของแบบระบบดิจิทัล และเราสามารถใช้ สัญลักษณ์ต่าง ๆ ท่ีเกี่ยวข้องกับการกระทาทางลอจิกร่วมกับการเขียนโปรแกรม เพ่ือควบคุมการ ทางานของไมโครคอนโทรลเลอร์ได้ ซงึ่ สญั ลักษณแ์ ละตวั อยา่ งการใชง้ านแสดงดงั ตารางท่ี ตารางที่ 2.2 ความหมาย ตัวอยา่ ง กระทาแบบแอนด์ x&y สญั ลกั ษณ์ กระทาแบบออร์ x|y & เงอื่ นไขแบบแอนด์ x && y | เงอ่ื นไขแบบออร์ x || y && กระทาแบบนอ็ ต || กระทาแบบเอก็ ซค์ ลซู ฟี ออร์ !x ! การเลื่อนบติ ไปทางซ้าย x^0x01 ^ การเลอ่ื นบติ ไปทางขวา x << 1 << x >> 1 >> 2.3.6 ชนดิ ของตัวแปร และ อาร์เรย์ ชนิดของตัวแปร (Variable type) ในภาษซี ท่ีเราใช้ในการเขียนโปรแกรมบนระบบ ไมโครคอนโทรลเลอร์ มีอยดู่ ้วยกันหลายรูปแบบ เช่น ตัวแปรแบบเก็บจานวนจริง ตัวแปรแบบเก็บค่า จานวนทศนิยมซึ่งตัวแปรแต่ละชนิดจะมีขอบเขตของการเก็บข้อมูลที่แตกต่างกัน ดังน้ันการประกาศ ตวั แปรให้คอมไพล์เลอร์ประมวลผลได้อยา่ งถูกต้องน้นั เราต้องประกาศตัวแปรให้ถูกต้องตามชนิดของ ข้อมลู ท่ตี ้องการใช้งานดงั ตารางที่ 2.3 อาร์เรย์ (Array) คือการประกาศตัวแปรที่ใช้สาหรับเก็บข้อมูลชนิดเดียวกัน ซึ่งการ ประกาศตัวแปรในลักษณะน้ีข้อมูลที่ถูกจัดเก็บจะถูกเรียงติดกันตามลาดีบ ต้ังแต่ตาแหน่งเริ่มต้น คือ ลาดับที่ 0 จนถึงลาดับสูงสุดของอาร์เรย์ ซึ่งจะขึ้นอยู่กับการกาหนดขนาดของอาร์เรย์อ้างถึงตาแหน่ง ของข้อมูลที่เราต้องการได้ทันที ท้ังน่ีในการประตัวแปรแบบอาร์เรย์นั้นต้องทราบว่าข้อมูลท่ีเก็บน้ันมี ขนาดเทา่ ใด เพ่อื จะได้เลอื กชนิดของตวั แปรท่ีจะประกาศได้อย่างเหมาะสม ตารางที่ 2.3 ขนาดตวั แปร(บติ ) ขอบเขตของตวั แปร 8 -128 ถงึ 127 ชนิดตัวแปร 8 0 ถึง 255 char 16 -32,768 ถงึ 32,767 unsigned char int หน่วยท่ี 2 : ชุดคำสงั่ และกำรเขียนโปรแกรมควบคมุ
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 42 unsigned int 16 0 ถงึ 65,535 long 32 -2,147,483,648 ถงึ 2,147,483,647 32 0 ถงึ 4,294,967,295 unsigned long 32 3.4x10-38 ถงึ 3.4x1038 float 64 1.7x10-38 ถงึ 1.7x1038 double รปู แบบ : ชนดิ ของตวั แปร ชอ่ื ของตัวแปร ตวั อย่างการประกาศตัวแปร char value[5] // กาหนดตัวแปรแบบอาร์เรย์ชื่อ value ขนาดสมาชิก 5 ตวั unsigned long dat[100] // กาหนดตัวแปรแบบอารเ์ รย์ชือ่ dat ขนาดสมาชกิ 100 ตัว float temp[25]; // กาหนดตวั แปรแบบอาร์เรย์ชอื่ temp ขนาดสมาชกิ 5 ตัว 2.3.7 ไวยากรณภ์ าษา C / C++ ของ Arduino เซมิโคลอน - semicolon ; วงเล็บปีกกา - curly brace { } หมายเหตุบรรทัดเดียวและหลายบรรทัด // และ /* ... */ เป็นส่วนของโปรแกรมที่ ผู้ใช้เขียนเพ่ืมเติมว่าโปรแกรมทางานอย่างไร โดยส่วนที่เป็นหมายเหตุจะไม่ถูกคอมไพล์ ไม่นาไป ประมวลผล มปี ระโยชน์มากสาหรับการตรวจสอบโปรแกรมภายหลังหรือใช้แจง้ ให้เพื่อน ร่วมงานหรือ บุคคลอ่ืนทราบว่าบรรทัดน้ีใช้ทาอะไร ตัวหมายเหตุภาษาซี โดยการเพ่ิมเครื่องหมายสเลช 2 ตัวหน้า บรรทัด และการเพิ่มเครอ่ื งหมายสเลชค่กู บั ดอกจนั คล่อมขอ้ ความและปดิ ด้วยดอกจันคู่กับสเลข ตวั อยา่ งการใช้งานหมายเหตุ // หมายเหตบุ รรทัดเดียว /* หมายเหตหุ ลายบรรทัด หมายเหตุหลายบรรทดั หมายเหตุหลายบรรทัด */ #define เป็นคาส่ังที่ใช้งานมาก ในการกาหนดค่าคงท่ีให้กับโปรแกรม ในการกาหนด ค่าคงท่ไี ม่ได้เปลืองพ้ืนท่ี หน่วยความจาของไมโครคอนโทรลเลอร์แต่อย่างไร เมื่อถึงขึ้นตอนแปลภาษา คอมไพเลอร์จะแทนท่ตี ัวอกั ษรข้อความด้วยคา่ ทกี่ าหนดไว้ ใน Arduino จะใช้คาส่ัง # define ตรงกับ ภาษาซี #include ใช้ส่ังให้รวมไฟล์อ่ืน ๆ เข้ากับไฟล์โปรแกรมหลักก่อน แล้วจึงทาการคอมไพล์ โปรแกรม หน่วยที่ 2 : ชุดคำสงั่ และกำรเขียนโปรแกรมควบคมุ
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 43 คาสงวนของ Arduino คาสงวนคือ ค่าคงท่ี ตัวแปร และฟังก์ช่ันที่กาหนดไว้เป็นส่วน หน่ึงของภาษาซี ของ Arduino ห้ามนาคาเหลา่ น้ไี ปตงั้ ชือ่ ตวั แปรแสดงได้ดงั ตารางที่ 2.4 ตารางที่ 2.4 Constants Port Datatypes other Constants HIGH DDRB boolean += abs pinMode constrain LOW PINB byte +[ acos print cos INPUT PORTB char OUTPUT DDRC class ] analogRead println default SERIAL PINC default DISPLAY PORTC do =&& analogWrite pulseIn delay PI DDRD double HALF_ PI PIND int || attachInterrupts radians delayMicroseconds TWO_PI PORTD long LSBFIRST private ,/ asin this detachInterrupts MSBFIRST protected CHANGE public / atan tone digitalWrite FALLING return RISING shot ?: atan2 true digitalRead false signed true static log available write else null switch throw && begin # USB exp Try Unsigned !| bit Keyboard false Void while | bitRead Mouse find ^^ bitWrite read findUntil = bitSet press float == bitClear release floor ++ boolean releaseAll for != byte readBytes HALF_PI - case readBytesUntil if % ceil return int / char round log * char serial loop { class serial1 map } abs serial2 max / / acos serial3 micros ** setTimeout millis . Setup min << shiftIn new () shiftOut noInterrupts >> sin noTone sq null sqrt parseInt tan parseFloat หน่วยที่ 2 : ชดุ คำสงั่ และกำรเขียนโปรแกรมควบคมุ
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 44 แบบทดสอบหลงั เรยี น หนว่ ยท่ี 2 ชุดคาสัง่ และการเขยี นโปรแกรมควบคุม คาสงั่ จงเลอื กคาตอบทถ่ี ูกทส่ี ดุ เพยี งข้อเดยี ว 1. การตดิ ต้ัง Arduino IDE ต้องไป Download โปรแกรมท่ใี ด? ก. https://www.arduino.cc ข. https://www.arduinocc.com ค. www.arduino.com ง. https://www.arduinothai.cc จ. www.arduinocc.com 2. โปรแกรม Arduino IDE คาวา่ IDE ย่อมาจาก? ก. Integrat Developer Environment ข. Integrated Development Environment ค. Integrated Developer Enterprise ง. Integer Development Enterprise จ. Integer Development Eclipse 3. เราสามารถเรียกดูพอรต์ จากสว่ นใดของคอมพวิ เตอร์? ก. Driver Manager ข. Driver License ค. Device Manager ง. Developer License จ. Device License 4. คาส่งั Verify เรียกใชเ้ พื่อตอ้ งการอะไร? ก. สรา้ ง Sketch ใหม่ ข. บันทึก Sketch ค. ตรวจเชค็ ไวยกรณ์ของโปรแกรม ง. อัปโหลดโปรแกรม จ. ลบ Sketch 5. ใช้สัญลักษณใ์ ดเพ่อื ตอ้ งการแสดงคาอธิบายลงโปรแกรม? ก. ++ ข. * ค. %% ง. // จ. && หน่วยท่ี 2 : ชุดคำสงั่ และกำรเขียนโปรแกรมควบคมุ
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 45 6. คาสง่ั ใดเปน็ คาสั่งหน่วงเวลา? ก. digitalWrite ข. digitalRead ค. pinMode ง. delay จ. delete 7. บอดเรต (baud rate) คืออะไร? ก. อัตราเร็วในการรบั ส่งข้อมลู ทตี ้องกาหนดค่า ข. พอรต์ ในการเชอ่ื มต่อบอรด์ ค. บนั ทกึ โปรแกรมลา่ สดุ ง. หน่วยความจาไมโครคอนโทรลเลอร์ จ. ความถี่ 8. อธบิ ายคาสง่ั if? ก. คาสั่งท่ีใชใ้ นการตรวจสอบเงอ่ื นไข ข. กาหนดโหมดของ GPIO ค. การบวกลบทางคณิตศาสตร์ ง. เรียกใชไ้ ลบรารีก่ ่อนคอมไพลเ์ ลอรป์ ระมวลผล จ. การเขียนผงั งาน 9. ตัวแปรชนิด char มีขนาดตัวแปรกบี่ ิต? ก. 8 ข. 16 ค. 32 ง. 64 จ. 128 10. โครงสร้างโปรแกรมของ Arduino แบ่งได้เปน็ สองสว่ นคือ? ก. void setup() และ void run() ข. void setup() และ void main() ค. void main() และ void loop() ง. void setup() และ void loop() จ. void main() และ void run() หน่วยที่ 2 : ชุดคำสงั่ และกำรเขียนโปรแกรมควบคมุ
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 46 แบบฝึกหดั หนว่ ยท่ี 2 ชุดคาสั่งและการเขยี นโปรแกรมควบคุม ตอนที่ 1 ใหผ้ ้เู รยี นกาเครอื่ งหมายถูก () หน้าขอ้ ทคี่ ิดวา่ ถกู และกาเคร่ืองหมายผิด () ในข้อท่คี ิดว่าผดิ ซอฟต์แวรท์ ี่ใชใ้ นการพัฒนาบอรด์ Arduino นัน้ คอื โปรแกรมทีเ่ รียกว่า Arduino LDP ขนดของโปรแกรม Arduino โดยปกตแิ ลว้ จะใหญ่กว่าโคด้ AVR โคด้ Arduino เขา้ ถงึ จากรีจสิ เตอร์โดยตรง โหลดโปรแกรม IDE ฟรีท่เี วป http://Arduino.cc/en/Main/Software ระบบปฎบิ ิการ Linux ไมส่ ามารถลงโปรแกรม Arduino IDE ได้ ชิพ CP210x และ FTDI เป็นตัวสอื่ สารผ่าน USB ของบอรด์ ไมโครคอนโทรลเลอร์ เมนู (Menu) เปน็ สว่ นไวส้ าหรบั ตรวจเชค็ วา่ โปรแกรมเขียนถูกไวยกรณ์หรือปา่ ว แถบเครอ่ื งมือ (Toolbar) เปน็ การนาคาส่งั ท่ีใช้งานนานๆครง้ั มาสร้างเป็นปุ่ม พนื้ ทเ่ี ขยี นโปรแกรม (Coding Area) เป็นพนื้ ทส่ี าหรับเขียนโปรแกรมภาษา C/C++ Debugging Console เป็นพ้นื ทแี่ สดงคา่ จากคาสั่ง AnalogRead หน่วยที่ 2 : ชุดคำสงั่ และกำรเขียนโปรแกรมควบคมุ
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 47 ตอนท่ี 2 ใหผ้ เู้ รียนเลอื กคาตอบที่ถูกทส่ี ดุ แล้วกาเคร่ืองหมายกากบาท () ใหค้ รบทกุ ข้อ 1. พนื้ ท่ี Text Editor เปน็ พื้นทสี่ าหรบั เขยี นโปรแกรมภาษา? ก. ภาษา VHDL ข. ภาษา JavaScript ค. ภาษา Python ง. ภาษา C/C++ 2. เมนู File > Sketchbook ใชส้ าหรับ? ก. เปิดไฟล์ Sketchbook ท่ีเราสร้างไว้ ข. เปดิ ไฟล์โปรแกรมตวั อย่างของ Arduino ค. ตั้งคา่ การบันทึกโปรแกรม ง. บนั ทกึ โปรแกรมลา่ สดุ ไปยัง Sketchbook 3. เมนู Edit > Undo ใชส้ าหรับ? ก. คัดลอกข้อความทีเ่ ลือกไว้มาเกบ็ ในคลปิ บอร์ด ข. เลือกข้อความทั้งหมด ค. ตดั ขอ้ ความที่เลือกไวไ้ ปเก็บในคลิบอร์ด ง. ยกเลกิ คาสั่งหรอื การพิมพ์ครง้ั สุดทา้ ย 4. เมนู Sketch > Verify/Compile ใช้สาหรับ? ก. ส่งั เปิดโฟลเดอร์ท่ีเกบ็ โปรแกรมของผ้ใู ช้ ข. เรยี กใชเ้ พื่อนาเข้าไลบรารีเพ่มิ เติม ค. ใช้คอมไพล์แปลโปรแกรมภาษาซีให้เปน็ ภาษาเครอ่ื ง ง. เพมิ่ ไฟล์ใหก้ บั Sketch Book ปจั จุบนั 5. เม่อื คอมไพลโ์ ปรแกรมเสร็จ Debugging Console แสดงขอ้ ความ? ก. Done Compiling ข. Done Computer ค. Ok Compiling ง. Gone Compiling 6. ขอ้ ใดคือค่า Baud Rate? ก. 4080 ข. 6900 ค. 115200 ง. 56700 7. ตวั กระทาเปรียบเทยี บใช้สาหรับประกอบกับคาส่งั ใด ก. if() และ while() ข. for() และ if() ค. if() และ random() ง. setup() และ else() หน่วยท่ี 2 : ชดุ คำสงั่ และกำรเขียนโปรแกรมควบคมุ
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 48 ตอนท่ี 3 ให้ผูเ้ รียนทาการทดลองการติดตงั้ Arduino IDE และทดสอบ Arduino Uno R3 โดยใช้ เวลา 180 นาที จุดประสงค์เชงิ พฤตกิ รรม 1. สามารถติดตงั้ และทดสอบบอร์ด Arduino Uno R3 ได้ 2. สามารถแก้ปญั หาท่ีทาใหก้ ารตดิ ตั้งไมส่ าเรจ็ ในการตดิ ตั้งบอรด์ Arduino Uno R3 ได้ 3. สามารถทดสอบการทางานของบอร์ด Arduino Uno R3 ได้ อปุ กรณ์การทดลอง 1 โปรแกรม 1 เสน้ 1. โปรแกรม Arduino IDE 1 บอรด์ 2. สายโหลด USB Arduino Uno R3 1 ชดุ 3. บอรด์ Arduino Uno R3 1 เคร่อื ง 4. สายต่อวงจร 1 ตวั 5. เคร่อื งคอมพิวเตอร์ 6. แผงตอ่ วงจร การทดลองท่ี 2.1 รูปที่ 2.15 ตัวอยา่ งการเช่ือมตอ่ บอร์ด Arduino กับคอมพิวเตอร์ ข้ันตอนการทดลอง 1. ดาวน์โหลดโปรแกรม Arduino IDE 2. ตดิ ต้ังโปรแกรมให้ตรงกบั ระบบปฏิบตั กิ ารของคอมพวิ เตอร์ 3. เปิดโปรแกรมตัวอยา่ ง File > Examples > 01.Basics > Blink ประเมินผลการทดลอง 1. สามารถติดตั้งโปรแกรม Arduino IDE ได้ถกู ตอ้ ง 10 คะแนน 2. สามารถทดสอบและอธบิ ายการทางานไดถ้ กู ตอ้ ง 10 คะแนน …………………………………… คะแนน รวมคะแนนภาคปฏิบัติ หน่วยท่ี 2 : ชุดคำสงั่ และกำรเขียนโปรแกรมควบคมุ
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 49 การทดลองที่ 2.2 ข้นั ตอนการทดลอง 1. ตอ่ วงจรตามรูปที่ 2.16 2. เขยี นโปรแกรมอา่ นคา่ จากสวติ ช์ 2.1 เมอ่ื กดสวิตชค์ า้ งไว้ใหห้ ลอด LED บนบอรด์ (pin 13) กระพรบิ ดว้ ยความเร็ว 1 ครง้ั ต่อ 2 วนิ าที 2.2 เม่อื ปล่อยสวิตชใ์ หห้ ลอด LED บนบอรด์ (pin 13) กระพริบดว้ ยความเร็ว 1 ครัง้ ตอ่ 100 มิลลวิ ินาที รูปที่ 2.2 รูปแบบการต่อวงจรการทดลองที่ 2.2 ประเมินผลการทดลอง 10 คะแนน 10 คะแนน 1. สามารถเขยี นโปรแกรมได้ถกู ต้องตามเง่ือนไข 2. สามารถทดสอบและอธบิ ายการทางานได้ถูกต้อง ……………………… คะแนน รวมคะแนนภาคปฏิบตั ิ หน่วยที่ 2 : ชดุ คำสงั่ และกำรเขียนโปรแกรมควบคมุ
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 50 การทดลองที่ 2.3 ข้ันตอนการทดลอง 1. ตอ่ วงจรตามรูปที่ 2.16 2. เงอ่ื นไขในการเขยี นโปรแกรม 2.1 ใชค้ าสั่ง switch-case (ตัวอยา่ งโปรแกรม File > Examples > 05.Control > switchCase) 2.2 รบั ค่าจาก Serial Monitor (โดยใช้ฟงั กช์ ่ัน Serial.Read() ) 2.3 ใช้ LED บนบอรด์ แสดงความเรว็ ในการกระพรบิ 4 ระดับ ประเมินผลการทดลอง 1. สามารถเขียนโปรแกรมได้ถูกต้องตามเงื่อนไข 10 คะแนน 2. สามารถทดสอบและอธบิ ายการทางานได้ถูกต้อง 10 คะแนน รวมคะแนนภาคปฏิบัติ …………………… คะแนน หน่วยท่ี 2 : ชุดคำสงั่ และกำรเขียนโปรแกรมควบคมุ
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 51 เฉลยแบบทดสอบกอ่ นเรียน 5. ง 10. ง หนว่ ยที่ 2 ชดุ คาส่ังและการเขยี นโปรแกรมควบคุม 1. ก 2. ข 3. ก 4. ค 6. ง 7. ก 8. ก 9. ก เฉลยแบบทดสอบหลังเรยี น 5. ค 10. ข หน่วยท่ี 2 ชุดคาสัง่ และการเขยี นโปรแกรมควบคุม 1. ค 2. ง 3. ข 4. ก 6. ข 7. ง 8. ค 9. ก เฉลยแบบฝึกหดั หนว่ ยที่ 2 ชุดคาสง่ั และการเขยี นโปรแกรมควบคุม ตอนที่ 1 ให้ผ้เู รียนกาเคร่อื งหมายถกู () หนา้ ข้อท่คี ิดว่าถกู และกาเคร่ืองหมายผดิ () ในข้อทคี่ ิดวา่ ผิด ซอฟตแ์ วร์ที่ใช้ในการพัฒนาบอร์ด Arduino นัน้ คอื โปรแกรมทเ่ี รยี กวา่ Arduino LDP ขนดของโปรแกรม Arduino โดยปกติแล้วจะใหญ่กว่าโคด้ AVR โค้ด Arduino เขา้ ถึงจากรจี สิ เตอรโ์ ดยตรง โหลดโปรแกรม IDE ฟรที เี่ วป http://Arduino.cc/en/Main/Software ระบบปฏิบตั กิ าร Linux ไมส่ ามารถลงโปรแกรม Arduino IDE ได้ ชพิ CP210x และ FTDI เปน็ ตัวสือ่ สารผ่าน USB ของบอร์ดไมโครคอนโทรลเลอร์ เมนู (Menu) เป็นสว่ นไว้สาหรบั ตรวจเชค็ ว่าโปรแกรมเขียนถูกไวยกรณห์ รอื ปา่ ว แถบเครือ่ งมอื (Toolbar) เปน็ การนาคาส่งั ทีใ่ ช้งานนาน ๆ คร้งั มาสร้างเป็นปุ่ม พน้ื ทเี่ ขยี นโปรแกรม (Coding Area) เป็นพ้นื ท่ีสาหรับเขียนโปรแกรมภาษา C/C++ Debugging Console เป็นพืน้ ทแี่ สดงค่าจากคาส่งั Analog Read ตอนที่ 2 ให้ผ้เู รียนเลือกคาตอบที่ถูกท่สี ุดแลว้ กาเคร่ืองหมายกากบาท () ให้ครบทุกข้อ เฉลยแบบฝึกหดั หนว่ ยท่ี 2 ชุดคาสั่งและการเขียนโปรแกรมควบคุม 1. ง 2. ก 3. ง 4. ค 5. ก 6. ค 7. ก 8. ค 9. ก 10. ข หน่วยที่ 2 : ชุดคำสงั่ และกำรเขียนโปรแกรมควบคมุ
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 55 หน่วยที่ 3 การเชื่อมต่อผา่ นพอรต์ อนุกรม สาระสาคัญ ไมโครคอนโทรลเลอรส์ ่วนใหญ่มคี วามสามารถในการรบั ส่งขอ้ มลู ระหว่างอุปกรณ์อ่นื ๆ กับคอมพิวเตอร์ผ่านพอร์ตอนุกรม (serial port) เราจงึ สามารถนาคุณสมบัติน้ีมาใช้ในการ แสดงผลลพั ธก์ ารทางานของบอรด์ ไมโครคอนโทรลเลอรท์ ใ่ี หร้ ายละเอยี ดมากกว่าการแสดงผล ผ่าน LED เพยี งอยา่ งเดยี วได้ อกี ทงั้ สภาพแวดลอ้ มของ Arduino ยงั มคี าสงั่ จาพวก Serial.print ทน่ี าไปใชใ้ นการส่งขอ้ ความมาแสดงผลบนหน้าจอคอมพวิ เตอรไ์ ดท้ นั ที โดยจะแบ่งพอรต์ สาหรบั เช่อื มต่อออกเป็น 2 ส่วนคอื ส่วนแรกตดิ ต่อพอรต์ อนุกรมเสมอื น (Virtual Com Port) จากการ ทางานของส่วนเช่อื มต่อพอร์ต USB ฟังก์ชนั่ ท่ใี ช้คือ Serial อกี ส่วนหน่ึงคือ ขาพอร์ตส่อื สาร ขอ้ มลู อนุกรมโดยใชข้ า0 (RxD) และ 1 (TxD) ฟังกช์ นั่ ของ Arduino ทใ่ี ชค้ อื Serial1 สาระการเรียนรู้ 3.1 การเรยี นรเู้ กย่ี วกบั การเชอ่ื มต่อผ่านพอรต์ อนุกรม 3.2 การเรยี นรเู้ กย่ี วกบั ฟังก์ชนั่ สาหรบั การรบั สง่ ขอ้ มลู ผา่ นพอรต์ อนุกรม จุดประสงค์เชิงพฤตกิ รรม 1. นกั เรยี นใชฟ้ ังกช์ นั่ อนิ พตุ เอาตพ์ ตุ ดจิ ติ อล (Digital l/0) ไดถ้ ูกตอ้ ง 2.นกั เรยี น ใชฟ้ ังกช์ นั่ เกย่ี วกบั การส่อื สารผ่านพอรต์ อนุกรมได้ถกู ตอ้ ง 3. นกั เรยี นใชฟ้ ังกช์ นั่ อนิ พุตเอา้ ตพ์ ตุ แอนะลอ็ กได้ถูกตอ้ ง 4. นกั เรยี นใชฟ้ ังกช์ นั่ เกย่ี วกบั เวลาไดถ้ ูกตอ้ ง 5.นกั เรยี นใชฟ้ ังกช์ นั่ เกย่ี วกบั อนิ เตอรร์ ปั ตภ์ ายนอกได้ถูกตอ้ ง 6. นกั เรยี นใชฟ้ ังกช์ นั่ ทางคณติ ศาสตรไ์ ดถ้ ูกตอ้ ง หน่วยที่ 3 : การเช่ือมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 56 แบบทดสอบกอ่ นเรยี น หน่วยท่ี 3 การเชื่อมต่อผ่านพอร์ตอนกุ รม คาสงั่ จงเลือกคาตอบท่ีถกู ที่สดุ เพียงข้อเดียว 1. การสอ่ื สารแบบอนุกรมนนั้ ตอ้ งการใชส้ ายสญั ญาณอยา่ งน้อยกเ่ี สน้ ต่อการรบั ส่งขอ้ มลู ? ก. 3 เสน้ ข. 5 เสน้ ค. 7 เสน้ ง. 9 เสน้ จ. 11 เสน้ 2. ขาพอรต์ ส่อื สารขอ้ มลู อนุกรมของ Arduino Uno R3 โดยใชข้ า? ก. ขา0 และ ขา1 ข. ขา1 และ ขา2 ค. ขา2 และ ขา3 ง. ขา3 และ ขา4 จ. ขา1 และ ขา3 3. ขาพอรต์ สอ่ื สารขอ้ มลู อนุกรมคอื ขา? ก. RxP และ TxP ข. RxC และ TxC ค. RdX และ TdX ง. RxD และ TxD จ. RCx และ TCx 4. การสอ่ื สารแบบอนุกรม ไมม่ กี าร synchronous แต่ใชเ้ ทคนิคการ? ก. Shift Baud ข. Shift Baud rate ค. Shift Bit ง. Shift Bit rate จ. Shift rate Baud หน่วยที่ 3 : การเชื่อมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 57 5. Start bit หรอื บติ เรม่ิ ตน้ มขี นาด? ก. 1 บติ ข. 2 บติ ค. 3 บติ ง. 4 บติ จ. 5 บติ 6. Data bit หรอื บติ ขอ้ มลู มขี นาด? ก. 2 บติ ข. 4 บติ ค. 6 บติ ง. 8 บติ จ. 10 บติ 7. อตั ราบอดของการรบั สง่ ขอ้ มลู อนุกรมในหน่วย? ก. บติ ต่อนาที ข. บติ ต่อวนิ าที ค. บติ ต่อไมโครวนิ าที ง. บติ ต่อนาโนวนิ าที จ. บติ ต่อพโิ กนาที 8. ขอ้ ใดไมใ่ ชค่ ่าอตั ราบอดของการรบั สง่ ขอ้ มลู อนุกรม? ก. 4800 ข. 9600 ค. 19900 ง. 115200 จ. 230400 9. คาสงั่ ใดใชส้ าหรบั ลา้ งบฟั เฟอรต์ วั รบั ขอ้ มลู พอรต์ อนุกรมใหว้ า่ ง? ก. Serial.flush(); ข. Serial.flash(); ค. Serial.flesh(); ง. Serial.flosh(); จ. Serial.flish(); หน่วยท่ี 3 : การเชื่อมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 58 10. คาสงั่ ใดใชส้ าหรบั ส่งขอ้ ความคาวา่ Arduino Uno ออกพอรต์ อนุกรม? ก. Serial.print (\"Arduino Uno); ข. Serial.print (*Arduino Uno*); ค. Serial.print (Arduino Uno); ง. Serial.print (\"Arduino Uno\") จ. Serial.print (Arduino Uno) หน่วยท่ี 3 : การเช่ือมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 59 โปรแกรม Arduino IDE ได้จดั เตรยี มฟังก์ชนั่ พ้ืนฐาน เช่นฟังก์ชนั่ เก่ียวกับขาพอร์ต อนิ พุตเอาต์พุตดจิ ติ อล,อนิ พุตเอาตพ์ ุตแอนะลอ็ กเป็นต้น ดงั นนั้ ในการเขยี นโปรแกรมจงึ เรยี กใช้ ฟังกช์ นั่ เหล่าน้ีไดท้ นั ทโี ดยไม่ต้องใช้คาสงั่ #include เพ่อื ผนวกไฟลเ์ พม่ิ เตมิ แต่อย่างใด นอกจาก ฟังก์ชนั่ พ้นื ฐานเหล่าน้ีแล้ว นักพฒั นาท่านอ่นื ๆ ท่รี ่วมในโครงการ Arduino น้ีกไ็ ด้เพม่ิ ไลบรารี อ่นื ๆเช่น ไลบรารคี วบคุมมอเตอร์, การตดิ ต่อกบั อุปกรณ์บสั I2C ฯลฯ ในการเรยี กใชง้ านต้อง เพมิ่ บรรทดั #include เพ่อื ผนวกไฟลท์ เ่ี หมาะสมก่อน จงึ จะเรยี กใชฟ้ ังกช์ นั่ ได 3.1 การเรยี นรู้เกยี่ วกบั การเชอ่ื มต่อผา่ นพอร์ตอนกุ รม การส่อื สารแบบอนุกรมนัน้ ต้องการใช้สายสญั ญาณเพยี งเส้นเดยี วต่อการส่งสญั ญาณ หน่ึงทิศทาง ดังนั้น การเช่ือมต่ออุปกรณ์ เข้าด้วยกันจึงต้องการสายไฟเพียง 3 เส้น เป็ น สายสญั ญาณสองเสน้ เพ่อื รบั ส่งขอ้ มลู สองทศิ ทาง และสายอ้างองิ ศกั ยไ์ ฟฟ้า (หรอื กราวนด์) อกี สองเส้น แต่อุปกรณ์ต่อพ่วงส่วนมากมกั ใชไ้ ฟเลย้ี งวงจรเพม่ิ เตมิ จงึ มกี ารเพมิ่ สายไฟอกี เสน้ ดงั ภาพท่ี 3.1 รปู ที่ 3.1 ตวั อยา่ งการต่อใชง้ านการเชอ่ื มต่อผ่านพอรต์ อนุกรม ที่มา : http://robotic-controls.com/book/export/html/59 อีกส่วนหน่ึงคือ ขาพอร์ตส่ือสารข้อมูลอนุกรมโดยใช้ขา0 (RxD) และ ขา1 (TxD) ฟังกช์ นั่ ของ Arduino ทใ่ี ชค้ อื Serial1 ดงั นนั้ เมอ่ื เลอื กใชง้ านเป็นขาพอรต์ ส่อื สารขอ้ มลู อนุกรม แลว้ จะไมส่ ามารถใชข้ าพอรต์ 0 และ 1 เป็นพอรต์ ดจิ ติ อลได้ การส่อื สารแบบอนุกรม หรอื Serial เป็นส่งขอ้ มลู โดยใชเ้ ทคนิคการเล่อื นขอ้ มลู (Shift Bit) ส่งไปทล่ี ะบติ บนสายสญั ญาณเสน้ เดยี ว โดยการส่งขอ้ มูลแบบ Serial จะไม่มกี าร sync สญั ญาณนาฬิการะหว่างตวั รบั และตวั ส่ง แต่จะ อาศยั วธิ ตี งั้ ค่าความเรว็ ในการรบั ส่งสญั ญาณให้เท่ากัน หรอื เรยี กว่าตงั้ ค่า baud rate และส่ง หน่วยท่ี 3 : การเช่ือมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 60 สญั ญาณ start และ stop เพอ่ื บอกว่า เป็นสว่ นตน้ ของขอ้ มลู (start bit) หรอื ส่วนทา้ ยของขอ้ มลู (stop bit) ดงั รปู ท่ี 3.2 รปู ท่ี 3.2 การส่อื สารแบบอนุกรม ท่ีมา : http://electronica.ugr.es บิตเร่ิมต้น (Start bit) จะมขี นาด 1 บติ จะเป็นลอจกิ LOW บิตข้อมลู (Data bit) 8 บติ ขอ้ มลู ทจ่ี ะสง่ บิตภาวะค่หู รือคี่ (Parity bit) มขี นาด 1 บติ ใช้ตรวจสอบขอ้ มูล ถ้าขอ้ มูลท่ี ไดร้ บั ไมส่ มบรู ณ์ นาเขา้ คา่ มา check กบั Parity bit จะไดค้ า่ ไมต่ รงกนั บิตหยดุ (Stop bit) เป็นการระบถุ งึ ขอบเขตของการสน้ิ สดุ ขอ้ มลู จะเป็นลอจกิ HIGH 3.2 การเรยี นร้เู กี่ยวกบั ฟังก์ช่ันสาหรบั การรบั สง่ ข้อมูลผ่านพอรต์ อนุกรม Arduino IDE มฟี ังกช์ นั่ เกย่ี วกบั การรบั สง่ ขอ้ มลู ผ่านพอรต์ อนุกรมมาพรอ้ มใชง้ าน ดงั น้ี 3.2.1 available() ใช้แจ้งว่าได้รบั ขอ้ มูลตัวอกั ษร (characters) และพร้อมสาหรบั การ อ่านไปใชง้ าน รปู แบบ Serial. available(); ค่าที่ได้จากการเรียกใช้งานฟังก์ชนั่ จานวนไบต์ท่พี รอ้ มสาหรบั การอ่านค่า โดย เกบ็ ขอ้ มลู ในบฟั เฟอรต์ วั รบั ถ้ามขี อ้ มลู ฟังก์ชนั่ จะคนื ค่าทม่ี ากว่า 0 โดยบฟั เฟอรส์ ามารถเกบ็ ขอ้ มูล ไดส้ งู สดุ 128 ไบต์ แต่ถา้ ไมม่ ขี อ้ มลู จะมคี า่ เป็น 0 หน่วยที่ 3 : การเชื่อมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 61 ตวั อย่างการใช้งาน รปู ที่ 3.3 โปรแกรมตวั อยา่ งเรยี กใชง้ านฟังก์ชนั่ Serial.available(); 3.2.2 begin() คอื การกาหนดค่าอตั ราบอดของการรบั ส่งขอ้ มูลอนุกรมในหน่วยบติ ต่อ วนิ าที (bits per second : bps) โดยใช้ค่านาไปใชง้ านมดี งั ต่อไปน้ีคอื 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 หรอื 115200 รปู แบบ Serial.begin(datarate); พารามิเตอร์ int datarate ในหน่วยบติ ต่อวนิ าที (baud หรอื bps) ตวั อย่างการใช้งาน รปู ท่ี 3.4 โปรแกรมตวั อยา่ งเรยี กใชง้ านฟังก์ชนั่ Serial. 3.2.3 read() ใชอ้ ่านค่าขอ้ มลู ทไ่ี ดร้ บั จากพอรต์ อนุกรม รปู แบบ Serial.read(); ค่าที่ได้จากการเรียกใช้งานฟังกช์ นั่ เป็นเลข int ทเ่ี ป็นไบตแ์ รกของขอ้ มลู ท่ี ไดร้ บั หน่วยท่ี 3 : การเช่ือมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 62 ตวั อย่างการใช้งาน รปู ที่ 3.5 โปรแกรมตวั อยา่ งเรยี กใชง้ านฟังกช์ นั่ Serial.read(); 3.2.4 flush() ใชล้ า้ งบฟั เฟอรต์ วั รบั ขอ้ มลู พอรต์ อนุกรมใหว้ า่ ง รปู แบบ Serial.flush(); 3.2.5 print() รปู แบบ Serial.print(val); Serial.print(val, format); Serial.print(\" \"); พารามิเตอร์ val เป็นขอ้ มลู เลขจานวนเตม็ ไดแ้ ก่ char, int หรอื เลขทศนยิ มทต่ี ดั เศษออกเป็น จานวนเตม็ format จะพมิ พค์ า่ ตวั แปร val เป็นเลขฐานสบิ โดยพมิ พต์ วั อกั ษรรหสั ASCIIx \" \" เครอ่ื งหมายอญั ประกาศ (double quote) ทอ่ี ยภู่ ายในวงเลบ็ เป็นการส่ง ขอ้ ความทอ่ี ยภู่ ายในเครอ่ื งหมายอญั ประกาศออกพอรต์ อนุกรม หน่วยท่ี 3 : การเชื่อมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 63 ตวั อย่างการใช้งาน รปู ท่ี 3.6 โปรแกรมตวั อยา่ งเรยี กใชง้ านฟังก์ชนั่ Serial.print(); หน่วยที่ 3 : การเชื่อมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 64 3.2.5 println() เป็นฟังก์ชนั่ พมิ พ์ (หรอื ส่ง) ขอ้ มูลออกทางพอรต์ อนุกรมตามด้วยรหสั carriage return (รหสั ASCII หมายเลข 13 หรอื \\r) และ linefeed (รหสั ASCII หมายเลข 10 หรอื \\n) เพ่อื ใหเ้ กดิ การเล่อื นบรรทดั และขน้ึ บรรทดั ใหม่ หลงั จากพมิ พข์ อ้ ความมรี ปู แบบเหมอื น คาสงั่ Serial.print() รปู แบบ Serial.println(); ตวั อย่างการใช้งาน รปู ท่ี 3.7 โปรแกรมตวั อยา่ งเรยี กใชง้ านฟังกช์ นั่ Serial.println(); นอกจากน้ีทางเวปไซต์ของ Arduino.cc ยงั มตี วั อย่างและฟังก์ชนั่ อ่นื ๆ ใหศ้ กึ ษาเพมิ่ เติม ไดท้ ่ี https://www.arduino.cc/reference/en/language/functions/communication/serial/ หน่วยท่ี 3 : การเชื่อมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 65 3.2.6 การทดลองใช้งาน UART เพ่ือติดต่อกบั คอมพิวเตอร์ บอรด์ Arduino ตดิ ต่อ กบั คอมพิวเตอร์เพ่ือส่อื สารข้อมูลอนุกรมผ่านพอร์ต USB โดยใช้พอร์ตอนุกรมเสมอื นหรอื Virtual COM Port ท่ี เกิ ด ข้ึ น จ า ก ก า ร ท า ง า น ข อ ง ส่ ว น เช่ื อ ม ต่ อ พ อ ร์ต USB ข อ ง ไมโครคอนโทรลเลอร์ ATmega32U4และไดรเวอร์ โดยปกตแิ ลว้ จะเช่อื มต่อพอรต์ อนุกรมเสมอื น ผ่านทางพอรต์ USB เพ่อื ตดิ ต่อกบั คอมพวิ เตอรใ์ นการอปั โหลดโปรแกรมเป็นหลกั แต่นามาใช้ รบั สง่ ขอ้ มลู จากโปรแกรมของผใู้ ชงานกบั คอมพวิ เตอรไ์ ด้ 3.2.7 โปรแกรมรบั ค่าจากพอรต์ อนุกรมเพ่ือกาหนดความเรว็ ในการกระพริบของ LED ในการรบั ค่าจากพอรต์ อนุกรมจะใช้ฟังก์ชนั่ 2 ตวั คอื Serial.avaliable() และ Serial.read() โดย เรม่ิ จากใช้ฟังก์ชนั่ Serial.avaliable() เพ่ือตรวจสอบว่ามีข้อมูลหรอื ไม่ ฟังก์ชนั่ จะคืนค่าเป็นเลข จานวนเต็ม แสดงจานวนขอ้ มลู ในบฟั เฟอรต์ วั รบั ของพอรต์ อนุกรม ถ้าอ่านค่าไดเ้ ท่ากบั 0 แสดง ว่าไมม่ ขี อ้ มลู เม่อื ทดสอบพบว่าฟังก์ชนั่ Serial.avaliable() คนื ค่าไม่เท่ากบั 0 ถดั มาใหใ้ ช้ฟังก์ชนั่ Serial. read() เพ่อื อ่านคา่ จากบฟั เฟอร์ ตวั รบั ฟังกช์ นั่ คนื ค่าเป็นเลขจานวนเตม็ ทเ่ี ป็นไบตแ์ รกของขอ้ มลู (หรอื เป็น -1 ถา้ ไมม่ ขี อ้ มลู ) ตวั อยา่ งการรบั ค่าจากพอรต์ อนุกรม เพ่อื นาค่าทร่ี บั ไดไ้ ปควบคุมอตั ราการกระพรบิ ของ LED มีโปรแกรมดังรูปท่ี 3.7 มีส่วนของโปรแกรมท่ีควรทราบอยู่แห่งห น่ึ งคือ หาก ผพู้ ฒั นาโปรแกรมตอ้ งการใหม้ กี ารแสดงขอ้ ความบนหน้าต่าง Serial monitor ในทุกครงั้ ทเ่ี รมิ่ ตน้ ทางานใหม่ จะต้องหน่วงเวลารอให้วงจร USB ภายใน ATmega16U2 ของ Arduino เตรยี ม ความพร้อมในการทางาน หรอื อีนัมเมอเรชนั่ ให้เสรจ็ สมบูรณ์เสียก่อนด้วยการแทรกคาสงั่ delay(2000); ก่อนใช้ คาสงั่ Serial.print(); หน่วยที่ 3 : การเช่ือมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 66 รปู ท่ี 3.8 โปรแกรมการกาหนดความเรว็ ในการกระพรบิ ของ LED จากโปรแกรมดงั รูปท่ี 3.8 โปรแกรมน้ีจะพมิ พ์ขอ้ ความ “Plese push button 1-5” ออก ทางพอร์ตอนุกรมแล้วรอให้ผู้ทดลองกดปุ่มแป้นคีย์บอร์ด 1 ถึง 5 นอกนัน้ โปรแกรมจะไม่ ตอบสนองการทางาน เพ่ือไปทาการคานวนค่าหน่วงเวลาในการกระพรบิ เม่ือทาการกด หมายเลขแล้วจะแสดงข้อความ “I received button No.” ตามด้วยหมายเลขท่กี ด โดยท่แี ต่ละ หมายเลขจะกาหนดความเรว็ ดงั ตารางท่ี 3.1 ตาราง 3.1 แสดงความเรว็ ในการกระพรบิ ของหลอด LED หมายเลข ความเรว็ ในการกระพรบิ ของ LED 1 สวา่ ง 0.2 วนิ าที ดบั 0.2 วนิ าที 2 สว่าง 0.4 วนิ าที ดบั 0.4 วนิ าที 3 สวา่ ง 0.6 วนิ าที ดบั 0.6 วนิ าที 4 สวา่ ง 0.8 วนิ าที ดบั 0.8 วนิ าที 5 สวา่ ง 1.0 วนิ าที ดบั 1.0 วนิ าที หน่วยท่ี 3 : การเชื่อมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 67 แบบทดสอบหลังเรยี น หนว่ ยที่ 3 การเช่ือมต่อผา่ นพอรต์ อนกุ รม คาสงั่ จงเลือกคาตอบที่ถกู ที่สดุ เพียงข้อเดียว 1. การส่อื สารแบบอนุกรมนนั้ ตอ้ งการใชส้ ายสญั ญาณอยา่ งน้อยกเ่ี สน้ ต่อการรบั สง่ ขอ้ มลู ? ก. 3 เสน้ ข. 5 เสน้ ค. 7 เสน้ ง. 9 เสน้ จ. 11 เสน้ 2. ขาพอรต์ ส่อื สารขอ้ มลู อนุกรมของ Arduino Uno R3 โดยใชข้ า? ก. ขา0 และ ขา1 ข. ขา1 และ ขา2 ค. ขา2 และ ขา3 ง. ขา3 และ ขา4 จ. ขา1 และ ขา3 3. ขาพอรต์ ส่อื สารขอ้ มลู อนุกรมคอื ขา? ก. RxP และ TxP ข. RxC และ TxC ค. RdX และ TdX ง. RxD และ TxD จ. RCx และ TCx 4. การส่อื สารแบบอนุกรม ไมม่ กี าร synchronous แต่ใชเ้ ทคนิคการ? ก. Shift Baud ข. Shift Baud rate ค. Shift Bit ง. Shift Bit rate จ. Shift rate Baud หน่วยท่ี 3 : การเชื่อมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 68 5. Start bit หรอื บติ เรม่ิ ตน้ มขี นาด? ก. 1 บติ ข. 2 บติ ค. 3 บติ ง. 4 บติ จ. 5 บติ 6. Data bit หรอื บติ ขอ้ มลู มขี นาด? ก. 2 บติ ข. 4 บติ ค. 6 บติ ง. 8 บติ จ. 10 บติ 7. อตั ราบอดของการรบั สง่ ขอ้ มลู อนุกรมในหน่วย? ก. บติ ต่อนาที ข. บติ ต่อวนิ าที ค. บติ ต่อไมโครวนิ าที ง. บติ ต่อนาโนวนิ าที จ. บติ ต่อพโิ กนาที 8. ขอ้ ใดไมใ่ ชค่ ่าอตั ราบอดของการรบั ส่งขอ้ มลู อนุกรม? ก. 4800 ข. 9600 ค. 19900 ง. 115200 จ. 230400 9. คาสงั่ ใดใชส้ าหรบั ลา้ งบฟั เฟอรต์ วั รบั ขอ้ มลู พอรต์ อนุกรมใหว้ า่ ง? ก. Serial.flush(); ข. Serial.flash(); ค. Serial.flesh(); ง. Serial.flosh(); จ. Serial.flish(); หน่วยท่ี 3 : การเชื่อมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 69 10. คาสงั่ ใดใชส้ าหรบั ส่งขอ้ ความคาวา่ Arduino Uno ออกพอรต์ อนุกรม? ก. Serial.print (\"Arduino Uno); ข. Serial.print (*Arduino Uno*); ค. Serial.print (Arduino Uno); ง. Serial.print (\"Arduino Uno\") จ. Serial.print (Arduino Uno) หน่วยท่ี 3 : การเช่ือมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 70 แบบฝกึ หดั หนว่ ยท่ี 3 การเชื่อมตอ่ ผา่ นพอร์ตอนกุ รม ตอนท่ี 1 ให้ผเู้ รียนเลือกคาตอบที่ถกู ท่ีสดุ แล้วกาเครื่องหมายกากบาท () ให้ครบทกุ ข้อ 1. การเชอ่ื มต่อผา่ นพอรต์ อนุกรมระหว่างตวั รบั และตวั ส่งจะอาศยั วธิ ?ี ก. วธิ ตี งั้ คา่ ปรมิ าณขอ้ มลู ในการรบั สง่ สญั ญาณใหเ้ ทา่ กนั ข. วธิ ตี งั้ คา่ ปรมิ าณขอ้ มลู ในการรบั ส่งสญั ญาณใหไ้ มเ่ ท่ากนั ค. วธิ ตี งั้ ค่าความเรว็ ในการรบั สง่ สญั ญาณใหเ้ ท่ากนั ง. วธิ ตี งั้ ค่าความเรว็ ในการรบั สง่ สญั ญาณใหไ้ มเ่ ท่ากนั จ. วธิ ปี รบั คา่ ความเรว็ การรบั ส่งสญั ญาณใหเ้ ทา่ กนั 2. บติ ภาวะคหู่ รอื ค่ี (Parity bit) มขี นาด? ก. 1 บติ ข. 2 บติ ค. 3 บติ ง. 4 บติ จ. 5 บติ 3. ขอ้ ใดกล่าวถกู เกย่ี วกบั Parity bit? ก. การเรมิ่ ต้นของขอ้ มมลู มลี อจกิ เป็น LOW ข. ระบถุ งึ ขอบเขตของการสน้ิ สดุ ขอ้ มลู จะเป็นลอจกิ HIGH ค. ขอ้ มลู ทจ่ี ะสง่ ง. ตรวจสอบความสมบูรณ์ของขอ้ มลู จ. เพมิ่ ขอ้ มลู 4. ขอ้ ใดกล่าวถูกตอ้ งเกย่ี วกบั ฟังกชนั่ available() ? ก. จานวนไบตท์ พ่ี รอ้ มสาหรบั การอ่านคา่ โดยเกบ็ ขอ้ มลู ในบฟั เฟอรต์ วั รบั สงู สดุ 64 ไบต์ ข. จานวนไบตท์ พ่ี รอ้ มสาหรบั การอ่านคา่ โดยเกบ็ ขอ้ มลู ในบฟั เฟอรต์ วั รบั สงู สุด 128 ไบต์ ค. จานวนไบตท์ พ่ี รอ้ มสาหรบั การอ่านคา่ โดยเกบ็ ขอ้ มลู ในบฟั เฟอรต์ วั รบั สงู สุด 256 ไบต์ หน่วยท่ี 3 : การเช่ือมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 71 ง. จานวนไบตท์ พ่ี รอ้ มสาหรบั การอ่านค่าโดยเกบ็ ขอ้ มลู ในบฟั เฟอรต์ วั รบั สงู สดุ 1 กกิ ะไบต์ จ. ไมม่ ขี อ้ ถกู 5. ขอ้ ใดตรงกบั คาสงั่ Serial.begin(57600) ? ก. กาหนดค่าอตั ราบอด 57600 บติ ต่อวนิ าที ข. กาหนดค่าอตั ราบอด 57600 บติ ต่อมลิ ลวิ นิ าที ค. กาหนดคา่ อตั ราบอด 57600 บติ ต่อไมโครวนิ าที ง. กาหนดคา่ อตั ราบอด 57600 บติ ต่อนาโนวนิ าที จ. กาหนดค่าอตั ราบอด 57600 บติ ต่อพโิ กวนิ าที 6. เครอ่ื งหมาย double quote ในฟังกช์ นั่ print() ใชส้ าหรบั ? ก. การรบั ขอ้ ความทางพอรต์ อนุกรม ข. การอ่านขอ้ ความทางพอรต์ อนุกรม ค. การสง่ ภาพออกทางพอรต์ อนุกรม ง. การส่งขอ้ ความออกทางพอรต์ อนุกรม จ. การแสดงคา่ คงทอ่ี อกทางพอรต์ อนุกรม 7. ฟังกช์ นั่ println() ต่างจาก print() ตรงท?่ี ก. ขน้ึ บรรทดั ใหมก่ ่อนพมิ พข์ อ้ ความ ข. ขน้ึ บรรทดั ใหมห่ ลงั จากพมิ พข์ อ้ ความ ค. ขน้ึ บรรทดั ใหมก่ ่อนและหลงั พมิ พข์ อ้ ความ ง. ขน้ึ บรรทดั ใหมท่ ุก ๆ การพมิ พข์ อ้ ความ จ. ไมม่ ขี อ้ ใดถูก 8. คาสงั่ ใดใชแ้ ปลงเลข 35 ในฐานสบิ ไปยงั เลขฐาน 8 ออกทางพอรต์ อนุกรม? ก. Serial.print (35, BIN); ข. Serial.print (35, OCT); ค. Serial.print (35, DEC); ง. Serial.print (35, HEX); จ. Serial.print (35, READ); หน่วยท่ี 3 : การเช่ือมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 72 9. คาสงั่ ใดใชแ้ ปลงเลข 53 ในฐานสบิ ไปยงั เลขฐาน 16 ออกทางพอรต์ อนุกรม? ก. Serial.print (53, BIN); ข. Serial.print (53, OCT); ค. Serial.print (53, DEC); ง. Serial.print (53, HEX); จ. Serial.print (35, READ); 10. ค่ารหสั ASCII ของตวั อกั ษร 1 คอื ? ก. 49 ข. 50 ค. 51 ง. 52 จ. 53 หน่วยท่ี 3 : การเช่ือมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 73 ตอนที่ 2 ใหผ้ เู้ รยี นทาการทดลองและเขยี นโปรแกรมรบั -ส่งค่าจากการเชอ่ื มต่อผ่านพอรต์ อนุกรม ดว้ ยบอรด์ Arduino Uno R3 โดยใชเ้ วลา 180 นาที จดุ ประสงคเ์ ชิงพฤติกรรม 1. สามารถใชฟ้ ังก์ชนั่ พน้ื ฐานการรบั -สง่ ขอ้ มลู ผ่านพอรต์ อนุกรมได้ 2. สามารถต่อใชง้ านวงจรและเขยี นโปรแกรมได้ 3. สามารถอธบิ ายโปรแกรมและแกป้ ัญหาในการรบั -สง่ ขอ้ มลู ผ่านพอรต์ อนุกรมเพอ่ื ควบคุมความเรว็ ในการกระพรบิ ของหลอด LED ดว้ ยบอรด์ Arduino Uno R3 ได้ อปุ กรณ์การทดลอง 1. โปรแกรม Arduino IDE 1 โปรแกรม 2. สายโหลด USB Arduino Uno R3 1 เสน้ 3. บอรด์ Arduino Uno R3 1 บอรด์ 4. สายต่อวงจร 1 ชดุ 5. เครอ่ื งคอมพวิ เตอร์ 1 เครอ่ื ง 6. แผงต่อวงจร 1 ตวั 7. หลอด LED 1 หลอด 8. ตวั ตา้ นทานขนาด 220 โอหม์ 1 ตวั การทดลองท่ี 3.1 การส่งข้อมลู ออกพอรต์ อนุกรม ขนั้ ตอนการทดลอง 1. เปิดโปรแกรม Arduino IDE 2. ต่อบอรด์ Arduino เขา้ กบั คอมพวิ เตอร์ 3. เขยี นโปรแกรมและอพั โหลดโปรแกรม รปู ที่ 3.9 การเช่อื มต่อบอรด์ Arduino กบั คอมพวิ เตอรส์ าหรบั การทดลองท่ี 3.1 หน่วยที่ 3 : การเช่ือมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 74 Code รปู ที่ 3.10 โปรแกรมสาหรบั การทดลองท่ี 3.1 ประเมินผลการทดลอง 1. สามารถเขยี นโปรแกรมและต่อวงจรไดถ้ ูกตอ้ ง 10 คะแนน 2. สามารถทดสอบและอธบิ ายการทางานไดถ้ ูกตอ้ ง 10 คะแนน …………………………………… รวมคะแนนภาคปฏิบตั ิ คะแนน หน่วยท่ี 3 : การเชื่อมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 75 การทดลองที่ 3.2 การรบั ข้อมลู ออกพอรต์ อนุกรม ขนั้ ตอนการทดลอง 1. เปิดโปรแกรม Arduino IDE 2. ต่อบอรด์ Arduino เขา้ กบั คอมพวิ เตอร์ 3. เขยี นโปรแกรมและอพั โหลดโปรแกรม รปู ท่ี 3.11 การเช่อื มต่อบอรด์ Arduino กบั คอมพวิ เตอรส์ าหรบั การทดลองท่ี 3.2 Code รปู ที่ 3.12 โปรแกรมสาหรบั การทดลองท่ี 3.2 ประเมินผลการทดลอง 1. สามารถเขยี นโปรแกรมและต่อวงจรไดถ้ กู ตอ้ ง 10 คะแนน 10 คะแนน 2. สามารถทดสอบและอธบิ ายการทางานได้ ถูกตอ้ ง …………………… คะแนน รวมคะแนนภาคปฏิบตั ิ หน่วยที่ 3 : การเชื่อมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 76 การทดลองที่ 3.3 การรบั ค่าจากพอรต์ อนุกรมเพื่อกาหนดความเรว็ ในการกระพริบของ LED ขนั้ ตอนการทดลอง 1. ต่อวงจรตามรปู ท่ี 3.13 2. รบั ค่าตวั เลขจากคยี บ์ อรด์ เลข 1 - 5 3. เงอ่ื นไขความเรว็ ในการกระพรบิ 3.1 หมายเลข 1 สว่าง 0.1 วนิ าที ดบั 0.1 วนิ าที 3.2 หมายเลข 2 สว่าง 0.2 วนิ าที ดบั 0.2 วนิ าที 3.3 หมายเลข 3 สว่าง 0.3 วนิ าที ดบั 0.3 วนิ าที 3.4 หมายเลข 4 สว่าง 0.4 วนิ าที ดบั 0.4 วนิ าที 3.5 หมายเลข 5 สวา่ ง 0.5 วนิ าที ดบั 0.5 วนิ าที 3.6 แสดงขอ้ ความ “Button is no.” ตามดว้ ยหมายเลขทก่ี ดแสดงทาง Serial Monitor รปู ที่ 3.13 วงจรสาหรบั การทดลองท่ี 3.3 ประเมินผลการทดลอง 1. สามารถต่อวงจรและเขยี นโปรแกรมไดถ้ กู ตอ้ งตาม 10 คะแนน เงอ่ื นไข 10 คะแนน 2. สามารถทดสอบและอธบิ ายการทางานไดถ้ ูกตอ้ ง ……………… คะแนน รวมคะแนนภาคปฏิบตั ิ หน่วยท่ี 3 : การเชื่อมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 77 เฉลยแบบทดสอบก่อนเรียน 5. ก 10. ง หน่วยที่ 3 การเชื่อมต่อผา่ นพอรต์ อนุกรม 1. ก 2. ก 3. ง 4. ค 6. ง 7. ข 8. ค 9. ก เฉลยแบบทดสอบหลงั เรียน 5. ง 10. ค หน่วยท่ี 3 การเชื่อมต่อผา่ นพอรต์ อนุกรม 1. ง 2. ค 3. ข 4. ว 6. ข 7. ก 8. ง 9. ข เฉลยแบบฝึ กหดั หน่วยท่ี 3 การเชื่อมต่อผา่ นพอรต์ อนุกรม ตอนที่ 1 1. ค 2. ก 3. ง 4. ข 5. ก 6. ง 7. ข 8. ข 9. ง 10. ก หน่วยที่ 3 : การเช่ือมต่อผา่ นพอรต์ อนุกรม
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 78 หน่วยที่ 4 การเชื่อมตอ่ ไมโครคอนโทรลเลอร์กับอปุ กรณอ์ นิ พตุ สาระสาคญั สวติ ช์เป็นอุปกรณ์ทำหน้ำท่ตี ดั หรอื ต่อกระแสไฟฟ้ำในวงจร นิยมนำมำใช้ควบคุมกำร เปิด และปิดวงจรไฟฟ้ำ ซง่ึ ในงำนควบคุมดว้ ยไมโครคอนโทรลเลอรก์ จ็ ะมกี ำรใชง้ ำนสวติ ชเ์ ป็น ตวั เปิดปิดและรบั สญั ญำณ ดงั นนั้ ในหน่วยกำรเรยี นจะกลำ่ วถงึ กำรทำงำนของวงจรสวติ ช์ กำรรบั ขอ้ มูลจำกสวติ ช์ กำรเช่อื มต่อไมโครคอนโทรลเลอรก์ บั สวติ ช์ กำรเขยี นโปรแกรมรบั ขอ้ มูลจำก สวติ ช์ สาระการเรียนรู้ 4.1 หลกั กำรทำงำนของวงจรสวติ ซ์ 4.2 กำรเชอ่ื มต่อไมโครคอนโทรลเลอรก์ บั สวติ ซ์ 4.3 กำรรบั ขอ้ มลู จำกพอรต์ 4.4 กำรเขยี นโปรแกรมรบั คำ่ จำกสวติ ซ์ 4.5 โปรแกรมแก้ปัญหำสญั ญำณรบกวนในกำรกดสวติ ซโ์ ดยใชซ้ อฟตแ์ วร์ 4.6 ฟังกช์ นั่ เกย่ี วกบั อนิ เตอรร์ ปั ตภ์ ำยนอก จุดประสงคเ์ ชงิ พฤติกรรม 1. นกั เรยี นอธบิ ำยกำรควำมรเู้ บอ้ื งตน้ เกย่ี วกบั สวติ ชไ์ ดถ้ กู ตอ้ ง 2. นกั เรยี นสำมำรถต่อวงจรสวติ ชไ์ ดถ้ กู ตอ้ ง 3. นกั เรยี นสำมำรถเช่อื มต่อคอนโทรลเลอรก์ บั สวติ ชไ์ ดถ้ กู ตอ้ ง 4. นกั เรยี นสำมำรถใชง้ ำนคอนโทรลเลอรก์ บั สวติ ชไ์ ดถ้ กู ตอ้ ง หน่วยท่ี 4 : การเชื่อมต่อไมโครคอนโทรลเลอรก์ บั อปุ กรณ์อินพตุ
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 79 แบบทดสอบก่อนเรยี น หน่วยท่ี 4 การเชอื่ มต่อไมโครคอนโทรลเลอร์กับอปุ กรณอ์ นิ พุต คาสงั่ จงเลือกคาตอบที่ถกู ที่สดุ เพียงข้อเดียว 1. สวติ ชเ์ ป็นอปุ กรณ์ทำหน้ำท?่ี ก. ตดั กระแสไฟฟ้ำในวงจร ข. ต่อกระแสไฟฟ้ำในวงจร ค. ตดั หรอื ต่อกระแสไฟฟ้ำในวงจร ง. เปิดหลอดไฟ LED จ. จ่ำยกระแสไฟในวงจร 2. ในงำนควบคมุ ดว้ ยไมโครคอนโทรลเลอรน์ ยิ มใชส้ วติ ชท์ เ่ี รยี กว่ำ? ก. Micro Switch ข. Nano Switch ค. Limit Switch ง. On Switch จ. Off Switch 3. กำรทำงำนของวงจรสวติ ชใ์ นสภำวะปกตหิ รอื ขณะทไ่ี มม่ กี ำรกดสวติ ชจ์ ะไดเ้ อำ้ ทพ์ ตุ เป็น? ก. N/A ข. 12 Volt ค. ลอจกิ “0” ง. ลอจกิ “1” จ. NC 4. สำหรบั Arduino ลอจกิ “1” มรี ะดบั แรงดนั ไฟ? ก. แรงดนั ไฟ 0 โวลท์ ข. แรงดนั ไฟ 1 โวลท์ ค. แรงดนั ไฟ 3.3 โวลท์ ง. แรงดนั ไฟ 5 โวลท์ จ. แรงดนั ไฟ 3.5 โวลท์ หน่วยท่ี 4 : การเช่ือมต่อไมโครคอนโทรลเลอรก์ บั อปุ กรณ์อินพตุ
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 80 5. ตงั้ แตเ่ รม่ิ ตน้ ของขำพอรต์ ของ Arduino Uno จะถกู กำหนดใหเ้ ป็น? ก. OUTPUT ข. INPUT ค. HIGH ง. LOW จ. BEGIN 6. สำหรบั ขำอนิ พตุ เมอ่ื ไมม่ อี นิ พตุ ป้อนจะตอ้ งกำหนดคำ่ แรงดนั ใหแ้ น่นอน ทำไดโ้ ดย? ก. Pull-up Capacitor ข. Pull-up Resistor ค. Pull-up Inductor ง. Pull-up Diode จ. Pull-up exercise 7. คำ่ ตวั ตำ้ นทำนทใ่ี ชส้ ำหรบั พลดู ำวน์ (Pull-down)? ก. 10kΩ ข. 20kΩ ค. 30kΩ ง. 40kΩ จ. 50kΩ 8. กำหนดพอรต์ เป็นอนิ พตุ ดว้ ยฟังกช์ นั่ คอื ? ก. digitalRead() ข. digitalWrite() ค. pinMode() ง. pullMode() จ. analogRead() 9. กำรอำ่ นคำ่ สวติ ชอ์ นิ พตุ ไดจ้ ำกฟังกช์ นั่ ? ก. digitalRead() ข. digitalWrite() ค. pinMode() ง. pullMode() จ. analogRead() หน่วยท่ี 4 : การเช่ือมต่อไมโครคอนโทรลเลอรก์ บั อปุ กรณ์อินพตุ
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 81 10. กำรแกป้ ัญหำทร่ี ะดบั สญั ญำณเกดิ กำรสนั่ น้เี รยี กวำ่ ? ก. Debounce ข. Detective ค. Deploy ง. Detox จ. Displacement excitation หน่วยท่ี 4 : การเช่ือมต่อไมโครคอนโทรลเลอรก์ บั อปุ กรณ์อินพตุ
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 82 กำรทำงำนของไมโครคอนโทรลเลอรม์ คี วำมจำเป็นทจ่ี ะตอ้ งตดิ ต่อกบั วงจรหรอื อุปกรณ์ ภำยนอกเสมอ ยกตวั อย่ำงเช่นกำรท่ไี มโครคอนโทรลเลอรท์ ำกำรอ่ำนขอ้ มูลจำกอุปกรณ์อนิ พุต และทำกำรส่งขอ้ มลู ออกไปทำงอุปกรณ์เอำตพ์ ุต โดยกระบวนกำรดงั กล่ำวไมโครคอนโทรลเลอร์ จะทำกำรติดต่อกบั อุปกรณ์ภำยนอกผ่ำนทำงพอรต์ (Port) ดงั นัน้ จงึ อำจกล่ำวได้ว่ำพอรต์ คือ ช่องทำงในกำรโอนยำ้ ยขอ้ มลู ระหว่ำงไมโครคอนโทรลเลอรก์ บั อุปกรณ์ภำยนอก สำหรบั เน้ือหำ ในบทน้ีจะกล่ำวถงึ กำรใชง้ ำนพอรต์ อนิ พุตและพอรต์ เอำต์พุตของไมโครคอนโทรลเลอรต์ ระกูล MCS-51 เพ่อื ควบคมุ กำรทำงำนของอุปกรณ์ภำยนอก การเช่อื มต่อไมโครคอนโทรลเลอร์กับอปุ กรณ์อนิ พุต สวติ ช์เป็นอุปกรณ์ทำหน้ำท่ตี ัดหรอื ต่อกระแสไฟฟ้ำในวงจร นิยมนำมำใช้ควบคุมกำร เปิดและปิดวงจรไฟฟ้ำ ซง่ึ ในงำนควบคมุ ดว้ ยไมโครคอนโทรลเลอรก์ จ็ ะมกี ำรใชง้ ำนสวติ ชเ์ ป็นตวั เปิดปิดและ.รบั สญั ญำณ ดงั นนั้ ในหน่วยกำรเรยี นจะกล่ำวถงึ กำรทำงำนของวงจรสวติ ช์ กำรรบั ขอ้ มูลจำกสวติ ช์ กำรเช่อื มต่อไมโครคอนโทรลเลอร์กบั สวติ ช์ กำรเขยี นโปรแกรมรบั ขอ้ มลู จำก สวติ ช์ รปู ที่ 4.1 ตวั อยำ่ งสวติ ช์ ที่มา: https://www.amazon.in หน่วยท่ี 4 : การเช่ือมต่อไมโครคอนโทรลเลอรก์ บั อปุ กรณ์อินพตุ
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 83 4.1 หลกั การทางานของวงจรสวติ ซ์ สวติ ช์ท่ใี ชง้ ำนกนั อย่ใู นปัจจุบนั มหี ลำยชนิดและหลำยแบบ แต่ท่นี ิยมใชใ้ นงำนควบคุม ดว้ ยไมโครคอนโทรลเลอรจ์ ะใช้สวติ ช์ท่เี รยี กว่ำ ไมโครสวชิ ท์ (Micro Switch) หรอื สวติ ชก์ ดตดิ ปลอ่ ยดบั ขนำดเลก็ เน่อื งจำกไมโครสวติ ชม์ ขี นำดเลก็ ใชง้ ำนงำ่ ยและรำคำถูก รปู ท่ี 4.2 กำรทำงำนของสวติ ช์ ท่ีมา: https://www.electronics-tutorials.ws จำกรปู ท่ี 4.2 กำรทำงำนของวงจรสวติ ชใ์ นสภำวะปกตหิ รอื ขณะท่ีไม่มกี ำรกดสวติ ชจ์ ะ ไดเ้ อ้ำทพ์ ุตเป็นลอจกิ “1” หรอื แรงดนั ไฟ 5 โวลท์ และในสภำวะทม่ี กี ำรกดสวติ ชจ์ ะได้เอำทพ์ ุต เป็นลอจกิ “0” หรอื แรงดนั ไฟ 0 โวลท์ 4.2 การเช่ือมต่อไมโครคอนโทรลเลอรก์ บั สวิตซ์ ขำพอร์ตของ Arduino Uno จะถูกกำหนดเป็นอินพุตตงั้ แต่เรมิ่ ต้น จงึ ไม่จำเป็นต้องใช้ ฟังก์ชนั่ pinMode() ในกำรกำหนดให้เป็นอินพุต ขำพอรต์ ท่ถี ูกกำหนดเป็นอินพุตจะมสี ถำนะเป็น อมิ พแี ดนซ์สูง ทำใหม้ คี วำมต้องกำรกระแสไฟฟ้ำจำกอุปกรณ์ทต่ี ้องกำรอ่ำนค่ำอนิ พุตน้อยมำก ทำให้ไม่สำมำรถรบั หรอื จ่ำยกระแสให้กบั วงจรภำยนอกทำให้เขำท่เี ป็นอินพุตน้ีไปใชง้ ำนบำง ประเภท เชน่ สรำ้ งตวั ตรวจจบั กำรสมั ผสั ท่อี ำศยั กำรวดั คำ่ ควำมจไุ ฟฟ้ำ สำหรบั ขำอนิ พตุ เมอ่ื ไม่ มีอินพุตป้อนจะต้องกำหนดค่ำแรงดนั ให้แน่นอน ทำได้โดยต่อตัวต้ำนทำนพลูอัป (Pull-up Resistor) โดยต่อขำของตวั ต้ำนทำนขำหน่ึงไปยงั ไฟเลย้ี ง หรอื ต่อพลูดำวน์ (Pull-down) ซ่งึ ต่อ ขำหน่งึ ของตวั ตำ้ นทำนจำกขำพอรต์ ลงกรำวด์ ค่ำตวั ตำ้ นทำนทใ่ี ชท้ วั่ ไปคอื 10kΩ ดงั รปู ท่ี 4.1 หน่วยที่ 4 : การเช่ือมต่อไมโครคอนโทรลเลอรก์ บั อปุ กรณ์อินพตุ
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 84 4.3 การรับขอ้ มูลจากพอรต์ Arduino Uno มีขำพอร์ตดิจติ อลท่ีกำหนดให้เป็นอินพุตหรอื เอำต์พุตจำนวน 13 ขำ ถ้ำ ตอ้ งกำรกำหนดเป็นอนิ พุตต้องกำหนดด้วยฟังก์ชนั่ pinMode และอ่ำนค่ำอนิ พุตได้จำกฟังก์ชนั่ digitalRead ซง่ึ มรี ปู แบบดงั น้ี ฟังกช์ นั่ digitalRead (pin); เมอ่ื pin คอื หมำยเลขขำทต่ี อ้ งกำรอ่ำนค่ำสถำนะ เมอ่ื ฟังกช์ นั่ ทำงำนคำ่ เป็น LOW (คำ่ เป็น “0”) หรอื HIGH (ค่ำเป็น “1”) รปู ที่ 4.3 แสดงกำรต่อตวั ทำ้ นทำนพลอู ปั ภำยในทข่ี ำพอรต์ อนิ พตุ ดจิ ติ อล ท่ีมา: https://cybergibbons.com/ ภำยในขำพอร์ตของไมโครคอนโทรลเลอร์ ATmega ซ่ึงเป็นไมโครคอนโทรลเลอร์ หลกั กำร Arduino Uno จะมกี ำรต่อตวั ต้ำนทำนพลูอปั ค่ำ 20kΩ เตรยี มไวใ้ ห้ ซง่ึ สำมำรถสงั่ ต่อ ใชง้ ำนผำ่ นทำงซอฟตแ์ วร์ ดงั ในรปู ท่ี 4.3 สำหรบั ตวั อยำ่ งโปรแกรมเพอ่ื ใชง้ ำนทม่ี ดี งั น้ี ฟังกช์ นั่ pinMode(pin, INPUT); // set pin to input ฟังกช์ นั่ digitalWrite(pin, HIGH); // turn on pullup resistors 4.4 การเขียนโปรแกรมรับค่าจากสวติ ซ์ สำหรบั กำรเขยี นโปรแกรมรบั ค่ำจำกสวติ ชไ์ มจ่ ำเป็นต้องลงไลบรำรเ่ี พมิ่ สำมำรถเรยี กใช้ ฟังก์ชนั่ ได้เลย ในกำรทดลองน้ีจะทดลองอ่ำนค่ำสถำนะของสวิตช์แบบกดติดปล่อยดบั เพ่ือ ควบคุมหลอด LED เม่อื กดสวติ ช์ S1 ทำให้ LED ตดิ สว่ำง เม่อื ปล่อยสวติ ช์ LED1 จะดบั และ เขยี นเป็นโปรแกรมไดด้ งั น้ี หน่วยท่ี 4 : การเช่ือมต่อไมโครคอนโทรลเลอรก์ บั อปุ กรณ์อินพตุ
เอกสารประกอบการสอน วชิ า ไมโครคอนโทรลเลอร์ 85 โปรแกรมท่ี 4.1 กำรใชง้ ำนขำอนิ พุตดจิ ติ อลต้องต่อตวั ตำ้ นทำนพลอู ปั (ต่อตวั ต้ำนทำนจำกไฟเลย้ี ง +5V มำยงั ขำอนิ พตุ ) เพ่อื กำหนดสถำนะทแ่ี น่นอนใหก้ บั ขำอนิ พุตในภำวะทไ่ี ม่มกี ำรกดสวติ ช์ ดงั วงจร ในรูปท่ี 4.5 โดยต่อขำ 7 ผ่ำนตัวต้ำนทำนค่ำ 10kΩ ไปยงั ไฟเล้ยี ง +5V เม่อื ไม่ได้กดสวติ ช์ SW1 ท่ขี ำ 7 จะมสี ถำนะเป็นลอจกิ สูง HIGH หรอื “1” เม่อื กดสวติ ชจ์ ะทำให้ขำ 7 ต่อลงกรำวด์ อ่ำนค่ำสถำนะเป็นลอจกิ ต่ำ LOW หรอื “0” รปู ที่ 4.4 โปรแกรมท่ี 4.1 กดตดิ -ปลอ่ ยดบั จำกโปรแกรมท่ี 4.1 เป็นโปรแกรมสำหรบั อ่ำนค่ำอินพุตจำกสวิตช์แบบปุ่มกดเพ่ือ ควบคมุ LED กำรทำงำนของ LED1 จะตรงขำ้ มกบั สถำนะของสวติ ช์ คอื เม่อื ไมก่ ดสวติ ช์ จะอ่ำน สถำนะของขำ 7 ไดล้ อจกิ สูง จงึ ต้องสงั่ ใหข้ ำ 11 เป็นลอจกิ ต่ำหรอื “0” เพ่อื ทำให้ LED1 ดบั เม่อื กด สวติ ช์ อ่ำนค่ำสถำนะของขำ 7 ไดล้ อจกิ “0” ตอ้ งสงั่ ใหข้ ำ 11 เป็น “1” เพอ่ื ขบั LED1 ตดิ สว่ำง เม่อื โปรแกรมทำงำนได้ผลตำมท่ตี ้องกำรแล้วให้ทดลองตวั ต้ำนทำนพลูอปั ค่ำ 10kΩ ออก เพ่ือให้ขำ 7 ลอยสังเกตกรณีน้ี เม่ือยังไม่มีกำรกดสวิตช์ LED1 อำจติดกะพรบิ ด้วย ควำมเรว็ สูง เหน็ LED สว่ำงเร่อื ย ๆ เน่ืองจำกสถำนะของขำ Di7 เป็น “0” และ “1” สลบั กนั ไม่ แน่นอน 4.5 โปรแกรมแกป้ ญั หาสญั ญาณรบกวนในการกดสวติ ซโ์ ดยใชซ้ อฟต์แวร์ สำหรบั หวั ขอ้ น้จี ะทดลองเขยี นโปรแกรมรบั ค่ำของสวติ ช์ ซง่ึ เป็นแบบกดตดิ ปล่อยดบั ให้ มกี ำรทำงำนเป็นแบบกดตดิ กดดบั คอื เม่อื เรม่ิ ต้นโปรมแกรม LED ดบั อยู่ เมอ่ื กดสวติ ช์ LED จะ ตดิ สว่ำงเม่อื กดสวติ ชอ์ กี ครงั้ LED จะดบั สลบั กนั ไปมำตลอดเวลำ โดยทวั่ ไปแลว้ สวติ ชท์ ่ใี ชจ้ ะ เป็นสวติ ช์ทำงกลท่ปี ระกอบดว้ ยหน้ำสมั ผสั โลหะ ในกำรกดสวติ ช์ใหต้ ่อวงจร พบว่ำหน้ำสมั ผสั หน่วยท่ี 4 : การเชื่อมต่อไมโครคอนโทรลเลอรก์ บั อปุ กรณ์อินพตุ
เอกสารประกอบการสอน วิชา ไมโครคอนโทรลเลอร์ 86 ของสวติ ช์จะไม่สมั ผัสกันสนิททนั ที โดยมชี ่วงเวลำท่เี ร่ิมสมั ผสั และหลุดเป็นช่วงเวลำสนั้ ๆ ก่อนทห่ี น้ำสมั ผสั ของสวติ ช์จะต่ออย่ำงสมบูรณ์ และเม่อื วดั สญั ญำณทไ่ี ดจ้ ำกสวติ ช์พบว่ำระดบั สญั ญำณมกี ำรสนั่ รปู ท่ี 4.5 แสดงกำรเกดิ สญั ญำณรบกวนเมอ่ื มกี ำรกดและปล่อยสวติ ชใ์ นวงจรดจิ ติ อล กำรสัน่ ท่ีเรยี กว่ำเบำซ์ (Bounce) อยู่ชัว่ ขณะดังแสดงในรูปท่ี 4.5 โดยระยะเวลำท่ี สญั ญำณเกดิ กำรเบำวซ์น้ีมรี ะยะเวลำตงั้ แต่ไม่ก่มี ลิ ลวิ นิ ำที (ms) ไปจนถึงหลำยสบิ มลิ ลวิ นิ ำที ขน้ึ กบั ประเภทของสวติ ชท์ ใ่ี ช้ กำรแก้ปัญหำท่รี ะดบั สญั ญำณเกิดกำรสนั่ น้ีเรยี กว่ำกำรดเี บำซ์ (Debounce) หลกั กำร แก้ไขสญั ญำณรบกวนแบบบนคอื หน่วงเวลำกำรเกดิ ขน้ึ ของสญั ญำณพลั สเ์ ลก็ น้อย เพ่อื ใหว้ งจร ไมส่ นใจสญั ญำณทเ่ี กดิ ขน้ึ ในช่วงเรมิ่ ตน้ กดสวติ ช์ ซง่ึ ทำไดห้ ลำยวธิ ี เช่นวธิ กี ำรแรกทำไดโ้ ดยใช้ อุปกรณ์อเิ ล็กทรอนิกสพ์ ้นื ฐำน อย่ำงตวั ต้ำนทำนและตวั เก็บประจุ โดยต่อกนั ในลกั ษณะวงจร RC อนิ ติเกรเตอรด์ งั ในรูปท่ี 4.6 ด้วยวธิ กี ำรน้ีจะช่วยลดผลของสญั ญำณรบกวนท่เี กิดข้นึ จำกกำรกด สวติ ช์ไดใ้ นระดบั หน่ึง โดยประสทิ ธภิ ำพของวงจรจะขน้ึ กบั กำรเลอื กค่ำของตวั ต้ำนทำนและตวั เกบ็ ประจุ หำกเลอื กค่ำของตวั เก็บประจุน้อยเกนิ ไป อำจไม่สำมำรถลดสญั ญำณรบกวนได้ แต่ถ้ำ เลอื กค่ำมำกเกินไปจะทำให้ควำมไวในกำรตรวจจบั กำรกดสวิตช์ลดลง นัน่ คอื อำจต้องกดสวติ ช์ มำกกว่ำ 1 ครงั้ เพอ่ื ใหไ้ ดส้ ญั ญำณทต่ี อ้ งกำร รปู ท่ี 4.6 กำรต่อวงจร RC อนิ ตเิ กรเตอร์ เพอ่ื แกไ้ ขปัญหำสญั ญำณรบกวนจำกกำรกดสวติ ช์ หน่วยที่ 4 : การเชื่อมต่อไมโครคอนโทรลเลอรก์ บั อปุ กรณ์อินพตุ
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