วันอาทิตย์ที่ 30 สิงหาคม พ.ศ. 2552

แจกโค็ดวิ่งตามเส้น (แข่งในเกมส์ ฮาลองเบย์)

ส่วนพอร์ตต่างๆนั้น ดูเอานะครับ ติดตรงไหน เมล์มาถามได้เลยครับ
-ใช้ pic18f452 ความถี่ 40M
-มีการเช็คสีของก้อนไข่มุกด้วยนะครับ
-มีสีละ8โปรแกรม (เล่นเอาคนปล่อยหุ่นงงเลยครับ)
-sensor ใช้ตัวที่ลงใว้ก่อนหน้า เรียงจากซ้ายไปขวา a b c d || e f g h

define osc 40
DEFINE ADC_BITS 8
DEFINE ADC_SAMPLEUS 50

TRISA =255
TRISB =255
TRISC =00
TRISD =255

adcon1 = 2

collor VAR PORTb.0
pro var portb.1
start1 VAR PORTe.0
start2 var porte.1
start3 var porte.2
start4 var portb.2

dr VAR portc.3
dl VAR portc.0

a VAR PORTd.0
b VAR PORTd.1
c VAR PORTd.2
d VAR PORTd.3
e VAR PORTd.4
f VAR PORTd.5
g VAR PORTd.6
h VAR PORTd.7

i VAR BYTE
sen_up var byte
sb var byte
CL VAR BYTE
cg var byte

cg=130

PORTC =111111
pause 1000
gosub set
pause 1000

chk_st:
if (start1=0)and(start2=1)and(start3=1)and(start4=1)and(collor=0)and(pro=1) then
goto red1 :endif
if (start1=1)and(start2=0)and(start3=1)and(start4=1)and(collor=0)and(pro=1) then
goto red2 :endif
if (start1=1)and(start2=1)and(start3=0)and(start4=1)and(collor=0)and(pro=1) then
goto red3 :endif
if (start1=1)and(start2=1)and(start3=1)and(start4=0)and(collor=0)and(pro=1) then
goto red4 :endif
if (start1=0)and(start2=1)and(start3=1)and(start4=1)and(collor=0)and(pro=0) then
goto red5 :endif
if (start1=1)and(start2=0)and(start3=1)and(start4=1)and(collor=0)and(pro=0) then
goto red6 :endif
if (start1=1)and(start2=1)and(start3=0)and(start4=1)and(collor=0)and(pro=0) then
goto red7 :endif
if (start1=1)and(start2=1)and(start3=1)and(start4=0)and(collor=0)and(pro=0) then
goto red8 :endif

if (start1=0)and(start2=1)and(start3=1)and(start4=1)and(collor=1)and(pro=1) then
goto green1 :endif
if (start1=1)and(start2=0)and(start3=1)and(start4=1)and(collor=1)and(pro=1) then
goto green2 :endif
if (start1=1)and(start2=1)and(start3=0)and(start4=1)and(collor=1)and(pro=1) then
goto green3 :endif
if (start1=1)and(start2=1)and(start3=1)and(start4=0)and(collor=1)and(pro=1) then
goto green4 :endif
if (start1=0)and(start2=1)and(start3=1)and(start4=1)and(collor=1)and(pro=0) then
goto green5 :endif
if (start1=1)and(start2=0)and(start3=1)and(start4=1)and(collor=1)and(pro=0) then
goto green6 :endif
if (start1=1)and(start2=1)and(start3=0)and(start4=1)and(collor=1)and(pro=0) then
goto green7 :endif
if (start1=1)and(start2=1)and(start3=1)and(start4=0)and(collor=1)and(pro=0) then
goto green8 :endif
goto chk_st


