The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.
Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by Thidacha Saengjan, 2023-07-17 10:04:52

ใบความรู้

ใบความรู้

จัดทำ โดย ใบความรู้ นางสาวธิดาชา แสงจันทร์ รายวิชาไมโครคอนโทรลเลอร์ แผนกวิชา ช่างอิเล็กทรอนิกส์


ใบความรู หนวยที่ 1 เริ่มตนใชงานไมโครคอนโทรลเลอร Arduino 1. หัวขอเรื่อง 2. สาระสำคัญ ไมโครคอนโทรลเลอร (Microcontroller) เปนคอมพิวเตอรขนาดเล็กที่สามารถควบคุมอุปกรณตาง ๆ ได ภายในชิปตัวเดียว ภายในชิปประกอบดวย หนวยประมวลผลกลาง (CPU), วงจรอินพุต/เอาตพุต, หนวยความจำ โปรแกรม, หนวยความจำแรม โมดูลไทเมอร/เคาวเตอร ซึ่งปจจุบันมไมโครคอนโทรลเลอรอยูหลายประเภทดวยกัน เชน MCS51, PIC, AVR, ARM7, ARM9, Basic Stamp เปนตน สวนการนำไปใชงานขึ้นอยูกับผูใชงานวาตองการศึกษาไมโครคอนโทรลเลอรตระกูลไหนนำไป ใชดานใด ซึ่งความสามารถของไมโครคอนโทรลเลอรแตละตระกูลมีความสามารถที่แตกตางกันออกไป ดังนั้นการ เลือกใชงานจึงตองดูวาผูใชงานมีความจำเปนตองใชโมดูลใดบางที่มีอยูในไมโครคอนโทรลเลอร รวมถึงจำนวนพอรต อินพุต พอรตเอาตพุต หนวยความจําโปรแกรม หนวยความจําขอมูลที่ตองการใชมากนอยเพียงใด สำหรับหนังสือเลมนี้ กลางถึง ไมโครคอนโทรลเลอร ตระกูล AVR เบอร Atmega328 เปนบอรดรุน Arduino Uno R3 ซึ่งเปนบอรด ไมโครคอนโทรลเลอรที่ไดรับความ นิยมในปจจุบัน 2.1 ไมโครคอนโทรลเลอร Arduino Arduino (อาดุอีโน หรือ อาดุยโน) มาจากภาษาอิตาเลียน เปนบอรดไมโครคอนโทรลเลอร ตระกูล AVR ที่ถูกพัฒนาเปนแบบโอเพนซอรซ (Open Source) ซึ่งผูผลิตเปดเผยขอมูลทั้งฮารดแวร(Hardware) และ ซอฟตแวร (Software) บอรดไมโครคอนโทรลเลอร Arduino ถูกออกแบบขึ้นมา เพื่อใหใชงานไดงาย ดังนั้นจึงเหมาะ สำหรับที่ผูเริ่มตนศึกษาการเขียนโปรแกรมเบื้องตน ซึ่งผูใชงาน สามารถดัดแปลง พัฒนาตอยอดฮารดแวร (Hardware) และซอฟตแวร (Software) ไดอีกดวย Arduino


นำมาใชงานเชนเดียวกับไมโครคอนโทรลเลอรตระกูลอื่น ๆ เพื่อใชสำหรับควบคุมอุปกรณไฟฟาโดย การเขียน โปรแกรมควบคุมการทำงานตามตองการ ตัวอยางการประยุกตใช Arduino ในชีวิตประจำวัน เชน ควบคุมการเปด/ปด ไฟในบานอัตโนมัติ, วงจรวัดคาอุณหภูมิ, ควบคุมการรดน้ำตนไมอัตโนมัติ, ควบคุมการเปด/ปดประตูอัตโนมัติ, ควบคุม เครื่องซักผาหยอดเหรียญ หรือควบคุมความเร็วและทิศทาง การหมุนของมอเตอร เปนตน จุดเดนของบอรด ไมโครคอนโทรลเลอร Arduino คือ 2.1.1 มีรูปแบบคำสั่งพื้นฐาน ไมซับซอน เหมาะสำหรับผูเริ่มตนใชงาน และงายตอการพัฒนาโปรแกรม 2.1.2 การใชงานเปนแบบโอเพนซอรซ (Open Source) สามารถนำบอรดไปตอยอดใชงานได หลายดาน 2.1.3 สามารถพัฒนาโปรแกรมบนระบบปฏิบัติการตาง ๆ ไดเชน Windows, Mac OS X หรือ Linux ภาพที่ 1.1 การประยุกตใชงาน Arduino 2.2 โครงสรางของไมโครคอนโทรลเลอร Atmega328 สำหรับไมโครคอนโทรลเลอร Atmega328 เปนไอซีไมโครคอนโทรลเลอรของบริษัท Atmel มี โครงสรางภายในเปนแบบ RISC (Reduced instruction set computer) มีหนวยความจำโปรแกรมภายในเปนแบบ แฟลช สามารถเขียน-ลบโปรแกรมใหมไดหลายครั้ง โปรแกรมขอมูลเปนแบบIn-System programmable คุณสมบัติ เบื้องตนของไอซีเบอรAtmega328 มีดังนี้ 2.2.1 เปนไมโครคอนโทรลเลอรขนาด 8 บิตแบบ RISC ใชกําลังงานตํ่า 2.2.2. หนวยความจําโปรแกรมแบบแฟลช 32 กิโลไบตสามารถเขียนและลบโปรแกรมในวงจรได 10,000 รอบ เก็บรักษาขอมูลไดนาน 20 ป 2.2.3 หนวยความจำขอมูลชั่วคราวแบบ SRAM 2 กิโลไบตและหนวยความจำขอมูลถาวรแบบ EEPROM 1 กิโลไบต 2.2.4 บรรจุ USB บูตโหลดเดอรมาจากผูผลิต จึงสามารถโปรแกรมหนวยความจำผานพอรต USB ได โดยไมตองใชเครื่องโปรแกรมภายนอก 2.2.5 มีพอรตอินพุตเอาตพุตแบบโปรแกรมได ทั้งหมด 23 ขา 2.2.6 ความถี่สัญญาณนาิกาจากภายนอกสูงสุด 20 MHz 2.2.7 มีโมดูลแปลงสัญญาณอนาล็อกเปนดิจิตอล ความละเอียด 10 บิต จำนวน 6 ชอง


2.2.8 มีโมดูลไทเมอร/เคาวเตอร ขนาด 16 บิต จำนวน 1 ชอง, ขนาด 8 บิต จำนวน 2 ชอง 2.2.9 มีโมดูลกำเนิดสัญญาณ PWM จำนวน 6 ชอง 2.2.10 มีวงจรตรวจจับไฟเลี้ยงต่ำกวาที่กำหนดหรือบราวเอาตแบบโปรแกรมได 2.2.11 มีโมดูลสื่อสารขอมูลผานบัส SPI และ I2C 2.2.12 มีโมดูลอินเตอรรัพพภายนอก 2 ชองและภายใน 26 ชอง 2.2.13 มีโมดูลสื่อสารขอมูลอนุกรม USART 2.2.14 ใชไฟเลี้ยงมีคาแรงดันตั้งแต 4.5 - 5.5 V ถาเลือกใชสัญญาณนาิกาที่ความถี่ 0 – 20 MHz 2.2.15 คาอุณหภูมิใชงานตั้งแต –40 ถึง +85 ˚C ภาพที่ 1.2 บล็อกไดอะแกรมไมโครคอนโทรลเลอร Atmega328 (ที่มา : https://www.slideshare.net/YongHeuiCho/avr-cpu-atmega328) หนาที่และตำแหนงขาตาง ๆ ของไมโครคอนโทรลเลอร Atmega328 มีดังนี้ 1) ขา VCC เปนขาไฟเลี้ยง 1.8 โวลต ถึง 5.5 โวลต 2) ขา GND เปนขากราวนด 3) Port B (PB7:0) XTAL1/XTAL2/TOSC1/TOSC2 มีทั้งหมด 8 พอรต ตั้งแตพอรต PB0 ถึงพอรต PB7 แต ละพอรตสามารถเปนไดทั้งพอรต อินพุตและเอาตพุต เปนพอรตที่มีตัวตานทานพูลอัปอยูภายใน และสามารถตอวงจร เอาตพุตขับไดทั้ง กระแสซิงคและกระแสซอรซ 4) Port C (PC[6:0]) มีทั้งหมด 7 พอรต ตั้งแตพอรต PC0 ถึงพอรต PC6 แตละพอรตสามารถเปนไดทั้งพอรต อินพุตและเอาตพุต เปนพอรตที่มีตัวตานทานพูลอัปอยูภายใน และสามารถตอวงจรเอาตพุตขับไดทั้ง กระแสซิงคและกระแสซอรซ 5) Port D (PD[7:0]) มีทั้งหมด 8 พอรต ตั้งแตพอรต PD0 ถึงพอรต PD7 แตละพอรตสามารถเปนไดทั้งพอรต อินพุตและเอาตพุต เปนพอรตที่มีตัวตานทานพูลอัปอยูภายใน และสามารถตอวงจรเอาตพุตขับไดทั้ง กระแสซิงคและกระแสซอรซ 6) AVCC เปนขาแรงดันไฟฟาสำหรับ A/D คอนเวอรเตอร


7) AREF เปนขาอางอิงสัญญาณอนาล็อกสำหรับ A/D คอนเวอรเตอร 2.3 สถาปตยกรรมหลักของซีพียูตระกูล AVR หนาที่หลักของซีพียู คือ นำคำสั่งและขอมูลที่เก็บไวในหนวยความจำมาแปลความหมาย และกระทำตามเรียง กันไปทีละคำสั่ง ตามคำสั่งพื้นฐานของไมโครคอนโทรลเลอร ภายในซีพียูมีหนวยคำนวณและตรรกะ หรือ Arithmetic & Logical Unit (ALU) เปนหนวยทำหนาที่คำนวณทางคณิตศาสตร ไดแก การบวก ลบ คูณ หาร และเปรียบเทียบทาง ตรรกะเพื่อทำการตัดสินใจ การทำงานของ ALU คือ รับขอมูลจากหนวยความจำมาไวในที่เก็บชั่วคราวของ ALU หรือ เรียกวา รีจิสเตอร(register) เพื่อทำการคำนวณแลวสงผลลัพธกลับไปยังหนวยความจำ ภาพที่ 1.3 บล็อกไดอะแกรมสถาปตยกรรมไมโครคอนโทรลเลอร AVR (ที่มา : http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-MicrocontrollerATmega328- 328P_Datasheet.pdf) 2.3.1 รีจิสเตอรสถานะ (Status Register: SREG) เปนรีจิสเตอรที่ใชสำหรับเก็บสถานะผลของการทำงานที่เกิดจากการทำงานประมวลผลชุด คำสั่งครั้งลาสุด ซึ่ง ขอมูลนี้ไปใชประโยชนในคำสั่งที่เปนเงื่อนไขเพื่อใชในการตัดสินใจ รีจิสเตอรสถานะนี้มีการเปลี่ยนแปลงสถานะเสมอ เมื่อมีการดำเนินการเกี่ยวกับการประมวลผลทางคณิตศาสตรและตรรกะ (ALU) รีจิสเตอรสถานะไมจัดเก็บแบบ อัตโนมัติเมื่อมีการเรียกใชโปรแกรมยอยแบบขัดจังหวะ (interrupt routine) และเมื่อกลับจากการขัดจังหวะตองไดรับ การจัดการโดยซอฟตแวร


ภาพที่ 1.4 รีจิสเตอรสถานะ (ที่มา : http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-MicrocontrollerATmega328- 328P_Datasheet.pdf) บิต 7 – I: Global Interrupt Enable บิต I ตองตั้งคาสำหรับการเปดใชงานขัดจังหวะ โดยกำหนดใหรีจิสเตอรบิตเปน 1 ทำให รีจิสเตอรนี้ถูกเซต ยอมใหมีการขัดจังหวะได แตถารีจิสเตอรบิตเปน 0 ทำใหไมมีการขัดจังหวะเกิดขึ้น บิต 6 – T: Bit Copy Storage บิต T เปนคำสั่งคัดลอกบิต ชื่อวา BLD (Bit LoaD) และ BST (Bit STore) บิต 5 – H: Half Carry Flag บิต H ใชสำหรับการคำนวณเกี่ยวกับ BCD บิต 4 – S: Sign Flag, S = N ⊕ V บิต S ใชสำหรับเก็บผลของเครื่องหมายของตัวเลข โดยคำนวณมาจาก S = N ⊕ V บิต 3 – V: Two’s Complement Overflow Flag บิต V ใชสำหรับการสนับสนุนการทำ 2 คอมพลีเมนต (Two’s complement) ของตัวเลข บิต 2 – N: Negative Flag บิต N เปนบิตที่ตัวบอกวา จากการคำนวณหรือการดำเนินการทางตรรกศาสตรนั้นมีผลลัพธ เปนคาลบหรือไม บิต 1 – Z: Zero Flag บิต Z เปนบิตที่ตัวบอกวา จากการคำนวณหรือการดำเนินการทางตรรกศาสตรนั้นมีผลลัพธ เปน 0 หรือไม บิต 0 – C: Carry Flag บิต Z เปนบิตที่ตัวบอกวา จากการคำนวณหรือการดำเนินการทางตรรกศาสตรนั้นเกิดการ ยืมหรือไม 2.3.2 รีจิสเตอรใชงานทั่วไป (General Purpose Register File) เปนรีจิสเตอรที่ถูกกำหนดขึ้นมาเพื่อใชกับชุดคำสั่งแบบ RISC ของไมโครคอนโทรลเลอรตระกูล AVR ซึ่งในการ ทำงานของคำสั่งนั้นมีการนำเขาและสงออกขอมูลจากรีจิสเตอรใชงานทั่วไปจากคำสั่งมาเก็บในรีจิสเตอรดังนี้ • One 8-bit output operand and one 8-bit result input • Two 8-bit output operands and one 8-bit result input • Two 8-bit output operands and one 16-bit result input • One 16-bit output operand and one 16-bit result input


ภาพที่ 1.5 รีจิสเตอรทั่วไป (ที่มา : http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-MicrocontrollerATmega328- 328P_Datasheet.pdf) 2.3.3 สแตก พอยเตอร (Stack Pointer) สแตก พอยเตอร ถูกใชงานเพื่อการเก็บขอมูลไวชั่วคราวของตัวแปรและตำแหนงแอดเดรส ขณะทำการ ขัดจังหวะหรือกระโดดไปยังโปรแกรมยอย และตัวชี้ตำแหนงสแตกมีหนาที่เก็บคาตำแหนง สูงสุดของสแตกเอาไวในไอซี AVR ตัวชี้สแตกมีรีจิสเตอรขนาด 8 บิต จำนวน 2 ตัว ไดแก SPH และ SPL คำสั่ง สแตก พอยเตอร ลักษณะคำสั่ง PUSH Decremented by 1 ขอมูลถูกเก็บไวในสแตก CALL ICALL RCALL Decremented by 2 ขอมูลถูกเก็บไวในสแตก และคืนคาเมื่อออกจาก โปรแกรมยอยหรือการขัดจังหวะ POP Decremented by 1 นำขอมูลมาจากสแตก RET RETI Decremented by 2 นำขอมูลมาจากสแตก เมื่อออกจากโปรแกรมยอย หรือการขัดจังหวะ 2.4 บอรดไมโครคอนโทรลเลอร Arduino Uno R3 บอรดไมโครคอนโทรลเลอร Arduino Uno R3 ไดรับความนิยมอีกบอรดหนึ่ง เนื่องจากมีราคาไมแพง ซึ่งสวนใหญโปรเจคและไลบรารีตาง ๆ ที่พัฒนาขึ้นมาถูกอางอิงกับบอรดนี้เปนหลัก เพราะเปนขนาดที่เหมาะกับการ


เริ่มตนการเรียนรู Arduino ซึ่งบอรด Arduino Uno ไดถูกพัฒนาขึ้นมา ตั้งแตR2, R3 และมีรุนชิปไอซีเปนแบบ SMD ในการเรียนรูบอรดไมโครคอนโทรลเลอร Arduino เลมนี้ใชเปนบอรดรุน Arduino Uno R3 มีคุณสมบัติของบอรดดังนี้ 1) ใชไอซีไมโครคอนโทรลเลอร ATmega328 2) ใชแรงดันไฟฟาเลี้ยงไอซีไมโครคอนโทรลเลอร ATmega328 มีคา 5 โวลต 3) แรงดันไฟฟาปอนที่บอรดไมโครคอนโทรลเลอร Arduino Uno R3 อยูในชวง 7 - 12 โวลต 4) มีพอรตดิจิตอลอินพุต/เอาตพุต (Digital I/O) จำนวน 14 พอรต (มี PWM output จำนวน 6 พอรต) 5) มีพอรตอนาล็อกอินพุต (Analog Input) จำนวน 6 พอรต 6) สามารถจายกระแสไฟฟา แตละพอรตได 40 มิลลิแอมป (mA) 7) สามารถจายกระแสไฟฟาในพอรต 3.3 V จายได 50 มิลลิแอมป (mA) 8) มีพื้นที่หนวยความจำโปรแกรม 32 กิโลไบต (KB) 9) มีพื้นที่หนวยความจำชั่วคราวแบบ SRAM 2 กิโลไบต (KB) 10) มีพื้นที่หนวยความจำถาวรแบบ EEPROM 1 กิโลไบต (KB) 11) ใชความถี่สัญญาณนาิกา 16 เมกะเฮิรตซ (MHz) ภาพที่ 1.6 บอรดไมโครคอนโทรลเลอร Arduino Uno R3 2.4.1 ภาคจายไฟฟา บอรดไมโครคอนโทรลเลอร Arduino Uno R3 สามารถใชพลังงานไฟฟาจาก พอรต USBของคอมพิวเตอร หรือแหลงพลังงานไฟฟาจากภายนอก โดยบอรดสามารถเลือกแหลงจายไฟฟาไดโดย อัตโนมัติ ในสวนของแหลงพลังงานไฟฟาจากภายนอก สามารถใชไดทั้งแบบไฟฟากระแสสลับและไฟฟากระแสตรง จากอะแดปเตอร หรือจากแบตเตอรี่ โดยมีขั้วไฟฟาของอะแดปเตอรสามารถเชื่อมตอดวยการเสียบปลั๊กขนาด 2.1 มม. เขากับแจ็คพาวเวอรของบอรด ชวงแรงดันของแหลงจายไฟฟาที่แนะนำควรมีคาอยูในชวง 7 - 12 โวลต แตถาใช แรงดันไฟฟามากกวา 12 โวลต สงผลใหไอซีควบคุมแรงดันไฟฟารอนมากเกินไป และเกิดความเสียหายตอบอรดได ขาพาวเวอรซัพพลาย มีดังนี้ - Vin เปนขารับแรงดันไฟฟาเลี้ยงบอรด Arduino จากแหลงจายไฟฟาภายนอก - 5 V เปนขาจายแรงดันไฟฟา 5 โวลต ที่ไดจากแรงดันจาก Vin ผานวงจรเร็กกูเลเตอรภายในบอรด หรือจากแรงดันไฟฟาที่พอรต USB


- 3.3 V เปนขาจายแรงดันไฟฟา 3.3 โวลต ที่สรางขึ้นโดยวงจรเร็กกูเลเตอรภายในบอรด จายกระแสสูงสุดคือ 50 มิลลิแอมป - GND เปนขากราวนด 2.4.2 หนวยความจำ ไมโครคอนโทรลเลอร ATmega328 มีหนวยความจำแบบแฟลชสำหรับการ จัดเก็บโปรแกรม ขนาด 32 กิโลไบต (มีหนวยความจำใชสำหรับการบูต ขนาด 0.5 กิโลไบต) มีหนวยความจำชั่วคราว แบบสแตติกแรม (SRAM) ขนาด 2 กิโลไบต และมีหนวยความจำถาวรแบบอีอีพร็อม (EEPROM) ขนาด 1 กิโลไบต 2.4.3 พอรตอินพุต – เอาตพุต บอรดไมโครคอนโทรลเลอร Arduino Uno R3 มีพอรตดิจิตอลทั้งหมด 14 ขา สามารถเปนไดทั้งพอรตอินพุตหรือเอาตพุต โดยใชฟงกชัน pinMode (), digitalWrite () และ digitalRead () แตละขาทำงานที่แรงดัน 5 โวลต สามารถจายหรือรับกระแสไฟฟาไดสูงสุด 40 มิลลิแอมป และมีตัวตานทานตอแบบ พูลอัปอยูภายในมีคาความตานทาน 20 - 50 กิโลโอหม นอกจากนี้แลว บางพอรตยังมีหนาที่พิเศษ ดังนี้ - พอรต 0 เปนขา RX ใชเปนพอรตรับสัญญาณสื่อสารแบบอนุกรม - พอรต 1 เปนขา TX ใชเปนพอรตสงสัญญาณสื่อสารแบบอนุกรม - พอรต 2 และ 3 เปนพอรตรับสัญญาณอินเตอรรัพตภายนอก (Interrupts) พอรตเหลา นี้สามารถกำหนดคาใหรับสัญญาณขัดจังหวะไดทั้งแบบลอจิกสูง ลอจิกต่ำ หรือแบบอื่น ๆ - พอรต 3, 5, 6, 9, 10 และ 11 เปนพอรตสงสัญญาณเอาตพุตแบบ PWM ขนาด 8 บิต - พอรต 10, 11, 12 และ 13 เปนพอรตสื่อสารแบบ SPI - พอรต 13 เปนพอรตควบคุมแอลอีดีที่ติดตั้งบนบอรด เมื่อขา 13 จายเอาตพุตลอจิก “1” ทำใหแอลอีดีติดสวาง และเมื่อจายลอจิก “0” ทำใหแอลอีดีดับ 2.4.4 อนาล็อกอินพุต บอรดไมโครคอนโทรลเลอร Arduino Uno R3 มีพอรตอนาล็อกอินพุต 6 ขา คือ ขา A0- ขา A5 ซึ่งแตชองมีความละเอียดขนาด 10 บิต แบงระดับความแตกตางได 1,024 คา โดยเริ่มตน จากระดับแรงดัน 0 โวลต จนถึงระดับ 5 โวลตและสามารถเปลี่ยนระดับแรงดันอางอิงไดโดยใช แรงดันอางอิงจากภายนอกปอนที่ขา AREF รวมกับฟงกชัน analogReference() นอกจากนี้ยังมีบางขาที่มีหนาที่พิเศษ ดังนี้ - พอรต A4 (SDA) และพอรต A5 (SCL) เปนพอรตสื่อสารแบบ I2C - พอรต Aref แรงดันอางอิงสำหรับอินพุตอนาล็อก ใชงานรวมกับฟงกชัน analogReference () 2.4.5 การสื่อสาร บอรดไมโครคอนโทรลเลอร Arduino Uno R3 มีพอรตสื่อสารเพื่อเชื่อมตอกับ คอมพิวเตอรหรือบอรด Arduino อื่นๆ หรือไมโครคอนโทรลเลอรเบอรอื่น ๆ หลายรูปแบบ ตามความสามารถของ ไมโครคอนโทรลเลอร ATmega328 ที่มีพอรตสื่อสารอนุกรมแบบ UART ที่พอรตดิจิตอล ขา 0 (RX) และพอรตดิจิตอล ขา 1 (TX) ชองทางการสื่อสารแบบอนุกรมยังเชื่อมโยงผานพอรต USB และยังปรากฏเปนพอรต COM เสมือน ซอฟตแวรบนเครื่องคอมพิวเตอร ดวยเฟรมแวร 8U2 คอมพิวเตอรสามารถเชื่อมตอไดโดยใชไดรเวอร USB มาตรฐาน และไมตองใชไดรเวอรภายนอกแตอยางไร ซอฟตแวร Arduino แสดงผลการสื่อสารผานพอรตแบบอนุกรมทางพอรต USB ระหวาง บอรด Arduino กับคอมพิวเตอรผานขา RX และ TX ซึ่งทำใหไฟ LED กะพริบเมื่อขอมูลถูกสงผานทางพอรต USB


