update with colors etc, we now need to test it on physical robots
[des2015.git] / dsl / runtime / src / nl / ru / des / SensorCollector.java
index 7695ee0..5210bd1 100644 (file)
@@ -1,20 +1,24 @@
 package nl.ru.des;
 
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
 import lejos.robotics.SampleProvider;
 
 public class SensorCollector{
-       public static final int DELAY = 50;
+       public static final int DELAY = 100;
        
-       private SampleProvider ultrasone, color, leftTouch, rightTouch;
+       private SampleProvider ultrasone, leftTouch, rightTouch;
        private float[] ultrasoneSamples, colorSamples, leftTouchSamples, rightTouchSamples;
-       private long ultrasoneTime, colorTime, leftTouchTime, rightTouchTime;
+       private long ultrasoneTime, leftTouchTime, rightTouchTime;
+       private Set<Integer> colorsCollected;
 
        public SensorCollector(SampleProvider ultrasone,
-                       SampleProvider color,
+                       final SampleProvider color,
                        SampleProvider leftTouch,
                        SampleProvider rightTouch){
                this.ultrasone = ultrasone;
-               this.color = color;
                this.leftTouch = leftTouch;
                this.rightTouch = rightTouch;
                ultrasoneSamples = new float[ultrasone.sampleSize()];
@@ -22,9 +26,22 @@ public class SensorCollector{
                leftTouchSamples = new float[leftTouch.sampleSize()];
                rightTouchSamples = new float[rightTouch.sampleSize()];
                ultrasoneTime = System.currentTimeMillis();
-               colorTime = System.currentTimeMillis();
                leftTouchTime = System.currentTimeMillis();
                rightTouchTime = System.currentTimeMillis();
+               colorsCollected = new HashSet<Integer>();
+               new Thread(){
+                       @Override public void run(){
+                               long time = System.currentTimeMillis();
+                               while(true){
+                                       if(System.currentTimeMillis() - time > DELAY){
+                                               color.fetchSample(colorSamples, 0);
+                                               colorsCollected.add(color());
+                                               time = System.currentTimeMillis();
+                                       }
+                                       Thread.yield();
+                               }
+                       }
+               }.start();
        }
        
        public float distance(){
@@ -36,10 +53,6 @@ public class SensorCollector{
        }
        
        public int color(){
-               if(System.currentTimeMillis()-colorTime>DELAY){
-                       color.fetchSample(colorSamples, 0);
-                       colorTime = System.currentTimeMillis();
-               }
                return (int)colorSamples[0];
        }
        
@@ -58,4 +71,8 @@ public class SensorCollector{
                }
                return rightTouchSamples[0]==1;
        }
+
+       public boolean collected(int[] is) {
+               return colorsCollected.containsAll(Arrays.asList(is));
+       }
 }
\ No newline at end of file