red1:
gosub ffff
gosub left_v
gosub ffff2
gosub chk_line
GoSub forward
GoSub forward
GoSub forward
GoSub forward
gosub left
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor1
gosub left1
gosub forward
gosub left
gosub forward
gosub forward
gosub right
gosub forward
gosub forward
gosub left
gosub forward
gosub right
gosub forward
gosub bbb
gosub up
gosub forward1
gosub d_paste
gosub bb
gosub right
gosub set
gosub chk_line
gosub forward
gosub right
gosub forward
gosub forward
gosub forward
gosub bbb
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor1
gosub left1
gosub forward
gosub forward
gosub left
pause 1500
gosub chk_line
gosub up
pause 1000
gosub chk_line
GoSub forward1
gosub d_paste
gosub d_box1
gosub bb
gosub left1
gosub down
gosub beep_up
gosub chk_line
gosub forward
gosub left
gosub forward
gosub left
gosub forward
gosub forward
gosub forward
gosub forward
gosub forward
gosub right
gosub forward
gosub bbb
gosub up
gosub forward1
gosub d_paste
gosub bb
gosub left
gosub down
gosub left
gosub forward
gosub up1
gosub forward1
pause 500
gosub beep
gosub up
gosub bb
gosub right
gosub down
gosub beep_up
gosub chk_line
gosub forward
gosub left
gosub forward
gosub right
gosub set
End
red2:
gosub ffff
gosub left_v
gosub ffff2
gosub chk_line
GoSub forward
gosub right
GoSub forward
GoSub forward
GoSub forward
gosub left
GoSub forward
GoSub forward
GoSub forward
GoSub forward
GoSub forward
gosub left
GoSub forward
GoSub forward
GoSub forward
gosub bbb
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor1
gosub left1
gosub forward
gosub forward
gosub forward
gosub left
gosub forward
gosub right
gosub forward
gosub bbb
gosub up
gosub forward1
gosub d_paste
gosub bb
gosub right
gosub set
gosub chk_line
gosub forward
gosub right
gosub forward
gosub forward
gosub forward
gosub bbb
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor1
gosub left1
gosub forward
gosub forward
gosub left
pause 1500
gosub chk_line
gosub up
pause 1000
gosub chk_line
GoSub forward1
gosub d_paste
gosub d_box1
gosub bb
gosub left1
gosub down
gosub beep_up
gosub chk_line
gosub forward
gosub left
gosub forward
gosub left
gosub forward
gosub forward
gosub forward
gosub forward
gosub forward
gosub right
gosub forward
gosub bbb
gosub up
gosub forward1
gosub d_paste
gosub bb
gosub left
gosub down
gosub left
gosub forward
gosub up1
gosub forward1
pause 500
gosub beep
gosub up
gosub bb
gosub right
gosub down
gosub beep_up
gosub chk_line
gosub forward
gosub left
gosub forward
gosub right
gosub set
End
red3:
gosub ffff
gosub left_v
gosub ffff2
gosub chk_line
GoSub forward
goSub forward
GoSub forward
goSub forward
GoSub forward
goSub forward
gosub left
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor1
gosub left1
gosub forward
gosub forward
gosub left
pause 1500
gosub chk_line
gosub up
pause 1000
gosub chk_line
GoSub forward1
gosub d_paste
gosub d_box1
gosub bb
gosub left1
gosub down
gosub beep_up
gosub chk_line
gosub forward
gosub left
gosub forward
gosub left
gosub forward
gosub forward
gosub forward
gosub forward
gosub forward
gosub right
gosub forward
gosub bbb
gosub up
gosub forward1
gosub d_paste
gosub bb
gosub left
gosub down
gosub left
gosub forward
gosub up1
gosub forward1
pause 500
gosub beep
gosub up
gosub bb
gosub right
gosub down
gosub beep_up
gosub chk_line
gosub forward
gosub left
gosub forward
gosub right
gosub set
End
red4:
gosub ffff
gosub left_v
gosub ffff2
gosub chk_line
GoSub forward
goSub forward
GoSub forward
GoSub forward
gosub left
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor1
gosub left1
gosub forward
GoSub forward
GoSub forward
gosub left
GoSub forward
goSub forward
GoSub forward
goSub forward
GoSub forward
GoSub forward
GoSub forward
gosub right
goSub forward
gosub bbb
gosub up
gosub forward1
gosub d_paste
gosub up
pause 2000
gosub beep
pause 30000
pause 30000
pause 30000
pause 30000
pause 30000
pause 30000
gosub bb
gosub left
End
red5:
gosub ffff
gosub left_v
gosub ffff2
gosub chk_line
GoSub forward
goSub forward
GoSub forward
goSub forward
gosub left
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor1
gosub left1
goSub forward
gosub left
goSub forward
goSub forward
gosub right
goSub forward
gosub left
pause 1500
gosub chk_line
gosub up
pause 1000
gosub chk_line
GoSub forward1
gosub d_paste
gosub bb
gosub left1
gosub set
gosub chk_line
goSub forward
gosub right
goSub forward
gosub bbb
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor1
gosub left1
gosub forward
gosub left
GoSub forward
goSub forward
GoSub forward
goSub forward
gosub right
goSub forward
goSub forward
gosub left
goSub forward
gosub right
gosub forward
gosub bbb
gosub up
gosub forward1
gosub d_paste
gosub d_box1
gosub bb
gosub left
gosub left
gosub chk_line
gosub down
gosub beep_up
gosub forward
gosub bbb
gosub up
gosub forward1
gosub d_paste
gosub bb
gosub right
pause 500
gosub chk_line
gosub set
gosub forward
gosub left
gosub forward
gosub bbb
End
red6:
gosub ffff
gosub left_v
gosub ffff2
gosub chk_line
GoSub forward
GoSub forward
GoSub forward
GoSub forward
gosub left
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor1
gosub left1
gosub forward
gosub left
gosub forward
gosub forward
gosub right
gosub forward
gosub forward
gosub left
gosub forward
gosub right
gosub forward
gosub bbb
gosub up
gosub forward1
gosub d_paste
gosub bb
gosub right
gosub set
gosub chk_line
gosub forward
gosub right
gosub forward
gosub forward
gosub forward
gosub bbb
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor1
gosub left1
gosub forward
gosub forward
gosub forward
gosub forward
gosub left
gosub forward
gosub forward
gosub forward
gosub forward
gosub forward
pause 500
gosub chk_line
gosub up
gosub right
pause 500
gosub chk_line
gosub forward1
gosub d_paste
gosub bb
End
red7:
gosub ffff
gosub left_v
gosub ffff2
gosub chk_line
GoSub forward
gosub right
GoSub forward
GoSub forward
GoSub forward
gosub left
GoSub forward
GoSub forward
GoSub forward
GoSub forward
GoSub forward
GoSub forward
pause 500
gosub chk_line
gosub up1
gosub right
pause 500
gosub chk_line
gosub forward1
gosub beep
pause 500
gosub paste
gosub up
pause 1000
gosub beep
gosub bb
gosub left
gosub set
gosub chk_line
gosub forward
End
red8:
gosub ffff
gosub left_v
gosub ffff2
gosub chk_line
GoSub forward
GoSub forward
GoSub forward
GoSub forward
GoSub forward
GoSub forward
gosub left
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor1
gosub left1
gosub forward
GoSub forward
GoSub forward
gosub left
gosub forward
gosub right
gosub forward
gosub bbb
gosub up
gosub forward1
gosub d_paste
pause 2000
gosub up
pause 2000
gosub beep
pause 30000
pause 30000
pause 30000
pause 30000
pause 30000
pause 30000
pause 30000
pause 30000
gosub paste
End
green1:
gosub ffff
gosub right_v
gosub ffff2
gosub chk_line
GoSub forward
GoSub forward
GoSub forward
GoSub forward
gosub right
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor2
gosub left1
gosub forward
gosub right
gosub forward
gosub forward
gosub left
gosub forward
gosub forward
gosub right
gosub forward
gosub left
gosub forward
gosub bbb
gosub up
gosub forward1
gosub d_paste
gosub bb
gosub left
gosub set
gosub chk_line
gosub forward
gosub left
gosub forward
gosub forward
gosub forward
gosub bbb
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor2
gosub left1
gosub forward
gosub forward
gosub right
pause 1500
gosub chk_line
gosub up
pause 1000
gosub chk_line
GoSub forward1
gosub d_paste
gosub d_box1
gosub bb
gosub left1
gosub down
gosub beep_up
gosub chk_line
gosub forward
gosub right
gosub forward
gosub right
gosub forward
gosub forward
gosub forward
gosub forward
gosub forward
gosub left
gosub forward
gosub bbb
gosub up
gosub forward1
gosub d_paste
gosub bb
gosub right
gosub down
gosub right
gosub forward
gosub up1
gosub forward1
pause 500
gosub beep
gosub up
gosub bb
gosub left
gosub down
gosub beep_up
gosub chk_line
gosub forward
gosub right
gosub forward
gosub left
gosub set
End
green2:
gosub ffff
gosub right_v
gosub ffff2
gosub chk_line
GoSub forward
gosub left
GoSub forward
GoSub forward
GoSub forward
gosub right
GoSub forward
GoSub forward
GoSub forward
GoSub forward
GoSub forward
gosub right
GoSub forward
GoSub forward
GoSub forward
gosub bbb
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor2
gosub left1
gosub forward
gosub forward
gosub forward
gosub right
gosub forward
gosub left
gosub forward
gosub bbb
gosub up
gosub forward1
gosub d_paste
gosub bb
gosub left
gosub set
gosub chk_line
gosub forward
gosub left
gosub forward
gosub forward
gosub forward
gosub bbb
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor2
gosub left1
gosub forward
gosub forward
gosub right
pause 1500
gosub chk_line
gosub up
pause 1000
gosub chk_line
GoSub forward1
gosub d_paste
gosub d_box1
gosub bb
gosub left1
gosub down
gosub beep_up
gosub chk_line
gosub forward
gosub right
gosub forward
gosub right
gosub forward
gosub forward
gosub forward
gosub forward
gosub forward
gosub left
gosub forward
gosub bbb
gosub up
gosub forward1
gosub d_paste
gosub bb
gosub right
gosub down
gosub right
gosub forward
gosub up1
gosub forward1
pause 500
gosub beep
gosub up
gosub bb
gosub left
gosub down
gosub beep_up
gosub chk_line
gosub forward
gosub right
gosub forward
gosub left
gosub set
End
green3:
gosub ffff
gosub right_v
gosub ffff2
gosub chk_line
GoSub forward
goSub forward
GoSub forward
goSub forward
GoSub forward
goSub forward
gosub right
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor2
gosub left1
gosub forward
gosub forward
gosub right
pause 1500
gosub chk_line
gosub up
pause 1000
gosub chk_line
GoSub forward1
gosub d_paste
gosub d_box1
gosub bb
gosub left1
gosub down
gosub beep_up
gosub chk_line
gosub forward
gosub right
gosub forward
gosub right
gosub forward
gosub forward
gosub forward
gosub forward
gosub forward
gosub left
gosub forward
gosub bbb
gosub up
gosub forward1
gosub d_paste
gosub bb
gosub right
gosub down
gosub right
gosub forward
gosub up1
gosub forward1
pause 500
gosub beep
gosub up
gosub bb
gosub left
gosub down
gosub beep_up
gosub chk_line
gosub forward
gosub right
gosub forward
gosub left
gosub set
End
green4:
gosub ffff
gosub right_v
gosub ffff2
gosub chk_line
GoSub forward
goSub forward
GoSub forward
GoSub forward
gosub right
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor2
gosub left1
gosub forward
GoSub forward
GoSub forward
gosub right
GoSub forward
goSub forward
GoSub forward
goSub forward
GoSub forward
GoSub forward
GoSub forward
gosub left
goSub forward
gosub bbb
gosub up
gosub forward1
gosub d_paste
gosub up
pause 2000
gosub beep
pause 30000
pause 30000
pause 30000
pause 30000
pause 30000
pause 30000
gosub bb
gosub right
End
green5:
gosub ffff
gosub right_v
gosub ffff2
gosub chk_line
GoSub forward
goSub forward
GoSub forward
goSub forward
gosub right
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor2
gosub left1
goSub forward
gosub right
goSub forward
goSub forward
gosub left
goSub forward
gosub right
pause 1500
gosub chk_line
gosub up
pause 1000
gosub chk_line
GoSub forward1
gosub d_paste
gosub bb
gosub left1
gosub set
gosub chk_line
goSub forward
gosub left
goSub forward
gosub bbb
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor2
gosub left1
gosub forward
gosub right
GoSub forward
goSub forward
GoSub forward
goSub forward
gosub left
goSub forward
goSub forward
gosub right
goSub forward
gosub left
gosub forward
gosub bbb
gosub up
gosub forward1
gosub d_paste
gosub d_box1
gosub bb
gosub right
gosub right
gosub chk_line
gosub forward
pause 300
gosub forward1
gosub d_paste
gosub bb
gosub left
pause 500
gosub chk_line
gosub set
gosub forward
gosub right
gosub forward
gosub bbb
End
green6:
gosub ffff
gosub right_v
gosub ffff2
gosub chk_line
GoSub forward
GoSub forward
GoSub forward
GoSub forward
gosub right
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor2
gosub left1
gosub forward
gosub right
gosub forward
gosub forward
gosub left
gosub forward
gosub forward
gosub right
gosub forward
gosub left
gosub forward
gosub bbb
gosub up
gosub forward1
gosub d_paste
gosub bb
gosub left
gosub set
gosub chk_line
gosub forward
gosub left
gosub forward
gosub forward
gosub forward
gosub bbb
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor2
gosub left1
gosub forward
gosub forward
gosub forward
gosub forward
gosub right
gosub forward
gosub forward
gosub forward
gosub forward
gosub forward
pause 500
gosub chk_line
gosub up
gosub left
pause 500
gosub chk_line
gosub forward1
gosub d_paste
gosub bb
End

green7:
gosub ffff
gosub right_v
gosub ffff2
gosub chk_line
GoSub forward
gosub left
GoSub forward
GoSub forward
GoSub forward
gosub right
GoSub forward
GoSub forward
GoSub forward
GoSub forward
GoSub forward
GoSub forward
pause 500
gosub chk_line
gosub up1
gosub left
pause 500
gosub chk_line
gosub forward1
gosub beep
pause 500
gosub paste
gosub up
pause 1000
gosub beep
gosub bb
gosub right
gosub set
gosub chk_line
gosub forward
End
green8:
gosub ffff
gosub right_v
gosub ffff2
gosub chk_line
GoSub forward
GoSub forward
GoSub forward
GoSub forward
GoSub forward
GoSub forward
gosub right
pause 2000
gosub chk_line
pause 1000
gosub chk_line
gosub wait_box
GoSub forward1
gosub beep_up
gosub chk_cor2
gosub left1
gosub forward
GoSub forward
GoSub forward
gosub right
gosub forward
gosub left
gosub forward
gosub bbb
gosub up
gosub forward1
gosub d_paste
pause 2000
gosub up
pause 2000
gosub beep
pause 30000
pause 30000
pause 30000
pause 30000
pause 30000
pause 30000
pause 30000
pause 30000
gosub paste
End


