-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathlinetracer.js
95 lines (82 loc) · 1.56 KB
/
linetracer.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
var stopKey = KeysEnum.Up;
var startKey = KeysEnum.Left;
var left = brick.motor(M3);
var right = brick.motor(M4);
var p = 0.4;
var i = 0.001;
var k = 0.1;
var xys = [0,0,0];
var x = 0;
var s = 0;
var xold = 0;
var speed = 50;
brick.lineSensor("video1").init(true);
var key = 0;
function wasPressed(_key)
{
key = 0;
if(brick.keys().wasPressed(_key))
{
key = _key;
return 1;
}
else
{
return 0;
}
}
var next = 0;
var terminate = 0;
while(!next) {
while(!(wasPressed(startKey)||wasPressed(stopKey))) {
script.wait(100);
}
switch(key) {
case startKey:
brick.lineSensor("video1").detect();
next = 1;
break;
case stopKey:
brick.stop();
next = 1;
terminate = 1;
break;
}
script.wait(1000);
}
var firstTime = 1;
while(!terminate) {
if(brick.keys().wasPressed(stopKey)) {
terminate = 1;
} else {
xys = brick.lineSensor("video1").read();
x = xys[0]
s = xys[2];
if(s < 12) {
firstTime = 1;
if(xold < 0) {
print("left")
left.setPower(-80);
right.setPower(0);
} else {
print("right");
left.setPower(0);
right.setPower(-80);
}
} else {
if (firstTime) {
xold = x;
firstTime = 0;
}
var yaw = x*p + (x - xold)*k + (x+xold)*i;
print(s, x, yaw);
left.setPower(-(speed - yaw));
right.setPower(-(speed + yaw));
xold = x;
}
}
}
brick.lineSensor("video1").stop();
brick.stop();
print("finish");
script.quit();