3 import java
.util
.Arrays
;
4 import java
.util
.HashSet
;
7 import lejos
.robotics
.SampleProvider
;
9 public class SensorCollector
{
10 public static final int DELAY
= 300;
12 private SampleProvider ultrasone
, leftTouch
, rightTouch
;
13 private float[] ultrasoneSamples
, colorSamples
, leftTouchSamples
, rightTouchSamples
;
14 private long ultrasoneTime
, leftTouchTime
, rightTouchTime
;
15 private Set
<Integer
> colorsCollected
;
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
>();
33 @Override public void run(){
34 long time
= System
.currentTimeMillis();
36 if(System
.currentTimeMillis() - time
> DELAY
){
37 color
.fetchSample(colorSamples
, 0);
38 colorsCollected
.add(color());
39 time
= System
.currentTimeMillis();
47 public float distance(){
48 if(System
.currentTimeMillis()-ultrasoneTime
>DELAY
){
49 ultrasone
.fetchSample(ultrasoneSamples
, 0);
50 ultrasoneTime
= System
.currentTimeMillis();
52 return ultrasoneSamples
[0];
56 return (int)colorSamples
[0];
59 public boolean leftTouch(){
60 if(System
.currentTimeMillis()-leftTouchTime
>DELAY
){
61 leftTouch
.fetchSample(leftTouchSamples
, 0);
62 leftTouchTime
= System
.currentTimeMillis();
64 return leftTouchSamples
[0]==1;
67 public boolean rightTouch(){
68 if(System
.currentTimeMillis()-rightTouchTime
>DELAY
){
69 rightTouch
.fetchSample(rightTouchSamples
, 0);
70 rightTouchTime
= System
.currentTimeMillis();
72 return rightTouchSamples
[0]==1;
75 public boolean collected(int[] is
) {
76 return colorsCollected
.containsAll(Arrays
.asList(is
));