forward:
IF (d=0)AND(e=0) Then
high dr : high dl
low portc.2 'motor r
low portc.1 'motor l
Pause 6
EndIF
IF (d=1)AND(e=0) Then
low dl : high dr
low portc.2 'motor r
high portc.1 'motor l
Pause 1
EndIF
IF (d=0)AND(e=1) Then
high dl : low dr
high portc.2 'motor r
low portc.1 'motor l
Pause 1
EndIF
IF (d=1)AND(e=1) Then
high portc.2 'motor r
high portc.1 'motor l
goto out
EndIF
IF (c=1)AND(f=0) Then
low dl :high dr
low portc.2 'motor r
low portc.1 'motor l
Pause 4
EndIF
IF (c=0)AND(f=1) Then
high dl : low dr
low portc.2 'motor r
low portc.1 'motor l
Pause 4
EndIF
IF (b=1)AND(g=0) Then
low dl :high dr
low portc.2 'motor r
low portc.1 'motor l
Pause 8
EndIF
IF (b=0)AND(g=1) Then
high dl : low dr
low portc.2 'motor r
low portc.1 'motor l
Pause 8
EndIF
IF (d=1)AND(e=1) Then
high portc.2 'motor r
high portc.1 'motor l
goto out
EndIF
GoTo forward

