150 likes | 513 Views
221. บทที่ 6 IPST-BOT กับการหลบหลีก สิ่งกีดขวางแบบสัมผัส. 222. การทดลองที่ 3 ( ตรวจจับการชนด้วยสวิตซ์ 1 ตัว). การเชื่อมต่อทางฮาร์ดแวร์ ต่อ ZX-SWITCH จากช่อง LOW เข้ากับพอร์ต PA0. 223. #include <sleep.h> #include <in_out.h> #include <lcd.h> void main() { while(1) {
E N D
221 บทที่ 6 IPST-BOT กับการหลบหลีก สิ่งกีดขวางแบบสัมผัส
222 การทดลองที่ 3 (ตรวจจับการชนด้วยสวิตซ์ 1 ตัว) การเชื่อมต่อทางฮาร์ดแวร์ ต่อ ZX-SWITCH จากช่อง LOW เข้ากับพอร์ต PA0
223 #include <sleep.h> #include <in_out.h> #include <lcd.h> void main() { while(1) { lcd("Switch1 = %d ",in_a(0)); sleep(10); } } โปรแกรมทดสอบหุ่นยนต์ที่ 3(switch1_test.c)อ่านค่าสถานะการทำงานของแผงสวิตช์ซึ่งต่อกับขาพอร์ต PA0
224 หลักการทำงาน1. ในกรณีที่ไม่เกิดการชน หุ่นยนต์จะเคลื่อนที่ไปข้างหน้าอย่างต่อเนื่อง 2. ในกรณีที่พบว่าเกิดการชน จะมีเสียงเตือนดัง 1 ครั้ง จากนั้นหุ่นยนต์จะเคลื่อนที่ถอยหลังแล้วเปลี่ยนทิศทางการเคลื่อนที่มาทางซ้าย การทดลองที่ 4 (หุ่นยนต์หลบหลีกสิ่งกีดขวาง)
225 การเชื่อมต่อทางฮาร์ดแวร์ 1. ต่อ ZX-SWITCH จากช่อง LOW เข้ากับพอร์ต PA0 2. ต่อ ZX-SPEAKER เข้ากับพอร์ต PB4
226 void main() { char mid; lcd("Press SW1"); sw1_press(); while(1) { mid = in_a(0); if(mid==0) { beep_b(4); backward(1000); turn_left(800); } else { forward(10); } } } โปรแกรมทดสอบหุ่นยนต์ที่ 4(robo_bumper1.c)หุ่นยนต์หลบหลีกสิ่งกีดขวาง #include <motor.h> #include <sleep.h> #include <in_out.h> #include <lcd.h> #include <sound.h> #define POW 70 void forward(unsigned int delay) { motor(1,POW); motor(2,POW); sleep(delay); } void backward(unsigned int delay) { motor(1,-POW); motor(2,-POW); sleep(delay); } void turn_left(unsigned int delay) { motor(1,-POW); motor(2,POW); sleep(delay); }
227 การทดลองที่ 5(ตรวจจับการชนด้วยสวิตช์ 2 ตัว) การเชื่อมต่อทางฮาร์ดแวร์ 1. ต่อ ZX-SWITCH ตัวที่ 1 จากช่อง LOW เข้ากับพอร์ต PA0 2. ต่อ ZX-SWITCH ตัวที่ 2 จากช่อง LOW เข้ากับพอร์ต PA1
228 #include <sleep.h> #include <in_out.h> #include <lcd.h> void main() { while(1) { lcd("Switch1 = %d #nSwitch2 = %d", in_a(0), in_a(1)); sleep(10); } } โปรแกรมทดสอบหุ่นยนต์ที่ 5(switch2_test.c)ทดสอบการทำงานของแผงสวิตช์ 2 ตัวซึ่งต่อกับขาพอร์ต PA0 และ PA1
229 หลักการทำงาน1. ในกรณีที่หุ่นยนต์ไม่พบการชน หุ่นยนต์จะเคลื่อนที่ไปข้างหน้าอย่างต่อเนื่อง 2. กรณีที่หุ่นยนต์พบการชนของแผงวงจรสวิตช์ด้านซ้าย หุ่นยนต์จะส่งเสียงสัญญาณดัง 1 ครั้ง จากนั้นหุ่นยนต์เคลื่อนที่ถอยหลัง แล้วทำการเลี้ยวขวา 3. กรณีที่หุ่นยนต์พบการชนของแผงวงจรสวิตช์ด้านขวา หุ่นยนต์จะส่งเสียงสัญญาณดัง 1 ครั้ง จากนั้นหุ่นยนต์เคลื่อนที่ถอยหลัง แล้วทำการเลี้ยวซ้าย 4. กรณีที่หุ่นยนต์พบการชนของแผงวงจรสวิตช์ทั้งสองด้าน หุ่นยนต์จะส่งเสียงสัญญาณดัง 1 ครั้งเช่นกัน จากนั้นหุ่นยนต์เคลื่อนที่ถอยหลัง แล้วทำการเลี้ยวซ้าย การทดลองที่ 6(หุ่นยนต์หลบหลีกสิ่งกีดขวางจากตัวตรวจจับการชน 2 ตัว)
230 การเชื่อมต่อทางฮาร์ดแวร์ 1. ต่อ ZX-SWITCH ตัวที่ 1 จากช่อง LOW เข้ากับพอร์ต PA0 2. ต่อ ZX-SWITCH ตัวที่ 2 จากช่อง LOW เข้ากับพอร์ต PA1 3. ต่อ ZX-SPEAKER เข้ากับพอร์ต PB4
231 void turn_right(unsigned int delay) { motor(1,POW); motor(2,-POW); sleep(delay); } void main() { char left,right; lcd("Press SW1"); sw1_press(); while(1) { left = in_a(0); right = in_a(1); if(left==1 && right==1) { forward(10); } else if(left==0 && right==1) { beep_b(4); backward(1000); turn_right(800); } else if(left==1 && right==0) { beep_b(4); backward(1000); turn_left(800); } else if(left==0 && right==0) { beep_b(4); backward(1000); turn_left(1500); } } } โปรแกรมทดสอบหุ่นยนต์ที่ 6(robo_bumper2.c)หุ่นยนต์หลบหลีกสิ่งกีดขวางโดยใช้ตัวตรวจจับการชน 2 ตัว #include <motor.h> #include <sleep.h> #include <in_out.h> #include <lcd.h> #include <sound.h> #define POW 70 void forward(unsigned int delay) { motor(1,POW); motor(2,POW); sleep(delay); } void backward(unsigned int delay) { motor(1,-POW); motor(2,-POW); sleep(delay); } void turn_left(unsigned int delay) { motor(1,-POW); motor(2,POW); sleep(delay); }
232 ฟังก์ชันสุ่มค่าตัวเลขrand() ฟังก์ชั่นสุ่มค่าตัวเลข ตั้งแต่ 0 ถึง 32767หลักการทำงาน1. ในกรณีที่หุ่นยนต์ไม่พบการชน (ไม่พบสิ่งกีดขวาง) หุ่นยนต์จะเคลื่อนที่ไปข้างหน้า 2. เมื่อหุ่นยนต์ตรวจพบว่าที่ด้านใดด้านหนึ่งหรือทั้งสองด้านพร้อมกัน จะส่งเสียงสัญญาณ 1 จังหวะ จากนั้นหุ่นยนต์เคลื่อนที่ถอยหลัง แล้วทำการสุ่มค่าเพื่อตัดสินใจเลือกทิศทางในการเลี้ยว การทดลองที่ 7(หุ่นยนต์หลบหลีกสิ่งกีดขวางด้วยการชนแบบสุ่มทิศทาง)
233 การเชื่อมต่อทางฮาร์ดแวร์ 1. ต่อ ZX-SWITCH ตัวที่ 1 จากช่อง LOW เข้ากับพอร์ต PA0 2. ต่อ ZX-SWITCH ตัวที่ 2 จากช่อง LOW เข้ากับพอร์ต PA1 3. ต่อ ZX-SPEAKER เข้ากับพอร์ต PB4
234 void turn_right(unsigned int delay) { motor(1,POW); motor(2,-POW); sleep(delay); } void main() { char left,right; lcd("Press SW1"); sw1_press(); while(1) { left = in_a(0); right = in_a(1); if(left==0 || right==0) { beep_b(4); backward(1000); if(rand()%2==1) { turn_left(800); } else { turn_right(800); } } else { forward(10); } } } โปรแกรมทดสอบหุ่นยนต์ที่ 7(robo_bumper3.c)หุ่นยนต์หลบหลีกสิ่งกีดขวางโดยใช้วิธีการสุ่มทิศทาง #include <motor.h> #include <sleep.h> #include <in_out.h> #include <lcd.h> #include <sound.h> #define POW 70 void forward(unsigned int delay) { motor(1,POW); motor(2,POW); sleep(delay); } void backward(unsigned int delay) { motor(1,-POW); motor(2,-POW); sleep(delay); } void turn_left(unsigned int delay) { motor(1,-POW); motor(2,POW); sleep(delay); }