แบบฝกหัดหนวยที่ 1 เรื่อง...เริ่มตนใชงานไมโครคอนโทรลเลอร Arduino ตอนที่ 1 ใหนักเรียนทำเครื่องหมายกากบาท (X) ลงบนคำตอบที่ถูกที่สุดเพียงคำตอบเดียว 1. Arduino ถูกผลิตขึ้นจากหนวยงานใด ก. บริษัท intel ข. บริษัท Microchip ค. บริษัท Motorola ง. บริษัท Atmel 2. Arduino เปนไมโครคอนโทรลเลอร ตระกูลใด ก. Z80 ข. AVR ค. MCS51 ง. PIC 3. ขอใดไมใชจุดเดนของไมโครคอนโทรลเลอร Arduino ก. ราคาไมแพง ข. เขียนโปรแกรมบนวินโดวไดเทานั้น ค. การใชงานเปนแบบโอเพนซอรส ง. มีรูปแบบคำสั่งพื้นฐาน ไมซับซอน 4. ขอใดคือหนวยความจำแบบแฟรช (Flash) ก. เขียนและลบโปรแกรมไดครั้งเดียว ข. เขียนโปรแกรมไดหลายครั้งและลบ โปรแกรมไดครั้งเดียว ค. เขียนและลบโปรแกรมไดนับหมื่นครั้ง ง. เขียนโปรแกรมไดครั้งเดียวและลบ โปรแกรมไดหลายครั้ง 5. ไมโครคอนโทรลเลอร Atmega328 มีขนาดกี่ บิต ก. 8 บิต ข. 10 บิต ค. 16 บิต ง. 24 บิต 6. ไมโครคอนโทรลเลอร Atmega328 มีขาทั้งหมด กี่ขา ก. 18 ขา ข. 24 ขา ค. 28 ขา ง. 32 ขา 7. ไมโครคอนโทรลเลอร Atmega328 มี หนวยความจำโปรแกรมแบบ Flash ขนาดเทาไร ก. 8 Kbyte ข. 16 Kbyte ค. 24 Kbyte ง. 32 Kbyte 8. หนวย ALU ของไมโครคอนโทรลเลอร Atmega328 มีหนาที่ใด ก. คำนวณทางคณิตศาสตรและตรรกะ ข. เปนการสรางสัญญาณนาิกา ค. รับ-สงสัญญาณจากพอรต ง. หนวยความจำภายใน 9. บอรดไมโครคอนโทรลเลอร Arduino Uno R3 มีพอรตดิจิตอลจำนวนเทาใด ก. 10 ขา ข. 14 ขา ค. 16 ขา ง. 20 ขา 10. บอรดไมโครคอนโทรลเลอร Arduino Uno R3 มีพอรตอนาล็อกจำนวนเทาใด ก. 4 ขา ข. 5 ขา ค. 6 ขา ง. 7 ขา


แบบฝกหัดหนวยที่ 1 เรื่อง...เริ่มตนใชงานไมโครคอนโทรลเลอร Arduino ตอนที่ 2 ใหนักเรียนตอบคำถามตอไปนี้ใหถูกตอง 1. จงบอกขอดีของบอรดไมโครคอนโทรลเลอร Arduino ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. 2. จงบอกคุณสมบัติเบื้องตนของไอซีเบอร Atmega328 ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ……………………………………………………………………………………………………………………………………………………….


ใบความรู หนวยที่ 2 การใชงานโปรแกรม Arduino 1. หัวขอเรื่อง 2. สาระสำคัญ ซอฟตแวร Arduino (IDE) หรือ Arduino Integrated Development Environment เปนซอฟตแวรแบบ เปดเผยซอรสโคด (Open Source) ซึ่งงายตอการเขียนโคดและการอัพโหลดของผูพัฒนาโปรแกรม ภาพที่ 2.1 การดาวนโหลด Arduino 2.1 การติดตั้งโปรแกรม Arduino (IDE) 2.1.1 สามารถดาวนโหลดซอฟแวรโปรแกรม Arduino (IDE) จากเว็บไซต https://www.arduino.cc/en/Main/Software2.1.2 การใชงานเปนแบบโอเพนซอรซ (Open Source) สามารถนำบอรดไปตอยอดใชงานไดหลายดาน 2.1.2 ทำการดับเบิลคลิกที่ไอคอน arduino-1.6.12-windows 2.1.3 เมื่อติดตั้งเสร็จแลวที่หนาเดสท็อปมีไอคอน 90 สามารถคลิกเพื่อเขาสูโปรแกรม 2.1.4 คลิกแถบเครื่องมือ Tool แลวไปที่ Board เลือก"Arduino /GenuinoUno" 2.1.5 คลิกแถบเครื่องมือ Too เพื่อเลือกไปที่ Port สำหรับติดตอกับบอรด Arduino Uno


2.2 สวนประกอบของโปรแกรม Arduino (IDE) ภาพที่ 2.2 สวนประกอบของ Arduino 2.2.1 แถบเครื่องมือเมนู - แถบเครื่องมือไฟล (File) ภาพที่ 2.3 สวนประกอบของ Arduino แถบเครื่องมือไฟล (File) - แถบเครื่องมือแกไข (Edit) ภาพที่ 2.4 สวนประกอบของ Arduino แถบเครื่องมือแกไข (Edit) - ปุม Serial Monitor


ภาพที่ 2.5 สวนประกอบของ Arduino ปุม Serial Monitor 2.3 การเขียนโปรแกรมและการอัพโหลดโปรแกรม 2.3.1 ทำการเขียนโปรแกรมเพื่อทดสอบการทำงาน ลงในโปรแกรม Arduino (IDE) ภาพที่ 2.6 การเขียนโปรแกรมและการอัพโหลดโปรแกรม 2.3.2 เมื่อเขียนโปรแกรมเสร็จเรียบรอยแลว ใหทำการคอมไพลโปรแกรม ภาพที่ 2.7 การคอมไพลโปรแกรม 2.3.3 เมื่อเขียนโปรแกรมถูกตอง โปรแกรมแสดงขอความวา Done compiling.


ภาพที่ 2.8 การคอมไพลโปรแกรมสำเร็จ 2.3.4 จากนั้นทำการอัพโหลดโปรแกรมที่คอมไพลเรียบรอยแลว โดยการกดที่ปุม Upload ภาพที่ 2.9 การอัพโหลดโปรแกรม 2.3.4 เมื่อทำการอัพโหลดเสร็จเรียบรอยแลว โปรแกรมแสดงขอความวา Done uploading ภาพที่ 2.10 การอัพโหลดโปรแกรมสำเร็จ


แบบฝกหัดหนวยที่ 2 เรื่อง...การใชงานโปรแกรม Arduino ตอนที่ 1 ใหนักเรียนทำเครื่องหมายกากบาท (X) ลงบนคำตอบที่ถูกที่สุดเพียงคำตอบเดียว 1. ซอฟตแวร Arduino (IDE) สามารถ Download ไดที่ใด ก. www.arduinoall.com ข. www.arduino.cc ค. www.arduitronics.com ง. www.myarduino.net 2. โปรแกรม Arduino (IDE) โดย IDE ยอมาจาก คำวา ก. Integrated development environment ข. Inverter development environment ค. intel development environment ง. Integer development environment 3. ขอใดเปนไอคอนการเขียนโปรแกรม Arduino (IDE) ก. ข. ค. ง. 4. ถาตองการเลือก Board“Arduino Uno” ตอง เขาไปที่เมนูใด ก. File ข. Edit ค. Sketch ง. Tool 6. ถาตองการบันทึกไฟลงานที่สรางขึ้นปจจุบัน ตองเขาไปที่เมนูใด ก. Tool ข. Edit ค. Sketch ง. File 7. ถาตองการคัดลอกขอความ ตองเขาไปที่เมนูใด ก. Sketch ข. Edit ค. File ง. Tool 8. ถาตองการตัดขอความ ตองเขาไปที่เมนูใด ก. File ข. Tool ค. Sketch ง. Edit 9. ถาตองการคอมไพลโปรแกรม ตองเลือกแถบ เมนูใด ก. Import ข. Add File ค. Verify/Compile ง. upload 10. ถาตองการโหลดโปรแกรมลงบนบอรด Arduino ตองเลือกแถบเมนูใด ก. upload ข. Import ค. Verify/Compile ง. Add File


แบบฝกหัดหนวยที่ 2 เรื่อง...การใชงานโปรแกรม Arduino ตอนที่ 2 ใหนักเรียนตอบคำถามตอไปนี้ใหถูกตอง 1. จงบอกสวนประกอบและแถบเครื่องมือของโปรแกรม Arduino (IDE) ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. 2. จงบอกขั้นตอนการเขียนโปรแกรมและการอัพโหลดโปรแกรม ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ……………………………………………………………………………………………………………………………………………………….


ใบความรู หนวยที่ 3 การใชงานโปรแกรม Arduino 1. หัวขอเรื่อง 2. สาระสำคัญ 2.1 ชุดคำสั่งที่ใชในการเขียนโปรแกรมไมโครคอนโทรลเลอร Arduino การเขียนโปรแกรมไมโครคอนโทรลเลอร Arduino สามารถเขียนไดทั้งภาษาแอสเซมบลี และภาษา ระดับสูง ไดแก ภาษาซี ขึ้นอยูกับวาผูพัฒนาโปรแกรมเลือกใชภาษาใดมาใชสำหรับเขียนโปรแกรมเพื่อควบคุมการ ทำงานของไมโครคอนโทรลเลอร Arduino แตเนื้อหาในหนังสือเลมนี้เนนการเขียนโปรแกรมดวยภาษาซีเปนหลัก 2.2 ภาษาแอสเซมบลีสำหรับไมโครคอนโทรลเลอร Arduino ภาษาแอสเซมบลีจัดเปนภาษาในระดับลาง เปนภาษาที่มีความใกลเคียงกับภาษาเครื่องและฮารดแวร ของซีพียู โครงสรางของภาษาแอสเซมบลีสำหรับไมโครคอนโทรลเลอร Arduino ไมแตกตางจากภาษาแอสเซมบลีของ สถาปตยกรรมไมโครคอนโทรลเลอรอื่น ๆ สวนการเขียนโปรแกรมภาษาแอสเซมบลีตองทำการใชชุดคำสั่งของซีพียูเพื่อ เขาถึงหนวยความจำและขอมูลในรีจิสเตอรซึ่งมีโดยตรงภาษาแอสเซมบลีมีขอดีกวาภาษาระดับสูงตรงที่มีขนาดของ โปรแกรมคอนขางเล็กมาก จึงทำใหความเร็วในการทำงานที่สูงกวาภาษาระดับสูง คมนาคตกามบาน Game month สงผลใหภาษาแอสเซมบลีมีความยุงยากในการใชงานมากกวาภาษาระดับสูง 2.3 ภาษาซีสำหรับไมโครคอนโทรลเลอร Arduino ในการเขียนโปรแกรมสำหรับบอรด Arduino จะตองเขียนโปรแกรมโดยใชภาษาของ Arduino (Arduino Programming Language) ซึ่งตัวภาษาของ Arduino ก็นำเอาโอเพนซอรสโปรเจ็กตชื่อ Wiring มาพัฒนา ตอ ภาษาของ Arduino แบงไดเปน 2 สวนหลักคือ 1) โครงสรางภาษา (Structure) ตัวแปรและคาคงที่ 2) ฟงกชั่น (Function)