out:
high dr : high dl
low portc.2 'motor r
low portc.1 'motor l
Pause 100
IF (c=0)AND(f=0) Then
low portc.2 'motor r
low portc.1 'motor l
Pause 60
gosub line_ff
return
endif
goto out

chk_line:
IF (a=1) Then
high dr : low dl
low portc.2 'motor r
low portc.1 'motor l
Pause 4
high portc.2 'motor r
high portc.1 'motor l
pause 120
EndIF
IF (h=1) Then
low dr : high dl
low portc.2 'motor r
low portc.1 'motor l
Pause 4
high portc.2 'motor r
high portc.1 'motor l
pause 120
EndIF
IF (b=1) Then
high dr : low dl
PAUSE 20
low portc.2 'motor r
low portc.1 'motor l
Pause 2
high portc.2 'motor r
high portc.1 'motor l
pause 200
EndIF
IF (g=1) Then
low dr : high dl
PAUSE 20
low portc.2 'motor r
low portc.1 'motor l
Pause 2
high portc.2 'motor r
high portc.1 'motor l
pause 200
EndIF
IF (c=1) Then
high dr : low dl
PAUSE 20
low portc.2 'motor r
low portc.1 'motor l
Pause 1
high portc.2 'motor r
high portc.1 'motor l
pause 200
EndIF
IF (f=1) Then
low dr : high dl
PAUSE 20
low portc.2 'motor r
low portc.1 'motor l
Pause 1
high portc.2 'motor r
high portc.1 'motor l
pause 200
EndIF
IF (d=1) Then
high dr : low dl
Pause 20
low portc.2 'motor r
low portc.1 'motor l
Pause 1
high portc.2 'motor r
high portc.1 'motor l
pause 200
EndIF
IF (e=1) Then
high dl : low dr
Pause 20
low portc.2 'motor r
low portc.1 'motor l
Pause 1
high portc.2 'motor r
high portc.1 'motor l
pause 200
EndIF
IF (a=0)AND(b=0)AND(c=0)AND(d=0)and(e=0)and(f=0)AND(g=0)AND(h=0) Then
high dr : high dl
high portc.2 'motor r
high portc.1 'motor l
Return
EndIF
GoTo chk_line

line_ff:
IF (a=1) Then
high dr : low dl
low portc.2 'motor r
low portc.1 'motor l
Pause 20
high portc.2 'motor r
high portc.1 'motor l
EndIF
IF (h=1) Then
low dr : high dl
low portc.2 'motor r
low portc.1 'motor l
Pause 20
high portc.2 'motor r
high portc.1 'motor l
EndIF
IF (b=1) Then
high dr : low dl
low portc.2 'motor r
low portc.1 'motor l
Pause 20
high portc.2 'motor r
high portc.1 'motor l
EndIF
IF (g=1) Then
low dr : high dl
low portc.2 'motor r
low portc.1 'motor l
Pause 20
high portc.2 'motor r
high portc.1 'motor l
EndIF
IF (c=1) Then
high dr : low dl
Pause 5
low portc.2 'motor r
low portc.1 'motor l
Pause 4
high portc.2 'motor r
high portc.1 'motor l
Pause 30
EndIF
IF (f=1) Then
low dr : high dl
Pause 5
low portc.2 'motor r
low portc.1 'motor l
Pause 4
high portc.2 'motor r
high portc.1 'motor l
Pause 30
EndIF
IF (a=0)AND(b=0)AND(c=0)and(f=0)AND(g=0)AND(h=0) Then
high dr : high dl
high portc.2 'motor r
high portc.1 'motor l
Return
EndIF
GoTo line_ff

set:
gosub beep
gosub down
gosub paste
return

left:
high dr : low dl
low portc.2 'motor r
low portc.1 'motor l
Pause 3
high portc.2 'motor r
high portc.1 'motor l
pause 100
IF (h=1) Then
goto lefta
EndIF
IF (g=1) Then
goto lefta
EndIF
goto left
lefta:
high dr : low dl
low portc.2 'motor r
low portc.1 'motor l
Pause 3
high portc.2 'motor r
high portc.1 'motor l
pause 100
IF (d=1) Then
pause 300
gosub chk_line
return
EndIF
IF (c=1) Then
pause 300
gosub chk_line
return
EndIF
goto lefta

