ใบงานการทดลองท่ี 9 การใชง้ านอนิ เตอรร์ ัพท์จากภายนอก (External Int.)วตั ถปุ ระสงค์เชิงพฤตกิ รรมเพ่ือให้นักศึกษาสามารถ 1. เขยี นโปรแกรมเพื่อรบั คา่ การเกิดอินเตอรร์ ัพท์จากภายนอกได้อย่างถูกตอ้ ง 2. ประยกุ ต์ใช้อนิ เตอรร์ ัพทจ์ ากภายนอกรว่ มกบั การใช้งานพื้นฐานไดอ้ ยา่ งถูกต้องอุปกรณป์ ระกอบการทดลอง 1 เครือ่ ง 1 บอรด์ 1. คอมพวิ เตอรท์ ม่ี ีช่องเสยี บ USB 1 บอร์ด 2. บอรด์ Arduino Mega 2560 10 เสน้ 3. บอร์ด One the all 1 เส้น 4. สายเชือ่ มต่อ 5. สาย USB type A to USB type Bลงช่ือผู้ทดลอง 1. _____________________________ 2.__________________________________ทฤษฎีที่เกย่ี วข้อง โดยทั่วไปการใช้งานอาร์ดุยโน จะเป็นการใช้งานแบบเป็นลาดับข้ัน โดยวนรอบทีละคาส่ัง ซึ่งแต่ละคาสง่ั จะมีชว่ งเวลาในการทางานของตัวเอง โดยจะไมไ่ ปทางานท่ฟี ังกช์ ั่นอน่ื ๆ กอ่ น ดังรูปใบงานที่ 9-1 ฟังกช์ ่ัน 1 ฟงั ก์ชั่น 2 ฟงั ก์ช่นั n รูปใบงานที่ 9-1 ลักษณะการทางานของโปรแกรมโดยท่ัวไป หนังสือชดุ ฝกึ ด้านดิจทิ ลั 187
แต่ในสว่ นของการเกดิ อนิ เตอรร์ ัพท์นน้ั เป็นการทางานท่ีพิเศษกว่าการทางานปกติ กล่าวคือหากมีการเกิดอินเตอร์รัพท์ โปรแกรมจะกระโดดไปทางานในฟังก์ช่ันสาหรับอินเตอร์รัพท์ให้เสร็จเรียบร้อยก่อน แล้วจึงออกมาทางานในฟังกช์ ั่นปกติ ดงั รปู ใบงานท่ี 9-2 ฟงั กช์ น่ั 1 ฟงั กช์ น่ั 2 ฟังกช์ ั่นอนิ เตอร์รัพท์ ฟงั กช์ น่ั n รูปใบงานที่ 9-2 ลักษณะการทางานของโปรแกรมทมี่ ีการอนิ เตอรร์ ัพท์วิธีการใชง้ านอินเตอรร์ พั ท์จากภายนอก (External Interrupts) การใช้งานอินเตอร์รัพท์จากภายนอกนั้น คือการตรวจสอบหรือการรับค่าอินพุตจากภายนอก เช่นสวิตช์ หรืออุปกรณ์อื่นๆ เพื่อใช้งานการระบุการอินเตอร์รัพท์ โดยตาแหน่งขาสาหรับรุ่น Mega2560 และรุ่นอน่ื ๆ แสดงดงั รูปใบงานที่ 9-3 รูปใบงานท่ี 9-3 ลกั ษณะการทางานของโปรแกรมท่ีมีการอนิ เตอรร์ ัพท์ ท่มี า arduino.ccคาสง่ั attachInterrupt (interrupt, ISR, mode); เมือ่ interrupt : หมายเลขของแหล่งอนิ เตอรร์ ัพท์ ISR : คือช่อื ฟงั กช์ ัน่ ท่ีจะไปทางานเม่อื เกิดการอนิ เตอรร์ ัพท์ mode : คอื เหตุการณท์ ตี่ ้องการใหเ้ กิดการอนิ เตอรร์ ัพท์ โดยแบง่ เปน็ 4 เหตุการณ์ ดงั นี้ - LOW คอื กาหนดให้เกดิ อนิ เตอร์รพั ทเ์ มอื่ ขาสญั ญาณเปน็ สถานะ LOW - CHANGE คอื กาหนดให้เกดิ อินเตอร์รัพทเ์ มือ่ ขาสญั ญาณมีการเปลี่ยนสถานะ188 หนงั สือชดุ ฝกึ ดา้ นดจิ ิทลั
- RISING คือ กาหนดให้เกิดอินเตอร์รัพท์เม่ือขาสัญญาณมีการเปล่ียนสถานะจาก LOW เป็น HIGH - FALLING คือกาหนดให้เกิดอินเตอร์รัพท์เม่ือขาสัญญาณมีการเปลี่ยนสถานะ จาก HIGH เป็น LOWข้นั ตอนการทดลองในการทดลองนี้ จะเป็นการเปรียบเทียบระหว่างการทางานแบบมีการอินเตอร์รัพท์และไม่มีอนิ เตอรร์ พั ท์ โดยดาเนินการทดลองดังน้ี1. เช่อื มตอ่ สวติ ช์และแอลอีดี เข้ากบั ไมโครคอนโทรลเลอรด์ ังตารางใบงานท่ี 9-1 และรูปใบงานท่ี 9-4ตารางใบงานที่ 9-1 การเชอื่ มตอ่ ในการทดลองบอร์ดอารด์ ุยโน โมดูล / บอรด์ One The All D2 SW1 D11 LED1 D12 LED2 Vin 9V GND GND รูปใบงานท่ี 9-4 การเชอื่ มต่อเพือ่ ใชใ้ นการทดลอง หนังสอื ชดุ ฝกึ ด้านดิจิทลั 189
2. เขยี นโปรแกรมบน Arduino IDE ตามโปรแกรมการทดลองที่ 9-1โปรแกรมการทดลองที่ 9-1 1 int loop_led = 12; 2 int int_led = 11; 3 int sw = 2; 4 volatile int state = LOW; 5 void setup() 6{ 7 pinMode(loop_led, OUTPUT); 8 pinMode(int_led, OUTPUT); 9 pinMode(sw,INPUT); 10 } 11 12 void loop() 13 { 14 digitalWrite(loop_led,HIGH); 15 delay(1000); 16 digitalWrite(loop_led,LOW); 17 delay(1000); 18 if (digitalRead(sw)==0) led_show(); 19 } 20 21 void led_show() 22 { 23 state = !state; 24 digitalWrite(int_led, state); 25 }3. ทาการ Compile แล้ว Upload โปรแกรมลงบน Arduino บันทึกผลการทางานเบื้องตน้………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………4. ทดสอบการทางาน โดยกดปุ่ม SW1 เพอ่ื ให้ LED1 มกี ารเปล่ยี นแปลง แลว้ บนั ทึกผลการทางาน………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………5. หลังจากการทดสอบพบว่าการกดปุ่มเพอ่ื ให้ LED1 มกี ารเปล่ยี นแปลงสถานะจะต้องมีการกดปุ่มอยา่ งไร………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………190 หนงั สอื ชุดฝึกด้านดิจทิ ลั
6. เขยี นโปรแกรมบน Arduino IDE ตามโปรแกรมการทดลองที่ 9-2โปรแกรมการทดลองที่ 9-2 1 int loop_led = 12; 2 int int_led = 11; 3 4 volatile int state = LOW; 5 void setup() 6{ 7 pinMode(loop_led, OUTPUT); 8 pinMode(int_led, OUTPUT); 9 attachInterrupt(0, blink, FALLING); 10 } 11 12 void loop() 13 { 14 digitalWrite(loop_led,HIGH); 15 delay(1000); 16 digitalWrite(loop_led,LOW); 17 delay(1000); 18 } 19 20 void blink() 21 { 22 state = !state; 23 digitalWrite(int_led, state); 24 } 25อธบิ ายการทางานบรรทัดที่ 4 : ประกาศตัวแปรชนดิ volatile int ชอ่ื วา่ state และให้มคี า่ เปน็ LOWบรรทัดท่ี 9 : เปิดการอินเตอร์รัพท์จากภายนอกช่องที่ 0 โดยกาหนดให้ไปทางานที่ฟังก์ช่ัน blink เม่ือเกิดการอินเตอรร์ ัพท์ และทางานที่ขอบขาลง7. ทาการ Compile แลว้ Upload โปรแกรมลงบน Arduino บนั ทึกผลการทางานเบ้ืองตน้………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………8. ทดสอบการทางาน โดยกดปมุ่ SW1 เพอื่ ให้ LED1 มกี ารเปล่ยี นแปลง แลว้ บันทกึ ผลการทางาน……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………… หนงั สอื ชุดฝกึ ดา้ นดจิ ิทลั 191
9. หลังจากการทดสอบพบว่าการกดปุม่ เพ่ือให้ LED1 มีการเปล่ียนแปลงสถานะ จะตอ้ งมีการกดปุม่ อย่างไร………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………สรุปผลการทดลอง………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………คาถามท้ายการทดลอง1. การเขียนโปรแกรมแบบรับค่าอินเตอร์รัพท์จากภายนอก (โปรแกรมการทดลองที่ 9-2) มีความแตกตา่ งจากการเขยี นโปรแกรมแบบรับคา่ ปกติ (โปรแกรมการทดลองที่ 9-2) อย่างไร………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………2. จงประยุกต์เขียนโปรแกรม โดยกาหนดให้เม่ือกดสวิตช์หลอด LED1 จะกระพริบเป็นจังหวะ (ON=1Sec,OFF = 1Sec) และเม่ือกดสวติ ช์อกี ครั้ง หลอด LED1 กจ็ ะดับทันที โดยใช้งานอินเตอร์รัพท์ภายนอกช่องที่ 0………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………192 หนงั สือชดุ ฝกึ ดา้ นดิจิทลั
Search
Read the Text Version
- 1 - 6
Pages: