จัดทำ โดย ใบความรู้ นางสาวธิดาชา แสงจันทร์ รายวิชาไมโครคอนโทรลเลอร์ แผนกวิชา ช่างอิเล็กทรอนิกส์
ใบความรู หนวยที่ 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 สวน