left_v:
high dr : low dl
low portc.2 'motor r
low portc.1 'motor l
Pause 3
high portc.2 'motor r
high portc.1 'motor l
pause 100
IF (b=1) Then
pause 300
gosub chk_line
return
EndIF
IF (c=1) Then
pause 300
gosub chk_line
return
EndIF
goto left_v

right:
low dr : high dl
low portc.2 'motor r
low portc.1 'motor l
Pause 3
high portc.2 'motor r
high portc.1 'motor l
pause 100
IF (a=1) Then
goto lefta
EndIF
IF (b=1) Then
goto righta
EndIF
goto right
righta:
low dr : high dl
low portc.2 'motor r
low portc.1 'motor l
Pause 3
high portc.2 'motor r
high portc.1 'motor l
pause 100
IF (f=1) Then
pause 300
gosub chk_line
return
EndIF
IF (e=1) Then
pause 300
gosub chk_line
return
EndIF
goto righta

right_v:
low dr : high dl
low portc.2 'motor r
low portc.1 'motor l
Pause 3
high portc.2 'motor r
high portc.1 'motor l
pause 100
IF (f=1) Then
pause 300
gosub chk_line
return
EndIF
IF (g=1) Then
pause 300
gosub chk_line
return
EndIF
goto right_v

left1:
High dr :Low dl
low portc.2 'motor r
low portc.1 'motor l
Pause 2000
high portc.2 'motor r
high portc.1 'motor l
Pause 500'20
chkl1:
High dr :Low dl
low portc.2 'motor r
low portc.1 'motor l
Pause 5
high portc.2 'motor r
high portc.1 'motor l
Pause 100'20
IF (d=1) Then
return
EndIF
IF (c=1) Then
return
EndIF
goto chkl1

beep:
for i= 1 to 60
if portb.4 = 0 then
low portc.6
return
else
high portc.6
pause 25
endif
next
low portc.6
return

beep_up:
if portb.4 = 1 then
high portc.6
pause 25
goto beep_up
else
low portc.6
low portc.4 'dir up
low portc.5 'motor up
pause 1000
high portc.4 'dir up
high portc.5 'motor up
pause 1000
return
endif
return

paste:
for i= 1 to 60
if portb.5 = 0 then
low portc.7
return
else
high portc.7
pause 25
endif
next i
low portc.7
return
return

up:
for i= 1 to 100
if portb.6 = 0 then
high portc.4 'dir up
high portc.5 'motor up
return
else
low portc.4 'dir up
low portc.5 'motor up
pause 100
endif
next i
high portc.4 'dir up
high portc.5 'motor up
return
return

up1:
low portc.4 'dir up
low portc.5 'motor up
pause 2200
high portc.4 'dir up
high portc.5 'motor up
return

up_xx:
low portc.4 'dir up
low portc.5 'motor up
pause 250
high portc.4 'dir up
high portc.5 'motor up
return


down:
for i = 1 to 180
if portb.7 = 0 then
high portc.4 'dir down
high portc.5 'motor down
return
else
high portc.4 'dir up
low portc.5 'motor up
pause 40
endif
next i
high portc.4 'dir up
high portc.5 'motor up
return
return

d_paste:
pause 1000
high dr : high dl
low portc.2 'motor r
low portc.1 'motor l
Pause 4
high portc.2 'motor r
high portc.1 'motor l
d_p:
if portb.7 = 0 then
return:endif
high portc.4 'dir down
low portc.5 'motor down
pause 20
adcin 1,sen_up
if (sen_up <>=105) then
High dr :High dl
high portc.2 'motor r
high portc.1 'motor l
return
EndIF
IF (d=1)AND(e=0) Then
low dl :High dr
low portc.2 'motor r
high portc.1 'motor l
Pause 8
high portc.2 'motor r
high portc.1 'motor l
pause 40
EndIF
IF (d=0)AND(e=1) Then
low dr :High dl
high portc.2 'motor r
low portc.1 'motor l
Pause 8
high portc.2 'motor r
high portc.1 'motor l
pause 40
EndIF
IF (d=0)AND(e=0) Then
High dr :High dl
low portc.2 'motor r
low portc.1 'motor l
Pause 6
high portc.2 'motor r
high portc.1 'motor l
pause 100
EndIF
IF (d=1)AND(e=1) Then
high dr : high dl
high portc.2 'motor r
high portc.1 'motor l
return
EndIF
GoTo forward1

chk_cor1: 'red
adcin 2,cl
if (cl > cg) then
goto no_red1
else
return
endif
no_red1:
gosub left1
gosub forward
gosub left
gosub forward
gosub set
gosub right
gosub right
gosub forward
gosub right
pause 1500
gosub chk_line
gosub wait_box
gosub forward1
gosub beep_up
goto chk_cor1


