View difference between Paste ID: vcABk2YC and heZwJk2h
SHOW: | | - or go back to the newest paste.
1
' {$STAMP BS2}
2
' {$PBASIC 2.5}
3
' LineFollowWithCheckQtis.bs2
4
' Navigates based on values acquired with the
5
' Ceck_Qtis subroutine.
6
7
8-
acoustic VAR Byte
8+
9-
counter VAR Word
9+
acoustic VAR Nib
10
OUTB = %1111                ' Set OUTB bits to 1
11
12-
PAUSE 1000
12+
13-
DEBUG CLS
13+
14
IF (IN14 = 0) AND (IN15 = 0) THEN
15-
DO
15+
16
    GOSUB Blink_LED
17-
  DEBUG HOME, "IN1 = ", BIN IN1
17+
18-
  PAUSE 100
18+
19
    GOSUB Blink_LED
20
  ELSEIF (IN15 = 0) THEN
21-
  IF (IN1 = 1) THEN
21+
22-
  endif
22+
23
  ELSE
24
    GOSUB Check_Qtis
25-
FREQOUT 10, 3000, 3000
25+
26
27
  GOSUB Check_Qtis          ' Get QTI states
28
29
  SELECT qtis               ' Control servo
30
                            ' speeds/directions
31
    CASE %1000              ' Rotate right
32
      PULSOUT 13, 650
33
      PULSOUT 12, 650
34
    CASE %1100              ' Pivot right
35
      PULSOUT 13, 750
36
      PULSOUT 12, 650
37
    CASE %0100              ' Curve right
38
      PULSOUT 13, 800
39
      PULSOUT 12, 650
40
    CASE %0110              ' Straight ahead
41
      PULSOUT 13, 850
42
      PULSOUT 12, 650
43
    CASE %0010              ' Curve left
44
      PULSOUT 13, 850
45
      PULSOUT 12, 700
46
    CASE %0011              ' Pivot left
47
      PULSOUT 13, 850
48
      PULSOUT 12, 750
49
    CASE %0001              ' Rotate left
50
      PULSOUT 13, 850
51
      PULSOUT 12, 850
52
    CASE %0000
53
      PULSOUT 13, 800
54
      PULSOUT 12, 800
55
      PAUSE 40
56
      PULSOUT 13, 600
57-
    CASE %1111
57+
58
      PAUSE 40
59
    CASE ELSE               ' Do nothing
60
      PAUSE 3
61
  ENDSELECT
62
63
LOOP
64
65
Check_Qtis:
66
67
' Result -> qtis variable.
68
' 0 means white surface
69
' 1 means black surface.
70
71
  DIRB = %1111              ' P7..P4 -> output
72
  PAUSE 0                   ' Delay = 230 us
73
  DIRB = %0000              ' P7..P4 -> input
74
  PAUSE 0                   ' Delay = 230 us
75
  qtis = INB                ' Store QTI output
76
                            ' in INB
77
  RETURN
78
79
Acoustic_Turn:
80
81
FOR acoustic = 1 TO 80
82
  PULSOUT 13, 650
83
  PULSOUT 12, 650
84
  PAUSE 20
85
NEXT
86
  END
87
RETURN
88
Blink_LED:
89
90
HIGH 0
91
PAUSE 500
92
LOW 0
93
PAUSE 500
94
HIGH 0
95
PAUSE 500
96
LOW 0
97
PAUSE 500
98-
FOR acoustic = 1 TO 66
98+
HIGH 0
99
PAUSE 500
100
LOW 0
101
PAUSE 500
102
HIGH 0
103
PAUSE 500
104
LOW 0
105
PAUSE 500
106-
FOR counter = 1 TO 5
106+
HIGH 0
107-
  HIGH 0
107+
PAUSE 500
108-
  PAUSE 500
108+
LOW 0
109-
  LOW 0
109+
PAUSE 500
110-
  PAUSE 500
110+
END
111
RETURN