วันพุธที่ 19 กันยายน พ.ศ. 2550

การเขียนโปรแกรมหุ่นยนต์ (12/9/50) เดินตรงไป เมื่อชนจะถอยหลังแล้วเลี้ยว ทำไปเรื่อยๆจนเจอทางออก

codeที่ได้

' {$STAMP BS2sx}
' {$PBASIC 2.5}
ko1 VAR Word
ko2 VAR Word
ko3 VAR Word
ko4 VAR Word
ko5 VAR Word
PAUSE 1000
main: GOSUB forward : PAUSE 1000
ko1 = 0
ko2 = 0
ko3 = 0
ko5 = 0
GOSUB ul_turn : PAUSE 140
DO
GOSUB forward : PAUSE 12
GOSUB r_turn : PAUSE 13
ko1 = ko1 + 1
LOOP UNTIL(ko1 = 50)
DO
GOSUB forward : PAUSE 12
GOSUB l_turn : PAUSE 15
ko2 = ko2 + 1
LOOP UNTIL(ko2 = 55)
DO
GOSUB forward : PAUSE 12
GOSUB r_turn : PAUSE 15
ko3 = ko3 +1LOOP UNTIL(ko3 = 65)
GOSUB forward : PAUSE 1500
DO
GOSUB forward : PAUSE 12
GOSUB r_turn : PAUSE 12
ko4 = ko4 + 1LOOP UNTIL(ko4 = 100)
GOSUB forward : PAUSE 2000
GOSUB u_turn : PAUSE 228
DO
GOSUB motor_off: PAUSE 10000
LOOP UNTIL(ko5 = 1)
GOTO mainforward: HIGH 13 : LOW 12 : HIGH 15 : LOW 14 : RETURN
r_turn: LOW 13 : LOW 12 : HIGH 15 : LOW 14 : RETURN
l_turn: HIGH 13 : LOW 12 : LOW 14 : LOW 15 : RETURN
u_turn: LOW 13 : HIGH 12 : HIGH 15 : LOW 14 : RETURN
ul_turn: HIGH 13 : LOW 12 : LOW 15 : HIGH 14 : RETURN
motor_off: LOW 13 : LOW 12 : LOW 15 : LOW 14 : RETURN

หลักการทำงาน : เดินตรงไป เมื่อชนจะถอยหลังแล้วเลี้ยวตามที่เรากำหนดไว้ในcode ( ครั้งที่ 1จะเลี้ยวขวา ครั้งที่2จะเลี้ยวขวา
ครั้งที่3จะเลี้ยวซ้าย ครั้งที่4จะเลี้ยวขวา ครั้งที่5จะเลี้ยวขวา ครั้งที่6จะเลี้ยวซ้าย ครั้งที่7จะเลี้ยวซ้าย ) และจะเจอทางออก

ปัญหาที่พบ : บางทีรถก็เลี้ยวซ้าย บางที่ก็เลี้ยวขวา

วิทีการแก้ไข : ลองเปลี่ยนรูปแบบการใช้คำสั่งเลี้ยว จากIF เป็นloop

การเขียนโปรแกรมหุ่นยนต์ (19/9/50) เดินตรงไป เมื่อเจอสิ่งกิดขวางจะหยุดโดยไม่ชน

codeที่ได้

' {$STAMP BS2sx}
' {$PBASIC 2.5}
' {$PORT COM1}
ADC VAR Word
R VAR Word
I VAR Byte
X VAR Word
ko VAR Word
PAUSE 1000
HIGH 10
GOSUB forward
GOSUB RD_ADC
IF ( ADC > 75) THEN
DO
GOSUB motor_off
LOOP UNTIL(ko=1)
ENDIF
RD_ADC: LOW 10 : PAUSE 1 : HIGH 10
SEROUT 10,240,[1]
SERIN 10,240,[ADC.BYTE0,adc.BYTE1]
RETURN
Error: DEBUG "Error Reading" , CRRETURN
forward: HIGH 13 : LOW 12 : HIGH 15 : LOW 14 : RETURN
backward: HIGH 12 : LOW 13 : HIGH 14 : LOW 15 : RETURN
S_left: HIGH 13 : LOW 12 : HIGH 14 : LOW 15 : RETURN
Motor_off:LOW 13 : LOW 12 : LOW 15 : LOW 14 : RETURN

หลักการทำงาน :เดินตรงไ ป เมื่อเจอสิ่งกิดขวาง หุ่นจะหยุด โดยไม่ชน

ปัญหาที่พบ : เสียบสายพอร์ดผิดที่ ทำให้เซ็นเซอร์ไม่ทำงาน ระยะห่างจากผนังไม่เป็นไปตามต้องการ

วิธีแก้ไข : เปรียบเทียบหุ่นของเพื่อนแล้ว เสียบสายของหุ่นเราให้ถูก