X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=dsl%2Fruntime%2Fsrc%2Fnl%2Fru%2Fdes%2FBasicBehaviour.java;h=455cbe23dc03729faee920b9eb458f9d903e8ea7;hb=ac44621696b120a5aec35edff6b7181a4aafa383;hp=5095222f895bae1fbd97501a6ee4db1ef8781d0a;hpb=426ca40778af548128b5d5f37705fffcf1cc9c7b;p=des2015.git diff --git a/dsl/runtime/src/nl/ru/des/BasicBehaviour.java b/dsl/runtime/src/nl/ru/des/BasicBehaviour.java index 5095222..455cbe2 100644 --- a/dsl/runtime/src/nl/ru/des/BasicBehaviour.java +++ b/dsl/runtime/src/nl/ru/des/BasicBehaviour.java @@ -1,43 +1,157 @@ package nl.ru.des; -import lejos.hardware.motor.EV3LargeRegulatedMotor; +import lejos.robotics.RegulatedMotor; import lejos.robotics.subsumption.Behavior; import nl.ru.des.sensors.SensorCollector; public abstract class BasicBehaviour implements Behavior{ protected boolean suppressed; - protected EV3LargeRegulatedMotor leftMotor, rightMotor; + protected boolean finished; + protected RegulatedMotor leftMotor, rightMotor, measMotor; protected SensorCollector sensors; protected long time; - public BasicBehaviour(SensorCollector sensors, EV3LargeRegulatedMotor leftMotor, - EV3LargeRegulatedMotor rightMotor){ + public BasicBehaviour(SensorCollector sensors, RegulatedMotor leftMotor, + RegulatedMotor rightMotor, RegulatedMotor measMotor){ this.leftMotor = leftMotor; this.rightMotor = rightMotor; + this.measMotor = measMotor; this.sensors = sensors; + suppressed = false; + finished = true; } - + protected void reset(){ + finished = true; rightMotor.setSpeed(Constants.speed); rightMotor.setAcceleration(Constants.acceleration); leftMotor.setSpeed(Constants.speed); leftMotor.setAcceleration(Constants.acceleration); rightMotor.stop(true); leftMotor.stop(true); + measMotor.stop(true); + } + + protected void measureLake(){ + long time = System.currentTimeMillis(); + rightMotor.backward(); + leftMotor.backward(); + while(System.currentTimeMillis()-time < 250){ + Thread.yield(); + } + + rightMotor.stop(true); + leftMotor.stop(true); + rightMotor.setSpeed(25); + leftMotor.setSpeed(25); + if(sensors.leftLight() && !sensors.rightLight()){ + leftTurn(15); + } else if (sensors.rightLight() && !sensors.leftLight()){ + rightTurn(15); + } + + rightMotor.stop(true); + leftMotor.stop(true); + + measMotor.backward(); + while(!suppressed && !measMotor.isStalled()){ + Thread.yield(); + } + measMotor.forward(); + while(!suppressed && !measMotor.isStalled()){ + Thread.yield(); + } + measMotor.stop(true); + + turnRandom(30, 45); + } + + protected void measureRock(){ + long time = System.currentTimeMillis(); + rightMotor.forward(); + leftMotor.forward(); + while(System.currentTimeMillis()-time<1500){ + Thread.yield(); + } + + rightMotor.stop(true); + leftMotor.stop(true); + + measMotor.backward(); + while(!suppressed && !measMotor.isStalled()){ + Thread.yield(); + } + measMotor.forward(); + while(!suppressed && !measMotor.isStalled()){ + Thread.yield(); + } + measMotor.stop(true); + + turnRandom(30, 45); + } + + protected void turnRandom(int from, int to){ + int degrees = Marster.random.nextInt(to-from)+from; + if(Marster.random.nextBoolean()){ + rightTurn(degrees); + } else { + leftTurn(degrees); + } + } + + protected void rightTurn(int angle){ + rightMotor.stop(true); + leftMotor.stop(); + sensors.resetGyro(); + rightMotor.backward(); + leftMotor.forward(); + while(!suppressed && Math.abs(sensors.gyro()) < angle){ + Thread.yield(); + } + rightMotor.stop(true); + leftMotor.stop(true); + LCDPrinter.print(Float.toString(sensors.gyro())); + } + + protected void leftTurn(int angle){ + rightMotor.stop(true); + leftMotor.stop(); + sensors.resetGyro(); + leftMotor.backward(); + rightMotor.forward(); + while(!suppressed && Math.abs(sensors.gyro()) < angle){ + Thread.yield(); + } + rightMotor.stop(true); + leftMotor.stop(true); + LCDPrinter.print(Float.toString(sensors.gyro())); } @Override public void action() { suppressed = false; + finished = false; + rightMotor.setSpeed(Constants.speed); + rightMotor.setAcceleration(Constants.acceleration); + leftMotor.setSpeed(Constants.speed); + leftMotor.setAcceleration(Constants.acceleration); + rightMotor.stop(true); + leftMotor.stop(true); } @Override public void suppress() { suppressed = true; + finished = true; + rightMotor.setSpeed(Constants.speed); + rightMotor.setAcceleration(Constants.acceleration); + leftMotor.setSpeed(Constants.speed); + leftMotor.setAcceleration(Constants.acceleration); + rightMotor.stop(true); + leftMotor.stop(true); } - @Override - public boolean takeControl() { + @Override public boolean takeControl(){ return true; } }