529559b60e7dcf25cb326e8de9fe5388b26087d8
[des2015.git] / dsl / runtime / src / nl / ru / des / SensorCollector.java
1 package nl.ru.des;
2
3 import java.util.Arrays;
4 import java.util.HashSet;
5 import java.util.Set;
6
7 import lejos.robotics.SampleProvider;
8
9 public class SensorCollector{
10 public static final int DELAY = 300;
11
12 private SampleProvider ultrasone, leftTouch, rightTouch;
13 private float[] ultrasoneSamples, colorSamples, leftTouchSamples, rightTouchSamples;
14 private long ultrasoneTime, leftTouchTime, rightTouchTime;
15 private Set<Integer> colorsCollected;
16
17 public SensorCollector(SampleProvider ultrasone,
18 final SampleProvider color,
19 SampleProvider leftTouch,
20 SampleProvider rightTouch){
21 this.ultrasone = ultrasone;
22 this.leftTouch = leftTouch;
23 this.rightTouch = rightTouch;
24 ultrasoneSamples = new float[ultrasone.sampleSize()];
25 colorSamples = new float[color.sampleSize()];
26 leftTouchSamples = new float[leftTouch.sampleSize()];
27 rightTouchSamples = new float[rightTouch.sampleSize()];
28 ultrasoneTime = System.currentTimeMillis();
29 leftTouchTime = System.currentTimeMillis();
30 rightTouchTime = System.currentTimeMillis();
31 colorsCollected = new HashSet<Integer>();
32 new Thread(){
33 @Override public void run(){
34 long time = System.currentTimeMillis();
35 while(true){
36 if(System.currentTimeMillis() - time > DELAY){
37 color.fetchSample(colorSamples, 0);
38 colorsCollected.add(color());
39 time = System.currentTimeMillis();
40 }
41 Thread.yield();
42 }
43 }
44 }.start();
45 }
46
47 public float distance(){
48 if(System.currentTimeMillis()-ultrasoneTime>DELAY){
49 ultrasone.fetchSample(ultrasoneSamples, 0);
50 ultrasoneTime = System.currentTimeMillis();
51 }
52 return ultrasoneSamples[0];
53 }
54
55 public int color(){
56 return (int)colorSamples[0];
57 }
58
59 public boolean leftTouch(){
60 if(System.currentTimeMillis()-leftTouchTime>DELAY){
61 leftTouch.fetchSample(leftTouchSamples, 0);
62 leftTouchTime = System.currentTimeMillis();
63 }
64 return leftTouchSamples[0]==1;
65 }
66
67 public boolean rightTouch(){
68 if(System.currentTimeMillis()-rightTouchTime>DELAY){
69 rightTouch.fetchSample(rightTouchSamples, 0);
70 rightTouchTime = System.currentTimeMillis();
71 }
72 return rightTouchSamples[0]==1;
73 }
74
75 public boolean collected(int[] is) {
76 return colorsCollected.containsAll(Arrays.asList(is));
77 }
78 }