1 package nl
.ru
.des
.sensors
;
3 import lejos
.robotics
.SampleProvider
;
5 public class SensorCollector
implements MessageHandler
{
6 public static final int DELAY
= 300;
9 private SampleProvider ultra
, leftLight
, rightLight
, gyro
;
10 private float[] ultraSamples
, leftLightSamples
, rightLightSamples
, gyroSamples
;
11 private long ultraTime
, leftLightTime
, rightLightTime
, gyroTime
;
15 private boolean leftTouch
, rightTouch
;
16 private float frontUltra
;
18 public SensorCollector(SampleProvider ultra
,
19 SampleProvider leftLight
,
20 SampleProvider rightLight
,
23 this.leftLight
= leftLight
;
24 this.rightLight
= rightLight
;
26 ultraSamples
= new float[ultra
.sampleSize()];
27 gyroSamples
= new float[gyro
.sampleSize()];
28 leftLightSamples
= new float[leftLight
.sampleSize()];
29 rightLightSamples
= new float[rightLight
.sampleSize()];
30 ultraTime
= System
.currentTimeMillis();
31 leftLightTime
= System
.currentTimeMillis();
32 rightLightTime
= System
.currentTimeMillis();
33 gyroTime
= System
.currentTimeMillis();
37 public float backDistance(){
38 if(System
.currentTimeMillis()-ultraTime
>DELAY
){
39 ultra
.fetchSample(ultraSamples
, 0);
40 ultraTime
= System
.currentTimeMillis();
42 return ultraSamples
[0];
45 public boolean leftLight(){
46 if(System
.currentTimeMillis()-leftLightTime
>DELAY
){
47 leftLight
.fetchSample(leftLightSamples
, 0);
48 leftLightTime
= System
.currentTimeMillis();
50 return leftLightSamples
[0]>0.5;
53 public boolean rightLight(){
54 if(System
.currentTimeMillis()-rightLightTime
>DELAY
){
55 rightLight
.fetchSample(rightLightSamples
, 0);
56 rightLightTime
= System
.currentTimeMillis();
58 return rightLightSamples
[0]>0.5;
62 if(System
.currentTimeMillis()-gyroTime
>DELAY
){
63 gyro
.fetchSample(gyroSamples
, 0);
64 gyroTime
= System
.currentTimeMillis();
66 return gyroSamples
[0];
74 public boolean leftTouch(){
78 public boolean rightTouch(){
82 public float frontDistance(){
87 public void handleMessage(String m
) {
88 String s
= m
.substring(1);
89 switch(RemoteSensors
.RemoteSensorEnum
.values()[Integer
.valueOf(Character
.toString(m
.charAt(0)))]){
91 color
= Integer
.valueOf(s
);
94 leftTouch
= Integer
.valueOf(s
)==1;
97 rightTouch
= Integer
.valueOf(s
)==1;
100 frontUltra
= Float
.valueOf(s
);