chk_cor2: 'green
adcin 2,cl
if (cl < cg ) then
goto no_green 'no green
else
return
endif
no_green:
gosub left1
gosub forward
gosub left
gosub forward
gosub set
gosub right
gosub right
gosub forward
gosub right
pause 1500
gosub chk_line
gosub wait_box
gosub forward1
gosub beep_up
goto chk_cor2

วันเสาร์ที่ 22 สิงหาคม พ.ศ. 2552

แจกโค็ด SENSOR

แจกโค็ดครับ เป็นโค็ด อ่านค่าเซนเซอร์อนาล็อกแล้วให้ค่าออกเป็นดิจิตอลครับ แบบ 8 ช่องครับ

ใช้ PIC 16f877 // 20M
วงจรก็ต่อ ldr เข้าขาอนาล็อก A0 A1 A2 A3 A5 E0 E1 E2 Output จะออก D0 D1 D2 D3 D4 D5 D6 D7
สวิตซ์เซ็ต Active Low เซ็ตสีเข้ม B0 เซ็ตสีขาว B1 LED แสดงผลการเซ็ต C3 C6
การเซ็ตกด SW ทั้งสองตัวแล้วเปิดไฟ จะเป็นการเข้าโหมด Set แล้วกด เซ็ต สีเข้มก่อน จากนั้น กดเซ็ตสีขาว เสร็จแล้วโปรแกรมจะเก็บค่าลง ROM เพื่อใช้ในครั้งต่อไป จะได้ไม่ต้องเซ็ตทุกครั้ง การใช้งานก็เปิดไฟเลย โปรแกรมก็จะอ่านค่าจาก ROM ที่เราเซ็ตใว้มาใช้ครับ แล้วก็จะแสดง OUTPUT เลย หากอยากรู้ ลอจิกก็เอามิเตอร์วัดเอาครับ ส่วนใครขี้เกียจวัด ก็แก้โปรแกรมอีกนิดหน่อย ต่อ LED แสดงผลด้วยเลยก็ได้ครับ ไม่ว่ากัน
โค็ดนี้ผมเขียนขึ้นเอง และ ไม่สงวนลิขสิทธินะครับ ท่านสามารถนำไปศึกษาได้ หรือ นำไปใช้ได้เลยครับ

ขออย่างเดียว Comment กันหน่อย
DEFINE OSC 20
DEFINE ADC_BITS 8
DEFINE ADC_SAMPLEUS 50
DEFINE CCP1_REG PORTC
DEFINE CCP1_BIT 2
DEFINE CCP2_REG PORTC
DEFINE CCP2_BIT 1

TRISA = 255
TRISB = 255
TRISC = 00
TRISD = 00

adcon1 = 0

white VAR PORTB.1
blue VAR PORTB.0

sr3 VAR word
sr2 VAR word
sr1 VAR word
sr0 VAR word
sl0 VAR word
sl1 VAR word
sl2 VAR word
sl3 VAR word

mr3 VAR word
mr2 VAR word
mr1 VAR word
mr0 VAR word
ml0 VAR word
ml1 VAR word
ml2 VAR word
ml3 VAR word

mrr3 VAR word
mrr2 VAR word
mrr1 VAR word
mrr0 VAR word
mll0 VAR word
mll1 VAR word
mll2 VAR word
mll3 VAR word

a VAR word
b VAR word
c VAR word
d VAR word
e VAR word
f VAR word
g VAR word
h VAR word

portc =%11111111
portd =%11111111
pause 250

chk_st:
IF (white=0)AND(blue=0) Then
portc =%10110111
Gosub setup
gosub set
gosub wait_sen
EndIF

pause 250

read 5,a
read 7,b
read 9,c
read 11,d
read 13,e
read 15,f
read 17,g
read 19,h

pause 250
portc =%10110111
pause 250

readsen:
ADCIN 0,sl3 :ADCIN 1,sl2 :ADCIN 2,sl1 :ADCIN 3,sl0
ADCIN 4,sr0 :ADCIN 5,sr1 :ADCIN 6,sr2 :ADCIN 7,sr3
IF (sl3>=a) Then
high portd.0
else
low portd.0
EndIF
IF (sl2>=b) Then
high portd.1
else
low portd.1
EndIF
IF (sl1>=c) Then
high portd.2
else
low portd.2
EndIF
IF (sl0>=d) Then
high portd.3
else
low portd.3
EndIF
IF (sr0>=e) Then
high portd.4
else
low portd.4
EndIF
IF (sr1>=f) Then
high portd.5
else
low portd.5
EndIF
IF (sr2>=g) Then
high portd.6
else
low portd.6
EndIF
IF (sr3>=h) Then
high portd.7
else
low portd.7
EndIF
GoTo readsen

setup:
IF (white=0)AND(blue=0) Then
GoTo setup
EndIF
pause 250
portc =%11111111
return

