ตัวอย่างการเขียนโปรแกรมอย่างง่าย
|
/**** ชุดคำสั่งโปรแกรมเบสิก-แสตมป์ ****/
/================================/
/ ชุดคำสั่งให้หุ่นยนต์เดินตามแสง /
/================================/
| ความหมายของคำสั่งต่างๆในโปรแกรม | |
| บรรทัดที่1-3 | จะเป็นการกำหนดค่าของตัวเบสิกแสตมป์ |
| บรรทัดที่4 | กำหนดให้พอร์ตที่6คือ"L_LIGHT" (แผงวงจรตรวจจับแสงด้านซ้าย) |
| บรรทัดที่5 | กำหนดให้พอร์ตที่9คือ"R_LIGHT" (แผงวงจรตรวจจับแสงด้านขวา) |
| บรรทัดที่6-8 | เป็นการกำหนดให้ตัวแปรชื่อ "L_VALUE" , "R_VALUE" และ "ERROR" เป็นตัวแปรระดับเวิร์ดซึ่งมีข้อมูล 65,536 ค่า (0-65,535) (ฐานสิบ) |
| บรรทัดที่ 9 | กำหนดค่า 200 ให้กับตัวแปร DEVIATION (เราสามารถกำหนดค่าเองได้) |
| บรรทัดที่10-11 | กำหนดให้ตัวแปร "L" และ "R" เป็นตัวแปรระดับไบต์มีข้อมูลได้ 256 ค่า (0-255) (ฐานสิบ) |
| บรรทัดที่12 |
เป็นการหยุดพักชั่วคราว 1000 มิลลิวินาที
กำหนดค่าตัวแปรโหมดและความเร็ว ไปที่คำสั่ง WAIT_BUSY |
| บรรทัดที่13 | คำสั่ง " MAIN " : ให้ L_LIGHT มีลอจิก = 1 |
| บรรทัดที่14 |
หยุด 1 มิลลิวินาที
เป็นคำสั่งวัดค่าของเวลาที่ขาพอร์ตยังคงสถานะเดิมอยู่ โดยมี L_LIGHT เป็นตัวแปร 1คือค่าคงที่เพื่อกำหนดสภาวะของขาเมื่อกระทำคำสั่งอยู่ และ L_VALUE เป็นตัวแปรสำหรับเก็บค่าคาบเวลา ให้ R_LIGHT มีลอจิก = 1 หยุด 1 มิลลิวินาที เป็นคำสั่งวัดค่าของเวลาที่ขาพอร์ตยังคงสถานะเดิมอยู่ โดยมี R_LIGHT เป็นตัวแปร 1คือค่าคงที่เพื่อกำหนดสภาวะของขาเมื่อกระทำคำสั่งอยู่ และ R_VALUE เป็นตัวแปรสำหรับเก็บค่าคาบเวลา ถ้าค่าของ L_VALUE (ได้จากการวัด) - ค่า error มากกว่า 200 (กำหนดไว้) ให้ไปที่คำสั่ง REDIRECT ค่าของ error เท่ากับค่าของ L_VALUE - ค่าของ R_VALUE สั่งให้ถอยหลัง 4 สเตป ไปที่คำสั่ง DRV ให้กลับไปที่คำสั่ง MAIN |
| บรรทัดที่ 15 |
เป็นคำสั่ง REDIRECT เพื่อให้หุ่นยนต์ตามแสง
:
ถ้า L_VALUE มากกว่า R_VALUE ให้ไปที่คำสั่ง REDIRECT_R ถ้า R_VALUE มากกว่า L_VALUE ให้ไปที่คำสั่ง REDIRECT_L |
| บรรทัดที่ 16 |
เป็นคำสั่ง REDIRECT_L :
เลี้ยวขวา โดยล้อซ้ายอยู่กับที่ ส่วนล้อขวาถอยหลัง 4 สเตป
ไปที่คำสั่ง DRV |
| บรรทัดที่ 17 |
เป็นคำสั่ง REDIRECT_R : เลี้ยวซ้าย
โดยล้อซ้ายถอยหลัง 4 สเตป ส่วนล้อขวาอยู่กับที่
ไปที่คำสั่ง DRV |
| บรรทัดที่ 18 | คำสั่ง DRV : ส่งผลกลับไปที่ด้านบนที่เรากำหนดตัวแปรไว้ |
| บรรทัดที่ 19 |
คำสั่ง WAIT_BUSY : ถ้า BUSY
= 1 ให้ไปที่คำสั่ง WAIT_BUSY
เพื่อรอจนกระทั่ง BUSY = 0
ให้โปรแกรมกลับไปทำงานที่โปรแกรมหลักหลังจากทำงานที่โปรแกรมย่อยๆ เสร็จแล้ว |
PAUSE 1000
SEROUT SO,BAUD,[128,"M",4,128,"S",40]
GOSUB WAIT_BUSY
PAUSE 1
RCTIME L_LIGHT,1,L_VALUE
HIGH R_LIGHT
PAUSE 1
RCTIME R_LIGHT,1,R_VALUE
IF (L_VALUE-ERROR) >DEVIATION THEN REDIRECT
ERROR = L_VALUE-R_VALUE
L=-4 : R=-4
GOSUB DRV
GOTO MAIN
IF R_VALUE>L_VALUE THEN REDIRECT_L
GOSUB DRV
GOTO MAIN
GOSUB DRV
GOTO MAIN
18. DRV: SEROUT SO,BAUD,[L,R]
19. WAIT_BUSY: IF BUSY=1 THEN WAIT_BUSY
RETURN