ภาษาของ Arduino จะอางอิงตามภาษา C/C++ จึงอาจกลาวไดวาการเขียนโปรแกรมสำหรับ Arduino (ซึ่งก็รวมถึงบอรด Arduino) ก็คือการเขียนโปรแกรมภาษา C โดยเรียกใชฟงกชั่นและไลบรารีที่ทาง Arduino ไดเตรียมไวใหแลว ซึ่งสะดวกและท าใหผูที่ไมมีความรูดานไมโครคอนโทรลเลอรอยางลึกซึ้งสามารถเขียนโปรแกรม สั่งงานไดในบทนี้จะอธิบายถึงโครงสรางโปรแกรมของ Arduino แบงไดเปนสองสวนคือ void setup() และ void loop() โดยฟงกชั่น setup() เมื่อโปรแกรมท างานจะทำคำสั่งของฟงกชั่นนี้เพียงครั้งเดียว ใชในการกำหนดคา เริ่มตนของการทำงานสวนฟงกชั่น loop() เปนสวนทำงานโปรแกรมจะทำคำสั่งในฟงกชนั่นตอเนื่องกันตลอดเวลา โดย ปกติใชกำหนดโหมดการทำงานของขาตางๆ ก าหนดการสื่อสารแบบอนุกรม ฯลฯ สวนของ loop() เปนโคดโปรแกรมที่ทำงาน เชน อานคาอินพุต ประมวลผล สั่งงานเอาตพุต ฯลฯ โดย สวนกำหนดคาเริ่มตน เชนตัวแปรจะตองเขียนที่สวนหัวของโปรแกรมกอนถึงตัวฟงกชั่น นอกจากนั้นยังตองคำนึงถึง ตัวพิมพ เล็ก-ใหญ ของตัวแปรและชื่อฟงกชนั้นใหถูกตอง 2.3.1 สวนของฟงกชั่น setup() ฟงกชั่นนี้จะเขียนที่สวนตนของโปรแกรม ท างานเมื่อโปรแกรมเริ่มตนเพียงครั้งเดียว ใชเพื่อกำหนดคา ของตัวแปรโหมดการทำงานของขาตางๆ เริ่มตนเรียกใชไลบรารี ฯลฯ ตัวอยางที่ 3.1 int buttonPin = 13; void setup() { Serial.begin(9600); pinMode(buttonPin, INPUT); } void loop() { if (digitalRead(buttonPin) == HIGH) Serial.println('H'); else Serial.println('L'); delay(1000); } ในขณะที่โปรแกรมภาษา C มาตรฐานที่เขียนบน AVR GCC (เปนโปรแกรมภาษา C ที่ใช C คอมไพเลอร แบบ GCC สำหรับไมโครคอนโทรลเลอร AVR) จะเขียนไดดังนี้ int main(void) { init(); setup(); for (;;)


loop(); return ; } 2.3.2 สวนของฟงกชั่น loop() หลังจากที่เขียนฟงกชั่น setup() ที่กำหนดคาเริ่มตนของโปรแกรมแลว สวนถัดมาคือฟงกชั่น loop() ซึ่งมีการทำงานตรงตามชื่อ คือจะทำงานตามฟงกชั่นวนตอเนื่องตลอดเวลา ภายในฟงกชั่นจะมีโปรแกรมของ ผูใชเพื่อรับคาจากพอรต ประมวลผลแลวสั่งเอาตพุตออกขาตางๆ เพื่อควบคุมการทำงานของบอรด ตัวอยางที่ 3.2 int buttonPin = 13; // setup initializes eerial and the button pin void setup() { Serial.begin(9600); pinMode(buttonPin, INPUT); } // loop checks the button pin each time, // and will send serial if it is pressed void loop() { if (digitalRead(buttonPin) == HIGH) Serial.println('H'); else Serial.println('L'); delay(1000); } โปรแกรมทำงานวนในฟงกชั่น loop() ตลอดเวลา หลังจากทำงานในฟงกชั่น setup() จึงสรุปไดวาฟงกชั่น setup() คือสวนตนของโปรแกรมที่ใชในการประกาศ หรือตั้งคาการทำงานในตอนเริ่มตนทำงาน ในขณะที่ฟงกชั่น loop() เปนเสมือนสวนของโปรแกรมหลักที่ตองวนทำงานอยางตอเนื่องตลอดเวลา อยางไรก็ตามในบางโปรแกรม อาจมีเฉพาะสวนของฟงกชั่น setup() และไมมีฟงกชั่น loop() ก็ได นั่นแสดงวาโปรแกรมนั้นๆตองการตั้งคาการ ทำงาน หรือกำหนดใหมีการทำงานเพียงครั้งหรือรอบเดียว แลวจบการทำงานทันที 1) คำสั่ง if ใชทดสอบเพื่อกำหนดเงื่อนไขการทำงานของโปรแกรม เชน ถาอินพุตมีคามากกวาคาที่กำหนดไวจะให ทำอะไรโดยมีรูปแบบการเขียนดังนี้ if (somevariable > 50) { // do something Here


} ตัวโปรแกรมจะทดสอบวาถาตัวแปร someVariable มีคามากกวา 50 หรือไม ถาใชใหทำอะไร ถา ไมใชใหขามการทำงานสวนนี้การทำงานของคำสั่งนี้จะทดสอบเงื่อนไขที่เขียนในเครื่องหมายวงเล็บ ถาเงื่อนไขเปนจริง ทำตามคำสั่งที่เขียนในวงเล็บปกกา ถาเงื่อนไขเปนเท็จขามการทำงานสวนนี้ไป สวนของการทดสอบเงื่อนไขที่เขียนอยู ภายในวงเล็บ จะตองใชตัวกระทำเปรียบเทียบตางๆ ดังนี้ x == y (x เทากับ y) x != y (x ไมเทากับ y) x < y (x นอยกวา y) x > y (x มากกวา y) x <= y (x นอยกวาหรือเทากับ y) x >= y (x มากกวาหรือเทากับ y) เทคนิคสำหรับการเขียนโปรแกรมในการเปรียบเทียบตัวแปรให ใชตัวกระทำ == (เชน if (x==10)) หามเขียนผิดเปน = (เชน if (x=10)) คำสั่งที่เขียนผิดในแบบที่สองนี้ ทำใหผลการทดสอบเปนจริงเสมอ และเมื่อผานคำ สั่งแลว x มีคาเทากับ 10 ทำใหการทำงานของโปรแกรมผิดเพี้ยนไปไมเปนตามที่กำหนดไวเราสามารถใชคำสั่ง if ใน คำสั่งควบคุมการแยกเสนทางของโปรแกรมโดยใชค าสั่ง if....else 2) คำสั่ง if...else ใชทดสอบเพื่อกำหนดเงื่อนไขการทำงานของโปรแกรมไดมากกวาคำสั่ง if ธรรมดา โดยสามารถ กำหนดไดวาถาเงื่อนไขเปนจริงใหทำอะไร ถาเปนเท็จใหทำอะไร เชน ถาคาอินพุตแอนะล็อกที่อานไดนอยกวา 500 ให ทำอะไร ถาคามากกวาหรือเทากับ 500 ใหทำอีกอยาง จะเขียนคำสั่งไดดังนี้ ตัวอยางที่ 3.3 if (pinFiveInput < 500) { // do thing A } else { // do thing B } หลังคำสั่ง else สามารถตามดวยคำสั่ง if สำหรับการทดสอบอื่นๆ ทำใหรูปแบบคำสั่งกลายเปน if....else...if เปนการทดสอบเงื่อนไขตางๆ เมื่อเปนจริงใหทำตามที่ตองการดังตัวอยางตอไปนี้ ตัวอยางที่ 3.4 if (pinFiveInput < 500) { // do Thing A } else if (pinFiveInput >= 1000)


{ // do Thing B } else { // do Thing C } หลังคำสั่ง else สามารถตามดวยคำสั่ง if ไดไมจำกัดจำนวน (สามารถใชคำสั่ง switch case แทน คำสั่ง if...else...if สำหรับการทดสอบเงื่อนไขจำนวนมากๆ ได) เมื่อใชคำสั่ง if...else แลวตองกำหนดดวยวาถาทดสอบ ไมตรงกับเงื่อนไขใด ๆ เลย ใหทำอะไรโดยใหกำหนดที่คำสั่ง else ตัวสุดทาย 3) คำสั่ง for() คำสั่งนี้ใชเพื่อสั่งใหคำสั่งที่อยูภายในวงเล็บปกกาหลัง for มีการทำงานซ้ำกันตามจำนวนรอบที่ ตองการคำสั่งนี้มีประโยชนมากสำหรับการทำงานใด ๆ ที่ตองทำซ้ำกัน และทราบจำนวนรอบของการทำงานที่แนนอน ใชคูกับตัวแปรอะเรยในการเก็บสะสมคาที่อานคาไดจากขาอินพุตแอนะล็อกหลาย ๆ ขา ที่มีหมายเลขขาตอเนื่องกัน รูปแบบของคำสั่ง for() แบงได 3 สวนดังนี้ for (initialization; condition; increment) { //statement(s); } เริ่มตนดวย initialization ใชกำหนดคาเริ่มตนของตัวแปรควบคุมการวนรอบในการทำงานแตละรอบ จะทดสอบ condition ถาเงื่อนไขเปนจริงทำตามคำสั่งในวงเล็บปกกา แลวมาเพิ่มหรือลดคาตัวแปรตามที่สั่งใน increment แลวทดสอบเงื่อนไขอีก ทำซ้ำจนกวาเงื่อนไขเปนเท็จ ตัวอยางที่ 3.5 for (int i=1; i <= 8; i++) { // statement using the value i; } คำสั่ง for ของภาษา C ยืดหยุนกวาค าสั่ง for ของภาษาคอมพิวเตอรอื่นๆ มันสามารถละเวนบางสวน หรือทั้งสามสวนของคำสั่ง for ได อยางไรก็ตามยังตองมีเซมิโคลอน นอกจากนั้นยังนำคำสั่งภาษา C++ ที่มีตัวแปรที่ไม เกี่ยวของมาเขียนในสวนของ initialization condition และ increment ของคำสั่ง for ได 4) คำสั่ง switch-case ใชทดสอบเงื่อนไขเพื่อกำหนดการทำงานของโปรแกรม ถาตัวแปรที่ทดสอบตรงกับเงื่อนไขใดก็ให ทำงานตามที่กำหนดไวพารามิเตอร var ตัวแปรที่ตองการทดสอบวาตรงกับเงื่อนไขใด default ถาไมตรงกับเงื่อนไขใดๆเลย ใหทำคำสั่งตอทายนี้


break เปนสวนสำคัญมากใชเขียนตอทาย case ตางๆ เมื่อพบเงื่อนไขนั้นแลวทำตามคำสั่งตาง ๆ แลว ใหหยุดการทำงานของคำสั่ง switch-case ถาลืมเขียน break เมื่อพบเงื่อนไขทำตามเงื่อนไขแลวโปรแกรมจะทำงาน ตามเงื่อนไขตอไปเรื่อย ๆ จนกวาจะพบคำสั่ง break ตัวอยางที่ 3.6 switch (var) { case 1: //do something when var == 1 break; case 2: //do something when var == 2 break; default: // if nothing else matches, do the default } 5) คำสั่ง while เปนคำสั่งวนรอบโดยจะทำคำสั่งที่เขียนในวงเล็บปกกาอยางตอเนื่อง จนกวาเงื่อนที่เขียนในวงเล็บของ คำสั่ง while() จะเปนเท็จ คำสั่งที่ใหทำซ้ำจะตองมีการเปลี่ยนแปลงคาตัวแปรที่ใชทดสอบ โดยมีการเพิ่มคาตัวแปร หรือมีเงื่อนไขภายนอก เชนอานคาจากตัวตรวจจับไดเรียบรอยแลวใหหยุดการอานคา มิฉะนั้นเงื่อนไขในวงเล็บของ while() เปนจริงตลอดเวลา ทำใหคำสั่ง while ทำงานวนรอบไปเรื่อย ๆ ไมรูจบ รูปแบบคำสั่ ง while(expression) { // statement(s) } พารามิเตอรexpression เปนคำสั่งทดสอบเงื่อนไข (ถูกหรือผิด) ตัวอยางที่ 3.7 var = 0; while(var < 200) { // do something repetitive 200 times var++; } 2.3.3 ไวยากรณภาษา C / C++ ของ Arduino 1) เซมิโคลอน – semicolon ; ใชเขียนแจงวาจบคำสั่ง ตัวอยาง 3.8 int a = 13; บรรทัดคำสั่งที่ลืมเขียนปดทายดวยเซมิโคลอน จะทำใหแปลโปรแกรมไมผาน โดยตัวแปรภาษาอาจจะแจง


ใหทราบวา ไมพบเครื่องหมายเซมิโคลอน หรือแจงเปนการผิดพลาดอื่น ๆ บางกรณีที่ตรวจสอบบรรทัดที่แจงวาเกิด การผิดพลาดแลวไมพบที่ผิด ใหตรวจสอบบรรทัดกอนหนานั้น 2) วงเล็บปกกา – curly brace { } เครื่องหมายวงเล็บปกา เปนสวนสำคัญของภาษาซี โดยมีการใชงานตางตำแหนง สรางความสับสน ใหกับผูที่เริ่มตนวงเล็บปกกาเปด { จะตองเขียนตามดวยวงเล็บปกกาปด } ดวยเสมอ หรือที่เรียกวาวงเล็บตองครบคู ใน ซอฟตแวร Arduino IDE ที่ใชเขียนโปรแกรมจะมีความสามารถในการตรวจสอบการควบคูของเครื่องหมาย วงเล็บผูใชงานเพียงแคคลิกที่วงเล็บ จะแสดงวงเล็บที่เหลือ สำหรับโปรแกรมเมอรมือใหม และโปรแกรมเมอรที่ยายจากภาษา BASIC เปนภาษา C มักจะสับสน กับการใชเครื่องหมายวงเล็บ แทที่จริงแลวเครื่องหมายปกกาปดนี้เที่ยบไดกับคำสั่ง RETURN ของ Subroutine (function) หรือแทนคำสั่ง ENDIF ในการเปรียบเทียบ และแทนคำสั่ง NEXT ของคำสั่งวนรอบ FOR เนื่องจากมีการใชวงเล็บปกกาไดหลากหลาย ดังนั้นเมื่อตองการเขียนคำสั่งที่ตองใชเครื่องหมายวงเล็บ เมื่อเขียนวงเล็บเปดแลวใหเขียนเครื่องหมายวงเล็บปดทันที ถัดมาจึงคอยเคาะปุม Enter ในระหวางเครื่องหมายวงเล็บ เพื่อขึ้นบรรทัดใหม แลวเขียนคำสั่งที่ตองการ ถาทำไดตามนี้วงเล็บจะครบคูแนนอน สำหรับวงเล็บที่ไมครบคูท าใหเกิดผิดพลาดตอนคอมไฟลโปรแกรม ถาเปนโปรแกรมขนาดใหญจะหา ที่ผิดไดยาก ตำแหนงที่อยูของเครื่องหมายวงงเล็บแตละตัวจะมีผลอยางมากตอไวยากรณของภาษาคอมพิวเตอร การ ยายตำแหนงวงเล็บไปเพียงหนึ่งหรือสองบรรทัดทำใหตัวโปรแกรมทำงานผิดไป ตำแหนงที่ใชวงเล็บปกกา ฟงกชั้น (function) void myfunction (datatype argument) { statements (s) } คำสั่งวนรอบ (loops) while (boolean expression) { statement (s) } do { statement (s) } while (boolean expression); for (initialisation; termination condition; incrementing expr) { statement (s) }


คำสั่งทดสอบเงื่อนไข (condition) If (boolean expression) { statement (s) } else if (boolean expression) { statement (s) } else { statement (s) } 3) หมายเหตุบรรทัดเดียวและหลายบรรทัด / / และ / * . . . */ เปนสวนของโปรแกรมที่ผูใชเขียนเพิ่มเติมวาโปรแกรมท างานอยางไร โดยสวนที่เปนหมายเหตุจะไม ถูกคอมไพล ไมนำไปประมวลผล มีประโยชนมากสำหรับการตรวจสอบโปรแกรมภายหลังหรือใชแจงใหเพื่อนรวมงาน หรือบุคคลอื่นทราบวาบรรทัดนี้ใชทำอะไร ตัวหมายเหตุภาษา C มี 2 ประเภทคือ (1) หมายเหตุบรรทัดเดียว เขียนเครื่องสเลช // 2 ตัวหนาบรรทัด (2) หมายเหตุหลายบรรทัด เขียนเครื่องหมายสเลช / คูกับดอกจัน * ครอมขอความที่เปน หมายเหตุ เชน /* blabla */ 4) # define เปนคำสั่งที่ใชงานมาก ในการกำหนดคาคงที่ใหกับโปรแกรม ในการกำหนดคาคงที่ไมไดเปลืองพื้นที่ หนวยความจำของไมโครคอนโทรลเลอรแตอยางไร เมื่อถึงขึ้นตอนแปลภาษา คอมไพเลอรจะแทนที่ตัวอักษรขอความ ดวยคาที่กำหนดไวใน Arduino จะใชคำสั่ง # define ตรงกับภาษา C รูปแบบ # define constantName value อยาลืมเครื่องหมาย # ตัวอยางที่ 3.9 # define ledpin 3 เปนการกำหนดใหตัวแปร ledpin เทากับคาคงที่ 3 เทคนิดสำหรับการเขียนโปรแกรม ทายคำสั่ง # define ไมตองมีเครื่องหมายเซมิโคลอน ถาใสเกินแลวเวลาคอมไพลโปรแกรมจะแจงวา เกิดการผิดพลาดในบรรทัดถัดไป 5) # include ใชสั่งใหรวมไฟลอื่นๆ เขากับไฟลโปรแกรมหลักกอน แลวจึงทำการคอมไพลโปรแกรม รูปแบบคำสั่ง


# include <file> # include “file” ตัวอยางที่ 3.10 # include <stdio.h> # include “lcd.h” บรรทัดแรกจะสั่งใหเรียกไฟล stdio.h มารวมกับไฟลโปรแกรมหลัก โดยคนหาไฟลจากตำแหนงที่เก็บ ไฟลระบบของ Arduino โดยปกติเปนไฟลมาตรฐานที่มาพรอมกับ Arduino บรรทัดที่ 2 สั่งใหรวมไฟล lcd.h มารวมกับไฟลโปรแกรมหลัก โดยหาไฟลจากตำแหนงของไฟลภาษา C ปกติเปนไฟลที่ผูใชสรางขึ้นเอง ในการแกไขโปรแกรมใน Arduino มีขอแนะน าวา อยาแกไขบรรทัดนั้นทันที ใหทำบรรทัดนั้นเปน หมายเหตุกอนแลวจึงแกโปรแกรมในบรรทัดนั้น 2.3.4 ตัวแปร ตัวแปรเปนตัวอักษรหลายตัวๆ ที่กำหนดขึ้นในโปรแกรมเพื่อใชในการเก็บคาขอมูลตางๆ เชน คาที่อานไดจากตัว ตรวจจับ ที่ตออยูกับขาพอรตแอนะล็อกของ Arduino ตัวแปรมีหลายประเภทดังนี้ 1) char : ตัวแปรประเภทตัวอักขระ เปนตัวแปรที่มีขนาด 1 ไบต(8 บิต) มีไวเพื่อเก็บคาตัวอักษร ตัวอักษรในภาษาซีจะเขียนอยูใน เครื่องหมายคำพูดขีดเดียวเชน ‘A’ (สำหรับขอความที่ประกอบจากตัวอักษรหลายตัวเขียนตอกันจะเขียนอยูใน เครื่องหมายคำพูดปกติเชน “ABC”) สามารถสั่งกระทำทางคณิตศาสตรกับตัวอักษรไดในกรณีจะนำคารหัส ASCII ของ ตัวอักษรมาใชเชน ‘A’ +1 มีคาเทากับ 66 เนื่องจากคารหัส ASCII ของตัวอักษร A เทากับ 65 รูปแบบคำสั่ง charsign = ' '; พารามิเตอร char var = ‘x’; var คือชื่อของตัวแปรประเภท char ที่ตองการ x คือคาที่ตองการกำหนดใหกับตัวแปร ในที่นี้เปนตัวอักษรหนึ่งตัว 2) byte : ตัวแปรประเภทตัวเลข 8 บิตหรือ 1 ไบต ตัวแปร byte ใชเก็บคาตัวเลขขนาด 8 บิต มีคาไดจาก 0 - 255 ตัวอยางที่3.11 byte b = B10010111; // “B” is the binary formatter (151 decimal) 3) ตัวแปรประเภทตัวเลขจำนวนเต็ม ยอจาก interger ซึ่งแปลวาเลขจำนวนเต็ม int เปนตัวแปรพื้นฐานสำหรับเก็บตัวเลข ตัวแปรหนึ่งตัวมี ขนาด 2 ไบตเก็บคาไดจาก -32,768 ถึง 32,767 ในการเก็บคาตัวเลขติดลบ จะใชเทคนิคที่เรียกวา ทูคอพลีเมนต (2’s complement) บิตสูงสุดบางทีจะเรียกวาเปนบิตเครื่องหมายหรือ sign bit ถามีคาเปน “1” แสดงวาคาติดลบ ใน Arduino จะจัดการกับตัวเลขคาติดลบใหเอง ทำใหนำคาตัวแปรไปคำนวณไดอยางถูกตอง อยางไรก็ตามเมื่อนำ ตัวเลขคาติดลบนี้ไปเลื่อนบิตไปทางขวา (>>) จะมีปญหาเรื่องคาของตัวเลขที่ผิดพลาด รูปแบบคำสั่ง


int var = val; พารามิเตอร var คือชื่อของตัวแปรประเภท int ที่ตองการ val คือคาที่ตองการก าหนดใหกับตัวแปร ตัวอยางที่3.12 int ledPin = 31; เทคนิคสำหรับการเขียนโปรแกรม เมื่อตัวแปรมีคามากกวาคาสูงสุดที่เก็บไดจะเกิดการ “ลนกลับ” (Roll Over) ไปยังคาต่ำสุดที่เก็บได และเมื่อมีคานอยกวาคาต่ำสุดที่เก็บไดจะลนกลับไปยังคาสูงสุด ดังตัวอยางตอไปนี้ ตัวอยางที่3.13 int x x = -32,768; x = x - 1; // x now contains 32,767 // - rolls over in neg. direction x = 32,767; x = x + 1; // x now contains -32,768 - rolls over 4) unsigned int : ตัวแปรประเภทเลขจำนวนเต็มไมคิดเครื่องหมาย ตัวแปรประเภทนี้คลายกับตัวแปร int ตรงที่ใชหนวยความจำ 2 ไบตแตจะเก็บเลขจำนวนเต็มบวกโดย เก็บคา 0 ถึง 65,535 รูปแบบคำสั่ง unsigned int var = val; พารามิเตอร var คือชื่อของตัวแปร int ที่ตองการ val คือคาที่ตองการก าหนดใหกับตัวแปร ตัวอยางที่3.14 unsigned int ledPin = 31; เทคนิคสำหรับการเขียนโปรแกรม เมื่อตัวแปรมีคามากกวาคาสูงสุดจะลนกลับไปคาต่ำสุด และเมื่อมีคานอยกวาคาต่ำสุดจะลนกลับเปน คาสูงสุด ดังตัวอยาง ตัวอยางที่3.15 unsigned int x x = 0; x = x - 1; // x now contains 65535 // - rolls over in neg direction x = x + 1; // x now contains 0 - rolls over


5) long : ตัวแปรประเภทเลขจำนวนเต็ม 32 บิต เปนตัวแปรเก็บคาเลขจำนวนเต็ม ที่ขยายความจุเพิ่มจากตัวแปร int โดยตัวแปร long หนึ่งตัวกิน พื้นที่หนวยความจำ 32 บิต (4 ไบต) เก็บคาไดจาก -2,147,483,648 ถึง 2,147,483,647 รูปแบบคำสั่ง long var = val; พารามิเตอร var คือชื่อของตัวแปร long ที่ตองการ val คือคาที่ตองการก าหนดใหกับตัวแปร ตัวอยางที่3.16 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 } 6) float : ตัวแปรประเภทเลขทศนิยม เปนตัวแปรสำหรับเก็บคาเลขทศนิยม นิยมใชเก็บคาสัญญาณแอนะล็อกหรือคาที่ตอเนื่อง ตัว แปรแบบนี้เก็บคาไดละเอียดกวาตัวแปร int โดยเก็บคาไดในชวง 3.4028235 x 1038 ถึง -3.4028235 x 1038 ตัว แปรหนึ่งตัวจะใชพื้นที่หนวยความจ า 32 บิต (4 ไบต) ในการคำนวณคณิตศาสตรกับตัวแปร float จะชากวาการ คำนวณของตัวแปร int ดังนั้นพยายามหลีกเลี่ยงการคำนวณกับตัวแปร float เชน ในคำสั่งวนรอบที่ทำงานดวยความ เร็วสูงสุด สำหรับฟงกชันทางเวลาที่ตองแมนย าอยางมาก โปรแกรมเมอรบางคนจะท าการแปลง ตัวเลขทศนิยมใหเปนเลขจำนวนเต็มกอน แลวจึงคำนวณเพื่อใหทำงานไดเร็วขึ้น จะเห็นไดวาการคำนวณคณิตศาสตร ของเลข floating point จะมีการใชงานมากสำหรับการคำนวณคาขอมูลที่รับจากภายนอกเปนตัวเลขทศนิยม ซึ่งทางผู ศึกษาระบบไมโครคอนโทรลเลอรมักจะมองขามไป รูปแบบคำสั่ง float var = val; พารามิเตอร var คือชื่อของตัวแปร float ที่ตองการ val คือคาที่ตองการก าหนดใหกับตัวแปร


