1 package nl
.ru
.des
.sensors
;
3 import java
.util
.HashSet
;
6 import lejos
.hardware
.sensor
.EV3GyroSensor
;
7 import lejos
.robotics
.SampleProvider
;
9 public class SensorCollector
implements MessageHandler
{
10 public static final int DELAY
= 200;
12 private static final float DANGER_DISTANCE_FRONT
= 0.175f
;
13 private static final float DANGER_DISTANCE_BACK
= 0.035f
;
14 private static final float DANGER_LIGHT
= 0.40f
;
16 private Set
<String
> variables
;
19 private EV3GyroSensor gyroSensor
;
20 private SampleProvider ultra
, leftLight
, rightLight
, gyro
;
21 private float[] ultraSamples
, leftLightSamples
, rightLightSamples
, gyroSamples
;
22 private long ultraTime
, leftLightTime
, rightLightTime
, gyroTime
;
26 private boolean leftTouch
, rightTouch
;
27 private float frontUltra
;
29 public SensorCollector(SampleProvider ultra
,
30 SampleProvider leftLight
,
31 SampleProvider rightLight
,
34 this.leftLight
= leftLight
;
35 this.rightLight
= rightLight
;
36 this.gyroSensor
= gyro
;
37 this.gyro
= gyro
.getAngleMode();
38 ultraSamples
= new float[ultra
.sampleSize()];
39 gyroSamples
= new float[gyro
.sampleSize()];
40 leftLightSamples
= new float[leftLight
.sampleSize()];
41 rightLightSamples
= new float[rightLight
.sampleSize()];
42 ultraTime
= System
.currentTimeMillis();
43 leftLightTime
= System
.currentTimeMillis();
44 rightLightTime
= System
.currentTimeMillis();
45 gyroTime
= System
.currentTimeMillis();
50 frontUltra
= Float
.MAX_VALUE
;
51 variables
= new HashSet
<String
>();
55 public boolean backDistance(){
56 if(System
.currentTimeMillis()-ultraTime
>DELAY
){
57 ultra
.fetchSample(ultraSamples
, 0);
58 ultraTime
= System
.currentTimeMillis();
60 return ultraSamples
[0]>DANGER_DISTANCE_BACK
;
63 public boolean leftLight(){
64 if(System
.currentTimeMillis()-leftLightTime
>DELAY
){
65 leftLight
.fetchSample(leftLightSamples
, 0);
66 leftLightTime
= System
.currentTimeMillis();
68 return leftLightSamples
[0]>DANGER_LIGHT
;
71 public boolean rightLight(){
72 if(System
.currentTimeMillis()-rightLightTime
>DELAY
){
73 rightLight
.fetchSample(rightLightSamples
, 0);
74 rightLightTime
= System
.currentTimeMillis();
76 return rightLightSamples
[0]>DANGER_LIGHT
;
80 if(System
.currentTimeMillis()-gyroTime
>DELAY
){
81 gyro
.fetchSample(gyroSamples
, 0);
82 gyroTime
= System
.currentTimeMillis();
84 return gyroSamples
[0];
87 public void resetGyro(){
96 public boolean collected(String var
){
97 return variables
.contains(var
);
100 public void saveVar(String var
) {
108 public boolean leftTouch(){
112 public boolean rightTouch(){
116 public boolean frontDistance(){
117 return frontUltra
<DANGER_DISTANCE_FRONT
;
121 public void handleMessage(String m
) {
122 String s
= m
.substring(1);
123 switch(RemoteSensors
.RemoteSensorEnum
.values()[Integer
.valueOf(Character
.toString(m
.charAt(0)))]){
125 color
= Integer
.valueOf(s
);
128 leftTouch
= Integer
.valueOf(s
)==1;
131 rightTouch
= Integer
.valueOf(s
)==1;
134 frontUltra
= Float
.valueOf(s
);