set:
s_blue:
IF (blue=1) Then
goto s_blue
else
ADCIN 0,ml3 :ADCIN 1,ml2 :ADCIN 2,ml1 :ADCIN 3,ml0
ADCIN 4,mr0 :ADCIN 5,mr1 :ADCIN 6,mr2 :ADCIN 7,mr3
pause 250
portc =%11110111
EndIF
s_white:
IF (white=1) Then
goto s_white
else
ADCIN 0,mll3 :ADCIN 1,mll2 :ADCIN 2,mll1 :ADCIN 3,mll0
ADCIN 4,mrr0 :ADCIN 5,mrr1 :ADCIN 6,mrr2 :ADCIN 7,mrr3
pause 250
portc =%10110111
EndIF
pause 500
portc =%11111111
return

wait_sen:
a=(mll3-ml3)/2
b=(mll2-ml2)/2
c=(mll1-ml1)/2
d=(mll0-ml0)/2
e=(mrr0-mr0)/2
f=(mrr1-mr1)/2
g=(mrr2-mr2)/2
h=(mrr3-mr3)/2

pause 250

a=a+ml3:b=b+ml2:c=c+ml1:d=d+ml0
e=e+mr0:f=f+mr1:G=G+mr2:H=H+mr3

pause 250

write 5,a
write 7,b
write 9,c
write 11,d
write 13,e
write 15,f
write 17,g
write 19,h

pause 250
return

วันอาทิตย์ที่ 16 สิงหาคม พ.ศ. 2552

ผลงานต่างๆครับ




















ประวัติคร่าวๆของการทำงาน
เรียนที่เทคนิคยโสธร
-แข่งขันหุ่นยนต์ต่อกำแพงเมืองจีน(วันแม่)ที่เมืองทองธานี ประมาณปวช.2 (จุดเริ่มต้น)
-แข่งขันหุ่นยนต์"จุดไฟศักดิ์สิทธิ์ พิชิตกำแพงเมืองจีน" ได้ที่3ของภาคอิสาน และได้เข้าระดับประเทศด้วย
-แข่งขันหุ่นยนต์ humanoid (หุ่นยนต์ต่อสู้แบบสองขา) ได้ที่สอง (ไม่ได้แข่งABUแข่ง humanoid แทน )
-แข่งขันหุ่นยนต์ "มหัศจรรย์ ฮาลองเบย์" ได้ที่ 1 ของภาค ได้ที่3ของประเทศ(อาชีวะ)และเข้าระดับประเทศ
****ต้องขอบคุณ อ.วุฒิชัย อาทิตย์ตั้ง และ อ.จักรพงษ์ แก่นแก้ว ที่ทำให้ผมมีวันนี้ครับ
เรียนที่ราชมงคลอิสาน (โคราช)
-แข่งขันหุ่นยนต์ "ตะลุยพิชิตไฟเขาวงกต" ที่ มหาวิทยาลัยวงษ์ชวลิตกุล ได้ที่ 1 ครับ
-แข่งขันหุ่นยนต์ UBU Robocon 2008 ที่อุบล ได้ ที่ 1 มาครับ
-จัดการแข่งขัน YAMO Robot 2009 ที่ The Mall โคราช โดยร่วมกับ ชมรมไอทีโคราช
-แข่งขันหุ่นยนต์ UBU Robocon 2009 ที่อุบล ได้ ที่ 1 กับที่ 2 มาครับ ได้สองรางวัลเพราะส่งสองทีม
****ต้องขอบคุณ อ.ชิติสรรค์ วิชิโต ที่ทำให้ผมได้ฝึกฝีมือให้เก่งขึ้น

ตอนนี้จบ ป.ตรี แล้วครับ เข้าสู่วัยทำงานต่อไป ตอนนี้เข้าเป็นครูที่ วิทยาลัยเทคนิคยโสธรครับ กลับไปพัฒนาบ้านเกิด งานแรกของการเป็นครู ได้ตารางสอน 9 วิชา 555+++ งานสอง ควบคุมทีมหุ่นยนต์ บั้งไฟแสน เข้าแข่ง ABU ลอยกระทงมั้ง ข่าวลือมาแบบนั้น

งานต่างๆ ครับ เดี๋ยวจะอัพขึ้นเรื่อยๆ

ยินดีต้อนรับ

ยินดีต้อนรับสำหรับผู้ที่รักหรือมีความสนใจหุ่นยนต์ และงาน MCU (Pic Basic Pro & CCS)

สิ่งที่กำลังศึกษา
-ระบบ PID CONTROL
-โมดูล GPS
-โมดูล วัดแกน X,Y
-IR (รับค่าจากรีโมท TV)
-การแยกHHO
-RFID

สิ่งที่กำลังทำ
-รถวิ่งตามเส้นโดยใช้ PID CONTROL
-เครื่องตั้งเวลาเอนกประสงค์ 4 ช่อง

หากใครมีข้อสงสัยหรือข้องใจอะไรก็สอบถามได้นะครับ
นนท์ โพธิวาระ
08-7654-6686
nont_peet@hotmail.com
nontpeet@gmail.com
http://nontpeet.hi5.com