1 import lejos
.hardware
.lcd
.LCD
;
2 import lejos
.hardware
.motor
.EV3LargeRegulatedMotor
;
3 import lejos
.hardware
.port
.MotorPort
;
4 import lejos
.hardware
.sensor
.EV3TouchSensor
;
5 import lejos
.hardware
.sensor
.EV3UltrasonicSensor
;
6 import lejos
.hardware
.sensor
.NXTLightSensor
;
7 import lejos
.robotics
.SampleProvider
;
8 import lejos
.utility
.Delay
;
10 import java
.util
.Random
;
12 import lejos
.hardware
.*;
13 import lejos
.hardware
.ev3
.LocalEV3
;
17 static float BLACK_LINE
= (float) 0.5;
18 static float SOMETHING_IN_FRONT
= (float) 0.24;
19 static float SOMETHING_IN_LEFT
= 1;
20 static float SOMETHING_IN_RIGHT
= 1;
21 static int MINIMUM_TURN
= 120;
22 static int MAXIMUM_TURN
= 180;
24 static EV3LargeRegulatedMotor leftMotor
, rightMotor
;
25 static EV3TouchSensor touchLeftSensor
, touchRightSensor
;
26 static NXTLightSensor lightSensor
;
27 static EV3UltrasonicSensor distanceSensor
;
29 private static Random rnd
= new Random();
30 private static long StartTime
= 0;
32 public static void main(String
[] args
) {
33 leftMotor
= new EV3LargeRegulatedMotor(MotorPort
.A
);
34 rightMotor
= new EV3LargeRegulatedMotor(MotorPort
.D
);
36 touchLeftSensor
= new EV3TouchSensor(LocalEV3
.get().getPort("S1"));
37 touchRightSensor
= new EV3TouchSensor(LocalEV3
.get().getPort("S4"));
38 lightSensor
= new NXTLightSensor(LocalEV3
.get().getPort("S2"));
39 distanceSensor
= new EV3UltrasonicSensor(LocalEV3
.get().getPort("S3"));
41 SampleProvider touchLeft
= touchLeftSensor
.getTouchMode(), touchRight
= touchRightSensor
.getTouchMode(),
42 light
= lightSensor
.getRedMode(), distance
= distanceSensor
.getDistanceMode();
44 float[] touchLeftSamples
= new float[touchLeft
.sampleSize()],
45 touchRightSamples
= new float[touchRight
.sampleSize()], lightSamples
= new float[light
.sampleSize()],
46 distanceSamples
= new float[distance
.sampleSize()];
49 while (!Button
.ESCAPE
.isDown()) {
50 StartTime
= System
.currentTimeMillis();
52 touchLeft
.fetchSample(touchLeftSamples
, 0);
53 touchRight
.fetchSample(touchRightSamples
, 0);
54 light
.fetchSample(lightSamples
, 0);
55 distance
.fetchSample(distanceSamples
, 0);
57 LCD
.drawString("TL: " + touchLeftSamples
[0], 0, 0);
58 LCD
.drawString("TR: " + touchRightSamples
[0], 0, 1);
59 LCD
.drawString("LI: " + lightSamples
[0], 0, 2);
60 LCD
.drawString("DI: " + distanceSamples
[0], 0, 3); // distance in
63 if (lightSamples
[0] < BLACK_LINE
) {
64 LCD
.drawString("BLACK", 0, 4);
66 if (rnd
.nextBoolean()) {
67 TurnLeft(GetRandomTurn());
69 TurnRight(GetRandomTurn());
72 LCD
.drawString("WHITE", 0, 4);
76 if (distanceSamples
[0] < SOMETHING_IN_FRONT
) {
77 LCD
.drawString("STOP", 0, 5);
79 LCD
.drawString("GO ", 0, 5);
82 LCD
.drawString("T: " + (System
.currentTimeMillis() - StartTime
), 0, 6);
84 if (System
.currentTimeMillis() - StartTime
< 450) {
90 public static int GetRandomTurn() {
91 return rnd
.nextInt((MAXIMUM_TURN
- MINIMUM_TURN
) + 1) + MINIMUM_TURN
;
94 public static void GoForward() {
95 leftMotor
.setSpeed(300);
96 rightMotor
.setSpeed(300);
102 public static void GoBack() {
103 leftMotor
.setSpeed(300);
104 rightMotor
.setSpeed(300);
106 leftMotor
.backward();
107 rightMotor
.backward();
113 public static void Stop() {
114 leftMotor
.stop(true);
118 public static void TurnRight(int degree
) {
119 leftMotor
.rotate(degree
, true);
120 rightMotor
.rotate(-degree
);
123 public static void TurnLeft(int degree
) {
124 leftMotor
.rotate(-degree
, true);
125 rightMotor
.rotate(degree
);