ตัวอยางที่3.17 float myfloat; float sensorCalbrate = 1.117; ตัวอยางที่3.18 int x; int y; float z; x = 1; y = x / 2; // y now contains 0, // integers can’t hold fractions z = (float)x / 2.0; // z now contains .5 // (you have to use 2.0, not 2) ในฟงกชั่น serial.println() ของการสงคาตัวแปรไปยังพอรตอนุกรม จะตัดตัวเลขเศษทศนิยมออกให เหลือเปนเลขจำนวนเต็ม ถาตองการเพิ่มความละเอียดใหนำคาตัวแปรคูณดวย 10 ยกกำลังตางๆตามที่ตองการ 7) double : ตัวแปรประเภทเลขทศนิยมความละเอียดสองเทา เปนตัวแปรทศนิยมความละเอียดสองเทา มีขนาด 8 ไบตคาสูงสุดที่เก็บไดคือ1.7976931348623157 x 10308 ใน Arduino มีหนวยความจำขนาดจำกัด จึงไมนิยมใชตัวแปรประเภทนี้ 8) string : ตัวแปรประเภทขอความ เปนตัวแปรเก็บขอความ ซึ่งในภาษา C จะนิยามเปนอะเรยของตัวแปรประเภท char ตัวอยางที่3.19 ตัวอยางการประกาศตัวแปรสตริง char Str1[15]; char Str2[8] = {‘a’,‘r’,‘d’,‘u’,‘i’,‘n’,‘o’}; char Str3[8] = {‘a’,‘r’,‘d’,‘u’,‘i’,‘n’, ‘o’,’\0'}; char Str4[ ] = “arduino”; 9) เครื่องหมายคำพูดขีดเดียวและสองขีด ปกติแลวจะกำหนดคาตัวแปรสตริงภายในเครื่องหมายคำพูด เชน "Abc" สำหรับตัวแปรตัวอักษร (char) จะกำหนดคาภายในเครื่องหมายคำพูดขีดเดียว 'A' 10) ตัวแปรอะเรย (array) ตัวแปรอะเรยเปนตัวแปรหลายตัว ที่ถูกเก็บรวมอยูในตัวแปรชื่อเดียวกัน โดยอางถึงตัวแปรแตละตัว ดวย หมายเลขดัชนีที่เขียนอยูในวงเล็บสี่เหลี่ยม ตัวแปรอะเรยของ Arduino จะอางอิงตามภาษา C ตัวแปรอะเรย อาจจะซับซอน แตใชแคตัวแปรอะเรยอยางงายจะตรงไปตรงมา ตัวอยางการประกาศตัวแปรอะเรย int myInts [6]; int myPins [ ] = {2, 4, 8, 3, 6}; int mySensVals [6] = {2, 4, -8, 3, 2};


char message [6] = “hello”; เราสามารถประกาศตัวแปรอะเรยไดโดยยังไมกำหนดคาดังตัวแปร myInts ในตัวแปร myPins จะประกาศ ตัวแปรอะเรยโดยไมระบุขนาด ซึ่งทำไดเมื่อประกาศตัวแปรแลวกำหนดคาทันที เพื่อใหคอมไพเลอรนับวา ตัวแปรมี สมาชิกกี่ตัวและกำหนดคาไดถูกตอง ทายที่สุดสามารถประกาศตัวแปรและกำหนดขนาดของตัวแปรอะเรยดังตัวแปร mySersVals ในการประกาศอะเรยของตัวแปร char จะตองเผื่อที่สำหรับเก็บคาตัวอักษรแจงวาจบขอความดวย การใชงานตัวแปรอะเรย การใชงานตัวแปรอะเรยทำไดโดยการพิมพชื่อตัวแปร พรอมกับระบุคาดัชนีภายในเครื่องหมายวงเล็บ สี่เหลี่ยม คาดัชนีของตัวแปรอะเรยเริ่มตนดวยคา 0 ดังนั้นคาของตัวแปร mySensVals มีคาดังนี้ mySensVals [0] == 2, mySensVals [1] == 4, ฯลฯ การกำหนดคาใหกับตัวแปรอะเรย mySensVals [0] = 10; การเรียกคาสมาชิกของตัวแปรอะเรย x = mySensVals [4]; เทคนิคการเขียนโปรแกรมเกี่ยวกับตัวแปรอะเรย ในการเรียกใชคาสมาชิกของตัวแปรอะเรย ตองระวังอยาอางถึงคาในวงเล็บที่เกินที่กำหนด เชน ประกาศตัวแปร int x [3] ตัวแปรมี 3 ตัว คือ x [0], x [1] และ x [2] ถาอางถึง x [3] จะเปนการอานคาจาก หนวยความจำซึ่งกำหนดไวใชงานอยางอื่น คาที่อานไดจะผิดพลาด การเขียนคาใหกับตัวแปรอะเรยตัวที่เกินกวาก าหนดไว อาจท าใหโปรแกรมแฮงค (หยุดการท างาน) หรือทำงานผิดเพี้ยนไป การอานหรือเขียนคาเกินคาดัชนีของตัวแปรอะเรยนี้ ทำใหเกิดบัก (ขอผิดพลาด) ที่ยากตอการคนหา อะเรยและคำสั่งวนรอบ for โดยทั่วไปเราจะพบการใชงานตัวแปรอะเรยภายในคำสั่ง for โดยใชคาตัวแปรนับรอบคำสั่ง for เปนคาดัชนี ของตัวแปรอะเรย ดังตัวอยางการพิมพคาสมาชิกแตละตัวของตัวแปรอะเรยผานพอรตอนุกรม ใหเขียนโปรแกรม ดังนี้ int i; for (i = 0; I < 5; I = I + 1) { Serial.println (myPins [i] ); } ตัวอยางโปรแกรมสาธิตการใชงานตัวแปรอะเรยที่สมบูรณ ดูไดในตัวอยางในหัวขอ Tutorials ใน เว็บไซตwww.arduino.cc


2.3.4 คำสงวนของ Arduino คำสงวนคือ คาคงที่ ตัวแปร และฟงกชั่นที่กำหนดไวเปนสวนหนึ่งของภาษา C ของ Arduino หามนำ คำเหลานี้ไปตั้งชื่อตัวแปรแสดงไดดังนี้ # Constants # Port Constants # Datatypes # other # other HIGH LOW INPUT OUTPUT SERIAL DISPLAY PI HALF_ PI TWO_PI LSBFIRST MSBFIRST CHANGE FALLING RISING false true null DDRB PINB PORTB DDRC PINC PORTC DDRD PIND PORTD boolean byte char class default do double int long private protected public return shot signed static switch throw Try Unsigned Void while += +[ ] =&& = || = ,/ / ?: << << = log && !| | ^^ = ++ != - % / * { } / / ** . - abs acos analogRead analogWrite attachInterrupts asin atan atan2 available begin bit bitRead bitWrite bitSet bitClear boolean byte case ceil char char class abs acos constrain cos default delay delayMicroseconds detachInterrupts digitalWrite


# Constants # Port Constants # Datatypes # other # other = == << = () >> ; digitalRead else exp false find findUntil float floor for HALF_PI if int log loop map max micros millis min new noInterrupts noTone null parseInt parseFloat pinMode print println pulseIn radians this tone true write


# Constants # Port Constants # Datatypes # other # other # USB Keyboard Mouse read press release releaseAll readBytes readBytesUntil return round serial serial1 serial2 serial3 setTimeout Setup shiftIn shiftOut sin sq sqrt tan


แบบฝกหัดหนวยที่ 3 เรื่อง...ชุดคำสั่งไมโครคอนโทรลเลอร Arduino ตอนที่ 1 ใหนักเรียนทำเครื่องหมายกากบาท (X) ลงบนคำตอบที่ถูกที่สุดเพียงคำตอบเดียว 1. การเขียนโปรแกรมไมโครคอนโทรลเลอร Arduino สามารถเขียนดวยภาษาใดไดบาง ก. ภาษาแอสเซมบลีและจาวา ข. ภาษาแอสเซมบลีและเบสิก ค. ภาษาซีและจาวา ง. ภาษาแอสเซมบลีและซี 2. ขอใดไมใชขอดีของภาษาภาษาแอสเซมบลี ก. มีความเร็วในการทำงาน ข. เปนภาษาที่เขาใจงายกวาภาษาอื่น ค. การเขียนโปรแกรมใชพื้นที่นอย ง. มีความใกลเคียงกับภาษาเครื่อง 3. โครงสรางภาษาซีของ Arduino ตองมีฟงกชั่น อยางนอยเทาใด ก. 1 ฟงกชั่น ข. 2 ฟงกชั่น ค. 3 ฟงกชั่น ง. กี่ฟงกชั่นก็ได 4. ฟงกชั่น setup() หมายถึงขอใด ก. เปนสวนการเขียนและสั่งใหโปรแกรม ทำงาน ข. เปนคำสั่งใหไมโครคอนโทรลเลอรทำงาน ตามเงื่อนไข ค. เปนฟงกชั่นการกำหนดคาตางๆ ง. เปนชื่อเรียกแทนพื้นที่เก็บขอมูลใน หนวยความจำ 5. ฟงกชั่น loop() หมายถึงขอใด ก. เปนสวนการเขียนและสั่งใหโปรแกรม ทำงาน ข. เปนคำสั่งใหไมโครคอนโทรลเลอรทำงาน ตามเงื่อนไข ค. เปนฟงกชั่นการกำหนดคาตางๆ ง. เปนชื่อเรียกแทนพื้นที่เก็บขอมูลใน หนวยความจำ 6. คำสั่งการควบคุม หมายถึงขอใด ก. เปนสวนการเขียนและสั่งใหโปรแกรม ทำงาน ข. เปนคำสั่งใหไมโครคอนโทรลเลอรทำงาน ตามเงื่อนไข ค. เปนฟงกชั่นการกำหนดคาตางๆ ง. เปนชื่อเรียกแทนพื้นที่เก็บขอมูลใน หนวยความจำ 7. ตัวแปร หมายถึงขอใด ก. เปนสวนการเขียนและสั่งใหโปรแกรม ทำงาน ข. เปนคำสั่งใหไมโครคอนโทรลเลอรทำงาน ตามเงื่อนไข ค. เปนฟงกชั่นการกำหนดคาตางๆ ง. เปนชื่อเรียกแทนพื้นที่เก็บขอมูลใน หนวยความจำ 8. ขอใดไมใชคำสั่งการดำเนินการทางคณิตศาสตร ก. + ข. X ค. % ง. / 9. ขอใดเปนคำสั่งการดำเนินการทางตรรกะ ก. ++ ข. &= ค. && ง. << 10. ขอใดเปนคำสั่งการดำเนินการระดับบิต ก. ++ ข. &= ค. && ง. <<


แบบฝกหัดหนวยที่ 3 เรื่อง...ชุดคำสั่งไมโครคอนโทรลเลอร Arduino ตอนที่ 2 ใหนักเรียนตอบคำถามตอไปนี้ใหถูกตอง 1. จงอธิบายความหมายของคำสั่งตอไปนี้ - คำสั่ง if ………………………………………………………………………………………………………………………………………………………. - คำสั่ง if...else ………………………………………………………………………………………………………………………………………………………. - คำสั่ง for ………………………………………………………………………………………………………………………………………………………. - คำสั่ง goto ………………………………………………………………………………………………………………………………………………………. - คำสั่ง ; (semicolon) ………………………………………………………………………………………………………………………………………………………. - คำสั่ง { } (curly braces) ………………………………………………………………………………………………………………………………………………………. - คำสั่ง // (single line comment) ………………………………………………………………………………………………………………………………………………………. - คำสั่ง & ………………………………………………………………………………………………………………………………………………………. - คำสั่ง | ………………………………………………………………………………………………………………………………………………………. - คำสั่ง HIGH/LOW ………………………………………………………………………………………………………………………………………………………. - คำสั่ง INPUT/OUTPUT ……………………………………………………………………………………………………………………………………………………….


ใบความรู หนวยที่ 5 Arduino กับพอรตดิจิตอลอินพุต 1. หัวขอเรื่อง 2. สาระสำคัญ 2.1 การตอสวิตชกับไมโครคอนโทรลเลอร Arduino จากคุณสมบัติของพอรตดิจิตอลในบอรด Arduino ซึ่งมีพอรตดิจิตอลทั้งหมด 14 พอรตนั้น สามารถ กำหนดใหเปนไดทั้งพอรตเอาตพุตและอินพุต สำหรับรับคาสัญญาณไฟฟาจากอุปกรณอินพุตตาง เมื่อกำหนดใหเปน พอรตอินพุตแลวสามารถใชๆ ไดเพื่อนำไปใชในการควบคุมการทำงานของวงจรเอาตพุตที่ออกแบบไว ตัวอยางอุปกรณ อินพุต ไดแก สวิตชหรือปุมกด สัญญาณอินพุตที่ตอเขาพอรตไมโครคอนโทรลเลอร Arduino มีการเปลี่ยนแปลงสถานะ อยู 2 สภาวะ คือ ลอจิก “1” กับลอจิก “0” ตัวอยางสวิตชอินพุตแสดงในรูปที่ 5.1 ภาพที่ 5.1 สวิตชอินพุตรูปรางตาง ๆ


