โปรแกรมควบคุมหุ่นยนต์ AX-11 Board โปรแกรมควบคุมหุ่นยนต์ ครูศิริขวัญ วงค์ชุมพันธ์ (ครูดุ่ย) http://www.chiangkham.ac.th/krudui
บอร์ด AX-11, โปรแกรม Interactive C
การดาวน์โหลดโปรแกรมควบคุมหลักหรือเฟิร์มแวร์ (firmware) หนังสือสีม่วง หน้า 15 - 19 (ทำเมื่อต้องการ reset โปรแกรมใหม่ หรือเมื่อขาดไฟเลี้ยงที่บอร์ดหรือแบตเตอร์รี่หมด)
ฟังก์ชั่นแสดงผลที่โมดูล LCD ใช้ฟังก์ชั่น printf แสดงผลได้เพียง 2 บรรทัดเท่านั้น หากตั้งการขึ้นบรรทัดใหม่ \n ใช้งานร่วมกับอักขระพิเศษ %d รับค่าและแสดงผลเป็นตัวเลข int ฐานสิบ (decimal) %x รับค่าและแสดงผลเป็นตัวเลข int ฐานสิบหก (hexadecimal) %b รับค่าและแสดงผลเป็นตัวเลข int ฐานสอง (binary) %c รับค่าและแสดงผลเป็นตัวอักขระ รหัสเอสกี (ASCII) %f รับค่าและแสดงผลเป็นจำนวนจริง (floating point) %s รับค่าและแสดงผลเป็นกลุ่มตัวอักขระ (อะเรย์) (string)
void main(void) { printf(“Hello World”); } ตัวอย่างโปรแกรม void main(void) { printf(“Hello World”); }
void main(void) { printf(“Hello World\n”); } ตัวอย่างโปรแกรม void main(void) { printf(“Hello World\n”); }
void main(void) { int x; x=26; printf(“Value is %d\n”,x); } ตัวอย่างโปรแกรม void main(void) { int x; x=26; printf(“Value is %d\n”,x); }
void main(void) { int x; x=26; printf(“Value is %x\n”,x); } ตัวอย่างโปรแกรม void main(void) { int x; x=26; printf(“Value is %x\n”,x); }
void main(void) { int x; x=26; printf(“Value is %b\n”,x); } ตัวอย่างโปรแกรม void main(void) { int x; x=26; printf(“Value is %b\n”,x); }
ฟังก์ชั่นสร้างสัญญาณเสียงและการหน่วงเวลา ฟังก์ชั่น beep void main(void) { beep(); } เป็นการสร้างสัญญาณเสียงความถี่ 500 Hz 1 ครั้ง นาน 0.3 วินาที
ฟังก์ชั่นสร้างสัญญาณเสียงและการหน่วงเวลา ฟังก์ชั่น tone void main(void) { tone(800.0,0.1); } เป็นการสร้างสัญญาณเสียงความถี่ 800 Hz 1 ครั้ง นาน 0.1 วินาที
ฟังก์ชั่นสร้างสัญญาณเสียงและการหน่วงเวลา ฟังก์ชั่น sleep void main(void) { beep(); sleep(0.5); } เป็นการหน่วงเวลา 0.5 วินาที
ตัวอย่างโปรแกรมการสร้างเสียงที่ความถี่ต่างๆ void main(void) { float freq=100.0; while(!(freq>3000.0)) printf(“Freq .%f Hertz\n”,freq); tone(freq,0.1); freq += 100.0; sleep(1.0); } beep(); printf(“Stop\n”);
ฟังก์ชั่นเกี่ยวกับการขับมอเตอร์ไฟตรง ฟังก์ชั่น fd (forward) (จ่ายไฟแบบตรงขั้ว หรือเดินหน้า) void main(void) { fd(1); } เดินหน้า จ่ายไฟตรงขั้วเพื่อขับมอเตอร์ 1 ให้หมุน 50% ของกำลังขับสูงสุด LED สีเขียวจะติด (มอเตอร์มีได้ 4 ค่า คือ 0, 1, 2, 3
ฟังก์ชั่นเกี่ยวกับการขับมอเตอร์ไฟตรง ฟังก์ชั่น bk (backward) (จ่ายไฟแบบกลับขั้ว หรือถอยหลัง) void main(void) { bk(1); } ถอยหลัง จ่ายไฟกลับขั้วเพื่อขับมอเตอร์ 1 ให้หมุน 50% ของกำลังขับสูงสุด LED สีแดงจะติด (มอเตอร์มีได้ 4 ค่า คือ 0, 1, 2, 3
ฟังก์ชั่นเกี่ยวกับการขับมอเตอร์ไฟตรง ฟังก์ชั่น motor (ควบคุมความเร็วและทิศทางเอง) void main(void) { motor(0,100); } เดินหน้า จ่ายไฟตรงขั้วเพื่อขับมอเตอร์ 0 ให้หมุน 100% ของกำลังขับสูงสุด
ฟังก์ชั่นเกี่ยวกับการขับมอเตอร์ไฟตรง ฟังก์ชั่น motor (ควบคุมความเร็วและทิศทางเอง) void main(void) { motor(1,-50); } ถอยหลัง จ่ายไฟกลับขั้วเพื่อขับมอเตอร์ 1 ให้หมุน 50% ของกำลังขับสูงสุด
ฟังก์ชั่นเกี่ยวกับการขับมอเตอร์ไฟตรง ฟังก์ชั่น off (หยุดการขับมอเตอร์ไฟตรง) void main(void) { off(1); } หยุด หยุดการขับมอเตอร์ช่อง 1 (มีได้ 4 ค่า คือ 0, 1, 2, 3)
ฟังก์ชั่นเกี่ยวกับการขับมอเตอร์ไฟตรง ฟังก์ชั่น ao หรือ alloff (หยุดการขับมอเตอร์ทั้งหมด) void main(void) { ao(); } หยุดทุกช่อง หยุดการขับมอเตอร์ทุกช่องพร้อมกัน (ตั้งแต่ช่อง 0 ถึง 3)
ตัวอย่างโปรแกรมการขับมอเตอร์ไฟตรงอย่างง่าย void main(void) { printf(“Motor test\n”); while(1) fd(0); sleep(3.0); beep(); bk(0); }
ฟังก์ชั่นเกี่ยวกับอินพุตอะนาลอกและดิจิตอล ฟังก์ชั่น analog void main(void) { while(1) int result; result=analog(5); printf(“analog5 = %d\n”,result); sleep(0.1); } ต่อช่อง Al5 สามารถต่อเข้ากับช่องอินพุตอะนาลอกได้ทั้ง 21 ช่อง คือ Al2-Al6 และ Al16-Al31 ค่าที่ได้จะอยู่ระหว่าง 0-255 เท่านั้น
ฟังก์ชั่นเกี่ยวกับอินพุตอะนาลอกและดิจิตอล ฟังก์ชั่น knob (ตัวต้านทาน) void main(void) { while(1) int result; result=knob(); printf(“knob = %d\n”,result); sleep(0.1); } ค่าที่ได้จะอยู่ระหว่าง 0-255 เท่านั้น
ฟังก์ชั่นเกี่ยวกับอินพุตอะนาลอกและดิจิตอล ฟังก์ชั่น digital void main(void) { while(1) int result; result=digital (15); printf(“digital15 = %d\n”,result); sleep(0.1); } ต่อช่อง IN-15 สามารถต่อเข้ากับช่องอินพุตดิจิตอลได้ทั้ง 9 ช่อง คือ IN-7 ถึง IN-15 ค่าที่ได้มีแค่ 0 หรือ 1 เท่านั้น
ฟังก์ชั่นของสวิตซ์ START และ STOP ฟังก์ชั่น start_button void main(void) { while(1) while(!start_button()); beep(); sleep(0.1); } กด start ค้างไว้ ถ้าสวิตซ์ start ถูกกด มีผลลัพธ์เป็น 1 , ถ้าไม่ถูกกด มีผลลัพธ์เป็น 0
ฟังก์ชั่นของสวิตซ์ START และ STOP ฟังก์ชั่น start_button void main(void) { while(1) while(!start_button()); while(start_button()); beep(); sleep(0.1); } กด start แล้วปล่อย ถ้าสวิตซ์ start ถูกกด มีผลลัพธ์เป็น 1 , ถ้าไม่ถูกกด มีผลลัพธ์เป็น 0
ฟังก์ชั่นของสวิตซ์ START และ STOP ฟังก์ชั่น start_press void main(void) { while(1) start_press(); beep(); sleep(0.1); } กด start แล้วปล่อย ถ้าสวิตซ์ start ถูกกด มีผลลัพธ์เป็น 1 , ถ้าไม่ถูกกด มีผลลัพธ์เป็น 0
ฟังก์ชั่นของสวิตซ์ START และ STOP ฟังก์ชั่น stop_button void main(void) { while(1) while(!stop_button()); beep(); sleep(0.1); } กด stop ค้างไว้ ถ้าสวิตซ์ stop ถูกกด มีผลลัพธ์เป็น 1 , ถ้าไม่ถูกกด มีผลลัพธ์เป็น 0
ฟังก์ชั่นของสวิตซ์ START และ STOP ฟังก์ชั่น stop_button void main(void) { while(1) while(!stop_button()); while(stop_button()); beep(); sleep(0.1); } กด stop แล้วปล่อย ถ้าสวิตซ์ stop ถูกกด มีผลลัพธ์เป็น 1 , ถ้าไม่ถูกกด มีผลลัพธ์เป็น 0
ฟังก์ชั่นของสวิตซ์ START และ STOP ฟังก์ชั่น stop_press void main(void) { while(1) stop_press(); beep(); sleep(0.1); } กด stop แล้วปล่อย ถ้าสวิตซ์ stop ถูกกด มีผลลัพธ์เป็น 1 , ถ้าไม่ถูกกด มีผลลัพธ์เป็น 0
คำสั่งตรวจสอบเงื่อนไข คำสั่ง if ต่อช่อง IN-15 void main(void) { while(1) int x=digital(15); if(x==1) fd(0); sleep(0.1); } ต่อช่อง m-0 ถ้ามีการกดปุ่มสวิตซ์ เงื่อนไขเป็นจริง หรือ 1 มอเตอร์ 0 เดินหน้า ถ้าไม่กดออก
คำสั่งตรวจสอบเงื่อนไข คำสั่ง if-else ต่อช่อง IN-15 void main(void) { while(1) int x=digital(15); if(x==1) fd(0); sleep(0.1); }else bk(0); } ต่อช่อง m-0 ถ้ามีการกดปุ่มสวิตซ์ เงื่อนไขเป็นจริง หรือ 1 มอเตอร์ 0 เดินหน้า ถ้าไม่กดเงื่อนไขเท็จ ถอยหลัง