1 package nl
.ru
.des
.sensors
;
3 import lejos
.hardware
.lcd
.LCD
;
4 import lejos
.robotics
.SampleProvider
;
5 import lejos
.utility
.Delay
;
7 public class SensorCollector
implements MessageHandler
{
8 public static final int DELAY
= 100;
10 private static final float DANGER_DISTANCE_FRONT
= 0.15f
;
11 private static final float DANGER_DISTANCE_BACK
= 0.035f
;
12 private static final float DANGER_LIGHT
= 0.45f
;
15 private SampleProvider ultra
, leftLight
, rightLight
, gyro
;
16 private float[] ultraSamples
, leftLightSamples
, rightLightSamples
, gyroSamples
;
17 private long ultraTime
, leftLightTime
, rightLightTime
, gyroTime
;
21 private boolean leftTouch
, rightTouch
;
22 private float frontUltra
;
24 public SensorCollector(SampleProvider ultra
,
25 SampleProvider leftLight
,
26 SampleProvider rightLight
,
29 this.leftLight
= leftLight
;
30 this.rightLight
= rightLight
;
32 ultraSamples
= new float[ultra
.sampleSize()];
33 gyroSamples
= new float[gyro
.sampleSize()];
34 leftLightSamples
= new float[leftLight
.sampleSize()];
35 rightLightSamples
= new float[rightLight
.sampleSize()];
36 ultraTime
= System
.currentTimeMillis();
37 leftLightTime
= System
.currentTimeMillis();
38 rightLightTime
= System
.currentTimeMillis();
39 gyroTime
= System
.currentTimeMillis();
43 public boolean backDistance(){
44 if(System
.currentTimeMillis()-ultraTime
>DELAY
){
45 ultra
.fetchSample(ultraSamples
, 0);
46 ultraTime
= System
.currentTimeMillis();
48 return ultraSamples
[0]>DANGER_DISTANCE_BACK
;
51 public boolean leftLight(){
52 if(System
.currentTimeMillis()-leftLightTime
>DELAY
){
53 leftLight
.fetchSample(leftLightSamples
, 0);
54 leftLightTime
= System
.currentTimeMillis();
56 return leftLightSamples
[0]>DANGER_LIGHT
;
59 public boolean rightLight(){
60 if(System
.currentTimeMillis()-rightLightTime
>DELAY
){
61 rightLight
.fetchSample(rightLightSamples
, 0);
62 rightLightTime
= System
.currentTimeMillis();
64 return rightLightSamples
[0]>DANGER_LIGHT
;
68 if(System
.currentTimeMillis()-gyroTime
>DELAY
){
69 gyro
.fetchSample(gyroSamples
, 0);
70 gyroTime
= System
.currentTimeMillis();
72 return gyroSamples
[0];
76 public boolean collected(int[] colors
){
84 public boolean leftTouch(){
88 public boolean rightTouch(){
92 public boolean frontDistance(){
93 return frontUltra
<DANGER_DISTANCE_FRONT
;
97 public void handleMessage(String m
) {
98 String s
= m
.substring(1);
99 switch(RemoteSensors
.RemoteSensorEnum
.values()[Integer
.valueOf(Character
.toString(m
.charAt(0)))]){
101 color
= Integer
.valueOf(s
);
104 leftTouch
= Integer
.valueOf(s
)==1;
107 rightTouch
= Integer
.valueOf(s
)==1;
110 frontUltra
= Float
.valueOf(s
);