การตอสวิตชเขาพอรตไมโครคอนโทรลเลอร Arduino สามารถตอใชงานได 2 แบบ ไดแก การตอ สวิตชเบบเอคทีฟ ไฮท (Active high) และการตอสวิตชแแบบแอคทีฟโลว (Active low) สำหรับการตอสวิตชแบบแอค ทีฟไฮท (Active high) เปนการตอจากแหลงจายไฟผานสวิตชและตัวตานทานลงกราวนด จุดตอระหวางขาสวิตชกับตัว ตานทานตอเขาที่พอรตไมโครคอนโทรลเลอร Arduino ลักษณะการตอตัวตานทานแบบนี้เรียกวา การตอตัวตานทาน แบบพูลดาวน(Pull - down resistor) แสดงในภาพที่ 5.2 ลักษณะการ ทำงานของวงจรนี้ ขณะยังไมกดสวิตชที่ขา อินพุตของพอรตไมโครคอนโทรลเลอรมีคาเปนลอจิก "0" เมื่อใดที่กดสวิตชที่พอรตของไมโครคอนโทรลเลอรมีคาเปน ลอจิก "1" ซึ่งลักษณะการเปลี่ยนแปลงที่ขาอินพุตนี้นำไปใชสำหรับการเขียนโปรแกรมรับคาอินพุตทางดิจิตอลตอไป ภาพที่ 5.2 การตอสวิตชแบบแอคทีฟไฮท สวิตชแบบแอคฟโลว (Active low) เปนการตอจากแหลงจายไฟผานและผานสวิตชลงกราวนด จุด ตอระหวางขาตัวตานทานกับสวิตชตอเขาพอรตดิจิตอลของไมโครคอนโทรลเลอร Arduino ลักษณะการตอตัวตานทาน แบบนี้เรียกวา การตอตัวตานทานแบบพูลอัป แสดงในภาพที่5.3 ลักษณะการทำงานของวงจรนี้ ขณะยังไมกดสวิตชที่ขา อินพุตของพอรตไมโครคอนโทรลเลอรมีคาเปนลอจิก "1" แตเมื่อกดสวิตชที่พอรตของไมโครคอนโทรลเลอรมีคาเปน ลอจิก "0 " ซึ่งลักษณะการเปลี่ยนแปลงที่ขาอินพุตนี้นำไปใชสำหรับการเขียนโปรแกรมรับคาอินพุตทางดิจิตอลตอไป จากวงจรทั้ง 2 แบบนี้วงจรที่นิยมนำมาออกแบบสำหรับการตอวงจรรวมกับไมโครคอนโทรลเลอรคือวงจรการตอสวิตช แบบแอคทีฟ โลว (Active low) เนื่องจากชวยในการปองกันสัญญาณรบกวนจากภายนอกไดดีกวาการตอสวิตซแบบแอ คทีฟ ไฮท (Active high) ภาพที่ 5.3 การตอสวิตชแบบแอคทีฟโลว


จากการตอสวิตชสวิตชแบบแอคทีฟ ไฮท (Active high) หรือแบบแอคฟ โลว (Active low) มีปญหา ที่เกิดขึ้นในการใชสวิตชแบบหนาสัมผัสคือ ขณะกดสวิตชและปลอยสวิตชนั้นเกิดการแตะกันของหนาสัมผัสหลาย ๆ ครั้งเกิดขึ้น จากปญหาดังกลาวทำใหไมโครคอนโทรลเลอรสามารถอานคาที่ไดจากสัมผัสหลาย ๆ ครั้งนั้นได ซึ่งเปน สาเหตุที่ทำใหไมโครคอนโทรลเลอรทำงานผิดพลาดตามโปรแกรมที่เขียนขึ้นได แสดงในภาพที่ 5.4 ภาพที่ 5.4 การเกิดสัญญาณรบกวน ขระกดและปลอยสวิตช 2.2 การแกปญหาดวยฮารดแวร ดีเบาว (Hardware Debouncing) ภาพที่ 5.5 การแกปญหาดวยฮารดแวร ดีเบราว ขณะยังไมกดสวิตช SW1 ตัวเก็บประจุ C1 ทำการชารจประจุไว ทำใหพอรตอินพุตของไมโคร คอนโทรลเลอรมีคาเปนลอจิก "1 " แตเมื่อทำการกดสวิตซ SW1 ตัวเก็บประจุ C1 ทำการคายประจุผานตัวตานทาน R2 ซึ่งทำใหแรงดันคอย ๆ ลดลงเรื่อย ๆ เมื่อแรงดันไฟฟามีคาต่ำกวา 1.8 โวลต ไมโครคอนโทรลเลอรจึงมีคาเปนลอจิก "0 " แตถาแรงดันไฟฟามีคามากกวา 3.1 โวลตไมโครคอนโทรลเลอรจึงมีคาเปนลอจิก " 1 " ตัวอยางการเขียนโปรแกรมทดสอบวงจรฮารดแวร ดีเบาซ (Hardware Debouncing) #define buttonPin 2 // กำหนดตัวแปร buttonPin ตอที่พอรตดิจิตอลขา 2


#define ledPin 13 // กำหนดตัวแปร ledPin ตอที่พอรตดิจิตอลขา 13 void setup() { pinMode(buttonPin,INPUT); // เซตพอรตดิจิตอลขา 2 ใหเปนพอรตเอาตพุต pinMode(ledPin, OUTPUT); // เซตพอรตดิจิตอลขา 13 ใหเปนพอรตเอาตพุต } void loop() { digitalWrite(ledPin, digitalRead(buttonPin)); // อานคาจากอินพุต และนำคาที่อานได // แสดงทางเอาตพุต } 2.3 การแกปญหาดวยซอฟตแวร ดีเบาว (ware Debouncing) รีเลย (Relay) เปนอุปกรณพื้นฐานสำหรับใชในการควบคุมอุปกรณไฟฟาตางไฟฟากระแสตรงและ กระแสสลับ อุปกรณรีเลยที่กลาวถึงนี้เปนแบบอิเล็กโทรแมคเนติก tromechanical Relay) ตามภาพที่ 4.4 เปน ตัวอยางการตอรีเลยซึ่งควบคุมการทำงานโดยพอรตดิจิตอลเอาตพุตของบอรด Arduino ผานทรานซิสเตอร โดยรีเลย ทำการสั่งงานใหหลอดไฟ 220 โวลตทำงานเมื่อพอรตเอาตพุตสงสัญญาณลอจิก “1” ออกมา กระแสไฟฟาไหลผานรีซิ สเตอร เขาไปไบอัสซาเบส (B) ของทรานซิสเตอรทำใหทรานซิสเตอรทำงาน เมื่อทรานซิสเตอรทำงานสงผลใหรีเลย ทำงานดวยเชนกัน และทำใหหลอดไฟ 220 โวลตติดสวางดวย ภาพที่ 4.4 การขับรีเลยโดยใชทรานซิสเตอรเพื่อเปด-ปดหลอดไฟกระแสสลับ 220 โวลต การเขียนโปรแกรมเพื่อใชงานเปนพอรตดิจิตอลเอาตพุต เริ่มตนดวยการกำหนดโหมดการทำงาน ใหกับพอรตโดยใชคำสั่ง pinMode( ) คำสั่ง pinMode( ) เปนคำสั่งสำหรับกำหนดการทำงานของพอรตที่ตองการใชงานใหเปนพอรตเอาตพุตหรือพอรตอินพุต รูปแบบคำสั่ง pinMode (ตำแหนงพอรต, โหมด OUTPUT หรือ INPUT) ถาตองการใชงานเปนพอรตเอาตพุตตองใชคำสั่ง digitalWrite( ) เพื่อสงขอมูลออกพอรตเอาตพุตใหมีคา HIGH (ลอจิก “1”) หรือ LOW (ลอจิก “0”) ตามตองการ คำสั่ง digitalWrite( )


รูปแบบคำสั่ง digitalWrite(ตำแหนงพอรต, คา HIGH หรือ LOW)


แบบฝกหัดหนวยที่ 4 เรื่อง... Arduino กับพอรตดิจิตอลเอาตพุต ตอนที่ 1 ใหนักเรียนทำเครื่องหมายกากบาท (X) ลงบนคำตอบที่ถูกที่สุดเพียงคำตอบเดียว 1. จำนวนพอรตดิจิตอลของบอรด Arduino มี จำนวนเทาใด ก. 11 พอรต ข. 12 พอรต ค. 13 พอรต ง. 14 พอรต 2. พอรตของไมโครคอนโทรลเลอร Arduino สามารถจายกระแสซอรสและกระแสซิงคไดเทาใด ก. 20 มิลลิแอมป ข. 30 มิลลิแอมป ค. 40 มิลลิแอมป ง. 50 มิลลิแอมป 3. การตอกระแสซอรสสำหรับบอรด Arduino หมายถึงขอใด ก. ตอโหลดเขากับบอรด Arduino ข. ตอโหลดเขากับบอรด Arduino สวนอีก ดานหนึ่งตอแรงดันไฟบวก ค. ตอโหลดเขากับบอรด Arduino สวนอีก ดานหนึ่งตอแรงดันไฟบวก และกราวด ง. ตอโหลดเขากับพอรดของบอรด Arduino และอีกดานหนึ่งตอลงกราวด 4. การตอกระแสซิงคสำหรัดบอรด Arduino หมายถึงขอใด ก. ตอโหลดเขากับบอรด Arduino และอีก ดานหนึ่งตอลงกราวด ข. ตอโหลดเขากับบอรด Arduino และอีก ดานหนึ่งตอแรงดันไฟบวก ค. ตอโหลดเขากับบอรด Arduino ง. ตอโหลดเขากับบอรด Arduino สวนอีก ดานหนึ่งตอแรงดันไฟบวก และกราวด 5. เมื่อตองการใหพอรตเอาตพุตของบอรด Arduino ตอกับหลอดแอลอีดี ควรใหแรงดันตก ครอมหลอดแอลอีดี มีคาเทาใด ก. 5 โวลต ข. 4 โวลต ค. 2 โวลต ง. 1 โวลต 6. ถาตองการสงลอจิก “1” ออกที่พอรต ไมโครคอนโทรลเลอร ตองใชคำสั่งใด ก. digitalWrite(ledPin, HIGH); ข. digitalWrite(ledPin, LOW); ค. LOW PORTB.0 ง. HIGH PORTB.0 7. ถาตองการสงลอจิก “0” ออกที่พอรต ไมโครคอนโทรลเลอร ตองใชคำสั่งใด ก. HIGH PORTB.0 ข. digitalWrite(ledPin, LOW); ค. LOW PORTB.0 ง. digitalWrite(ledPin, HIGH); 8. ถาตองการหนวงเวลา 0.5 วินาที ตองใชคำสั่งใด ก. delay(5); ข. delay(5000); ค. delay(500); ง. delay(0.5); 9. ถาตองการเซ็ตพอรตดิจิตอลขา 7 ใหเปนพอรต เอาตพุต ตองใชคำสั่งใด ก. pinMode(5, OUTPUT); ข. pinMode(kPinLed, OUTPUT); ค. pinMode(ledPin, OUTPUT); ง. pinMode(7, OUTPUT); 10. ขอใดไมใชคำสั่งการควบคุม ก. if ข. delay ค. while ง. for


แบบฝกหัดหนวยที่ 4 เรื่อง... Arduino กับพอรตดิจิตอลเอาตพุต ตอนที่ 2 ใหนักเรียนตอบคำถามตอไปนี้ใหถูกตอง 1. จงอธิบายการตอ LED กับพอรตของบอรด Arduino ในโหมดกระแสซอรส พรอมเขียนวงจร ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. 2. จงอธิบายการตอ LED กับพอรตของบอรด Arduino ในโหลดที่กินกระแสสูง พรอมเขียนวงจร ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ……………………………………………………………………………………………………………………………………………………….


ใบความรู หนวยที่ 5 Arduino กับพอรตดิจิตอลอินพุต 1. หัวขอเรื่อง 2. สาระสำคัญ 2.1 การตอสวิตชกับไมโครคอนโทรลเลอร Arduino จากคุณสมบัติของพอรตดิจิตอลในบอรด Arduino ซึ่งมีพอรตดิจิตอลทั้งหมด 14 พอรตนั้น สามารถ กำหนดใหเปนไดทั้งพอรตเอาตพุตและอินพุต สำหรับรับคาสัญญาณไฟฟาจากอุปกรณอินพุตตาง เมื่อกำหนดใหเปน พอรตอินพุตแลวสามารถใชๆ ไดเพื่อนำไปใชในการควบคุมการทำงานของวงจรเอาตพุตที่ออกแบบไว ตัวอยางอุปกรณ อินพุต ไดแก สวิตชหรือปุมกด สัญญาณอินพุตที่ตอเขาพอรตไมโครคอนโทรลเลอร Arduino มีการเปลี่ยนแปลงสถานะ อยู 2 สภาวะ คือ ลอจิก “1” กับลอจิก “0” ตัวอยางสวิตชอินพุตแสดงในรูปที่ 5.1 ภาพที่ 5.1 สวิตชอินพุตรูปรางตาง ๆ


การตอสวิตชเขาพอรตไมโครคอนโทรลเลอร Arduino สามารถตอใชงานได 2 แบบ ไดแก การตอ สวิตชเบบเอคทีฟ ไฮท (Active high) และการตอสวิตชแแบบแอคทีฟโลว (Active low) สำหรับการตอสวิตชแบบแอค ทีฟไฮท (Active high) เปนการตอจากแหลงจายไฟผานสวิตชและตัวตานทานลงกราวนด จุดตอระหวางขาสวิตชกับตัว ตานทานตอเขาที่พอรตไมโครคอนโทรลเลอร Arduino ลักษณะการตอตัวตานทานแบบนี้เรียกวา การตอตัวตานทาน แบบพูลดาวน(Pull - down resistor) แสดงในภาพที่ 5.2 ลักษณะการ ทำงานของวงจรนี้ ขณะยังไมกดสวิตชที่ขา อินพุตของพอรตไมโครคอนโทรลเลอรมีคาเปนลอจิก "0" เมื่อใดที่กดสวิตชที่พอรตของไมโครคอนโทรลเลอรมีคาเปน ลอจิก "1" ซึ่งลักษณะการเปลี่ยนแปลงที่ขาอินพุตนี้นำไปใชสำหรับการเขียนโปรแกรมรับคาอินพุตทางดิจิตอลตอไป ภาพที่ 5.2 การตอสวิตชแบบแอคทีฟไฮท สวิตชแบบแอคฟโลว (Active low) เปนการตอจากแหลงจายไฟผานและผานสวิตชลงกราวนด จุด ตอระหวางขาตัวตานทานกับสวิตชตอเขาพอรตดิจิตอลของไมโครคอนโทรลเลอร Arduino ลักษณะการตอตัวตานทาน แบบนี้เรียกวา การตอตัวตานทานแบบพูลอัป แสดงในภาพที่5.3 ลักษณะการทำงานของวงจรนี้ ขณะยังไมกดสวิตชที่ขา อินพุตของพอรตไมโครคอนโทรลเลอรมีคาเปนลอจิก "1" แตเมื่อกดสวิตชที่พอรตของไมโครคอนโทรลเลอรมีคาเปน ลอจิก "0 " ซึ่งลักษณะการเปลี่ยนแปลงที่ขาอินพุตนี้นำไปใชสำหรับการเขียนโปรแกรมรับคาอินพุตทางดิจิตอลตอไป จากวงจรทั้ง 2 แบบนี้วงจรที่นิยมนำมาออกแบบสำหรับการตอวงจรรวมกับไมโครคอนโทรลเลอรคือวงจรการตอสวิตช แบบแอคทีฟ โลว (Active low) เนื่องจากชวยในการปองกันสัญญาณรบกวนจากภายนอกไดดีกวาการตอสวิตซแบบแอ คทีฟ ไฮท (Active high) ภาพที่ 5.3 การตอสวิตชแบบแอคทีฟโลว


จากการตอสวิตชสวิตชแบบแอคทีฟ ไฮท (Active high) หรือแบบแอคฟ โลว (Active low) มีปญหา ที่เกิดขึ้นในการใชสวิตชแบบหนาสัมผัสคือ ขณะกดสวิตชและปลอยสวิตชนั้นเกิดการแตะกันของหนาสัมผัสหลาย ๆ ครั้งเกิดขึ้น จากปญหาดังกลาวทำใหไมโครคอนโทรลเลอรสามารถอานคาที่ไดจากสัมผัสหลาย ๆ ครั้งนั้นได ซึ่งเปน สาเหตุที่ทำใหไมโครคอนโทรลเลอรทำงานผิดพลาดตามโปรแกรมที่เขียนขึ้นได แสดงในภาพที่ 5.4 ภาพที่ 5.4 การเกิดสัญญาณรบกวน ขระกดและปลอยสวิตช 2.2 การแกปญหาดวยฮารดแวร ดีเบาว (Hardware Debouncing) ภาพที่ 5.5 การแกปญหาดวยฮารดแวร ดีเบราว ขณะยังไมกดสวิตช SW1 ตัวเก็บประจุ C1 ทำการชารจประจุไว ทำใหพอรตอินพุตของไมโคร คอนโทรลเลอรมีคาเปนลอจิก "1 " แตเมื่อทำการกดสวิตซ SW1 ตัวเก็บประจุ C1 ทำการคายประจุผานตัวตานทาน R2 ซึ่งทำใหแรงดันคอย ๆ ลดลงเรื่อย ๆ เมื่อแรงดันไฟฟามีคาต่ำกวา 1.8 โวลต ไมโครคอนโทรลเลอรจึงมีคาเปนลอจิก "0 " แตถาแรงดันไฟฟามีคามากกวา 3.1 โวลตไมโครคอนโทรลเลอรจึงมีคาเปนลอจิก " 1 " ตัวอยางการเขียนโปรแกรมทดสอบวงจรฮารดแวร ดีเบาซ (Hardware Debouncing) #define buttonPin 2 // กำหนดตัวแปร buttonPin ตอที่พอรตดิจิตอลขา 2 #define ledPin 13 // กำหนดตัวแปร ledPin ตอที่พอรตดิจิตอลขา 13


void setup() { pinMode(buttonPin,INPUT); // เซตพอรตดิจิตอลขา 2 ใหเปนพอรตเอาตพุต pinMode(ledPin, OUTPUT); // เซตพอรตดิจิตอลขา 13 ใหเปนพอรตเอาตพุต } void loop() { digitalWrite(ledPin, digitalRead(buttonPin)); // อานคาจากอินพุต และนำคาที่อานได // แสดงทางเอาตพุต } 2.3 การแกปญหาดวยซอฟตแวร ดีเบาว (software Debouncing) การแกปญหาดวยวิธีนี้สามารถทำไดงายที่สุด คือ เมื่อโปรแกรมทำการตรวจสอบวาสวิตช ถูกกดแลว ใหทำการหนวงเวลาออกไปประมาณ 10 มิลลิวินาที #define buttonPin 2 // กำหนดตัวแปร buttonPin ตอที่พอรตดิจิตอลขา 2 #define ledPin 13 // กำหนดตัวแปร ledPin ตอที่พอรตดิจิตอลขา 13 void setup() { pinMode(buttonPin, INPUT); // เซตพอรตดิจิตอลขา 2 ใหเปนพอรตเอาตพุต pinMode(ledPin, OUTPUT); // เซตพอรตดิจิตอลขา 13 ใหเปนพอรตเอาตพุต } void loop() { digitalWrite(ledPin, digitalRead(buttonPin); // อานคาจากอินพุต และนำคาที่อานได delay(10); // หนวงเวลา 0.01 วินาที การเขียนโปรแกรมเพื่อใชงานเปนพอรตดิจิตอลอินพุต ตองใชคำสั่งรับคาอินพุตเขามายังพอรต ของไมโครคอนโทรลเลอร Arduino ดังนี้ คำสั่ง digitalRead(); รูปแบบคำสั่ง digitalRead (ตำแหนงพอรต) เปนการอานคาสถานะของตำแหนงพอรตดิจิตอลที่ตองการอาน ตั้งแตพอรต 0 ถึง 13 วามีคาเปน HIGH หรือ LOW ตัวอยางการเขียนโปรแกรม int ledPin = 13; // กำหนดตัวแปร ledPin ตอที่พอรตดิจิตอลขา 13 int inPin = 7; // กำหนดตัวแปร inPin ตอที่พอรตดิจิตอลขา 7 int val = 0; // กำหนดตัวแปร va มีคาเทากับ 0 void setup () { pinMode (ledPin, OUTPUT); // เซตพอรตดิจิตอลขา 13 ใหเปนพอรตเอาตพุต pinMode (inPin, INPUT); // เชตพอรตดิจิตอลขา 7 ใหเปนพอรตอินพุต } Void loop () {


val = digitalRead(inPin); // อานคาจากสัญญาณอินพุต digitalWrite(ledPin,val); // นำคาที่อานไดแสดงผลที่พอรตเอาตพุต }


แบบฝกหัดหนวยที่ 5 เรื่อง... Arduino กับพอรตดิจิตอลอินพุต ตอนที่ 1 ใหนักเรียนทำเครื่องหมายกากบาท (X) ลงบนคำตอบที่ถูกที่สุดเพียงคำตอบเดียว 1. ขอใดไมใชอุปกรณในระบบอินพุต ก. Relay ข. Push button ค. Dip ง. Rotaty 2. การตอสวิตชอินพุตเขากับ Arduino สามารถตอ ไดกี่แบบ ก. 1 แบบ ข. 2 แบบ ค. 3 แบบ ง. 4 แบบ จากรูปขางลาง ใชในคำถามขอที่ 3 - 5 3. จากวงจรเปนการตอสวิตชแบบใด ก. ลอจิก “0” ข. ลอจิก “1” ค. แบบแอคทีฟ โลว ง. แบบแอคทีฟ ไฮท 4. จากวงจรเมื่อกดสวิตช พอรตของ Arduino เปนอยางไร ก. พอรต Arduino ไมทำงาน ข. พอรต Arduino ไดรับลอจิก “1” ค. พอรต Arduino ไดรับลอจิก “0” ง. ไมมีอะไรเกิดขึ้น 5. จากวงจร ตัวตานทานที่ตออยูกับ ไมโครคอนโทรลเลอร ตอในลักษณะใด ก. R แบบพูลดาวน ข. R แบบพูลอัฟ ค. ลอจิก “0” ง. ลอจิก “1” จากรูปขางลาง ใชในคำถามขอที่ 6 – 8 6. จากวงจรเปนการตอสวิตชแบบใด ก. ลอจิก “0” ข. ลอจิก “1” ค. แบบแอคทีฟ โลว ง. แบบแอคทีฟ ไฮท 7. จากวงจรเมื่อกดสวิตช พอรตของ Arduino เปนอยางไร ก. พอรต Arduino ไมทำงาน ข. พอรต Arduino ไดรับลอจิก “1” ค. พอรต Arduino ไดรับลอจิก “0” ง. ไมมีอะไรเกิดขึ้น 8. จากวงจร ตัวตานทานที่ตออยูกับ ไมโครคอนโทรลเลอร ตอในลักษณะใด ก. R แบบพูลดาวน ข. R แบบพูลอัฟ ค. ลอจิก “0” ง. ลอจิก “1” 9. วิธีการแกปญหาการเกิดสัญญาณดีเบาว ขณะ กดสวิตชทำไดกี่วิธี ก. 1 วิธี ข. 2 วิธี ค. 3 วิธี ง. 4 วิธี 10. ขอใดเปนคำสั่งในการรับคาอินพุต ก. pinMode(Led1, OUTPUT); ข. pinMode(Sw1, INPUT); ค. digitalWrite ง. digitalRead


แบบฝกหัดหนวยที่ 5 เรื่อง... Arduino กับพอรตดิจิตอลอินพุต ตอนที่ 2 ใหนักเรียนตอบคำถามตอไปนี้ใหถูกตอง 1. จงอธิบายการตอสวิตชแบบแอคทีฟ ไฮท (Active high) พรอมเขียนวงจร ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. 2. จงอธิบายการแกปญหาโดยฮารดแวร ดีเบาว (Hardware Debouncing) พรอมเขียนวงจร ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………. ……………………………………………………………………………………………………………………………………………………….


ใบความรู หนวยที่ 6 Arduino กับแอลอีดีแสดงผล 7 1. หัวขอเรื่อง 2. สาระสำคัญ 2.1 การตอใชงาน Arduino กับแอลอีดีแสดงผล 7 สวนชนิดคอมมอนแอโนด แอลอีดีแสดงผล 7 สวนชนิดคอมมอนแอโนด (Common Anode) เปนการนำเอาไดโอด เปลงแสง จำนวน 8 ตัวมาตอเขาดวยกันโดยโดยขาแอโนดของไดโอดเปลงแสงทั้ง 8 ตัวมาตอรวมกันเปนขาคอมมอน (Common)สวนขาแคโทดของไดโอดเปลงแสงแตละตัวถูกตอเปนขาควบคุมเพื่อใหไดโอดเปลงแสงติดเปนตัวเลขตาง ๆ กัน ชื่อเรียกของขาควบคุมมีดังตอไปนี้a, b, c, d, e, f, g และ dot ภาพที่ 6.1 รูปรางและโครงสรางของ LED แสดงผล 7 สวน


Click to View FlipBook Version