Implementing colors collection and mission exit
[des2015.git] / dsl / runtime / src / nl / ru / des / MarsRover.java
index c2890e4..41a5f90 100644 (file)
@@ -1,5 +1,7 @@
 package nl.ru.des;
 
+import java.util.LinkedList;
+
 import lejos.hardware.ev3.EV3;
 import lejos.hardware.ev3.LocalEV3;
 import lejos.hardware.lcd.Font;
@@ -10,10 +12,11 @@ import lejos.hardware.sensor.EV3ColorSensor;
 import lejos.hardware.sensor.EV3TouchSensor;
 import lejos.hardware.sensor.EV3UltrasonicSensor;
 import lejos.robotics.SampleProvider;
-import nl.ru.des.dsl.Constants;
+import lejos.robotics.subsumption.Arbitrator;
 
 public class MarsRover {
        public static final float SAMPLERATE = 100;
+       public static LinkedList<Mission> missions = new LinkedList<Mission>();
        
        @SuppressWarnings("resource")
        public static void main(String[] args) {
@@ -29,10 +32,10 @@ public class MarsRover {
                LCDPrinter.print("Loading motors...");
                EV3LargeRegulatedMotor rightMotor = new EV3LargeRegulatedMotor(MotorPort.D);
                EV3LargeRegulatedMotor leftMotor = new EV3LargeRegulatedMotor(MotorPort.A);
-               leftMotor.setSpeed(Constants.defaultSpeed);
-               rightMotor.setSpeed(Constants.defaultSpeed);
-               rightMotor.setAcceleration(Constants.defaultAcceleration);
-               leftMotor.setAcceleration(Constants.defaultAcceleration);
+               leftMotor.setSpeed(Constants.speed);
+               rightMotor.setSpeed(Constants.speed);
+               rightMotor.setAcceleration(Constants.acceleration);
+               leftMotor.setAcceleration(Constants.acceleration);
                
                LCDPrinter.print("Loading touch sensors...");
                SampleProvider leftTouch = new EV3TouchSensor(brick.getPort("S1")).getTouchMode();
@@ -45,6 +48,25 @@ public class MarsRover {
                SampleProvider ultraSonic = new EV3UltrasonicSensor(brick.getPort("S3")).getDistanceMode();
 
                LCDPrinter.print("Initializing behaviours...");
-               Sensors sensors = new Sensors(ultraSonic, color, leftTouch, rightTouch);
+               SensorCollector sensors = new SensorCollector(ultraSonic, color, leftTouch, rightTouch);
+               
+               LCDPrinter.print("Initializing color collector...");
+               ColorMemory colorMemory = new ColorMemory(color);
+               
+               Arbitrator a;
+               missions = Missions.getMissions(sensors, rightMotor, leftMotor, colorMemory);
+               for(Mission m : missions){
+                       LCDPrinter.print("Start " + m.name + " mission...");
+                       a = new Arbitrator(m.behaviours);
+                       m.SetArbitrator(a);
+                       a.start();
+               }
+       }
+       
+       public static void FinishMission(String missionName){
+               Mission m = missions.stream().filter(o -> o.name.equalsIgnoreCase(missionName)).findFirst().get();
+               if(m != null){
+                       m.arbitrator.stop();
+               }
        }
 }
\ No newline at end of file