package nl.ru.des.sensors;
+import java.util.HashSet;
+import java.util.Set;
+
+import lejos.hardware.sensor.EV3GyroSensor;
import lejos.robotics.SampleProvider;
-import nl.ru.des.LCDPrinter;
public class SensorCollector implements MessageHandler{
- public static final int DELAY = 300;
+ public static final int DELAY = 200;
+
+ private static final float DANGER_DISTANCE_FRONT = 0.175f;
+ private static final float DANGER_DISTANCE_BACK = 0.035f;
+ private static final float DANGER_LIGHT = 0.40f;
+
+ private Set<String> variables;
//Local sensors
+ private EV3GyroSensor gyroSensor;
private SampleProvider ultra, leftLight, rightLight, gyro;
private float[] ultraSamples, leftLightSamples, rightLightSamples, gyroSamples;
private long ultraTime, leftLightTime, rightLightTime, gyroTime;
public SensorCollector(SampleProvider ultra,
SampleProvider leftLight,
SampleProvider rightLight,
- SampleProvider gyro){
+ EV3GyroSensor gyro){
this.ultra = ultra;
this.leftLight = leftLight;
this.rightLight = rightLight;
- this.gyro = gyro;
+ this.gyroSensor = gyro;
+ this.gyro = gyro.getAngleMode();
ultraSamples = new float[ultra.sampleSize()];
gyroSamples = new float[gyro.sampleSize()];
leftLightSamples = new float[leftLight.sampleSize()];
leftLightTime = System.currentTimeMillis();
rightLightTime = System.currentTimeMillis();
gyroTime = System.currentTimeMillis();
+
+ color = -1;
+ leftTouch = false;
+ rightTouch = false;
+ frontUltra = Float.MAX_VALUE;
+ variables = new HashSet<String>();
}
//Local sensors
- public float backDistance(){
+ public boolean backDistance(){
if(System.currentTimeMillis()-ultraTime>DELAY){
ultra.fetchSample(ultraSamples, 0);
ultraTime = System.currentTimeMillis();
}
- return ultraSamples[0];
+ return ultraSamples[0]>DANGER_DISTANCE_BACK;
}
public boolean leftLight(){
leftLight.fetchSample(leftLightSamples, 0);
leftLightTime = System.currentTimeMillis();
}
- return leftLightSamples[0]>0.5;
+ return leftLightSamples[0]>DANGER_LIGHT;
}
public boolean rightLight(){
rightLight.fetchSample(rightLightSamples, 0);
rightLightTime = System.currentTimeMillis();
}
- return rightLightSamples[0]>0.5;
+ return rightLightSamples[0]>DANGER_LIGHT;
}
public float gyro(){
return gyroSamples[0];
}
+ public void resetGyro(){
+ gyroSensor.reset();
+ }
+
//Remote sensors
+ public void reset(){
+ variables.clear();
+ }
+
+ public boolean collected(String var){
+ return variables.contains(var);
+ }
+
+ public void saveVar(String var) {
+ variables.add(var);
+ }
+
public int color(){
return color;
}
return rightTouch;
}
- public float frontDistance(){
- return frontUltra;
+ public boolean frontDistance(){
+ return frontUltra<DANGER_DISTANCE_FRONT;
}
@Override
public void handleMessage(String m) {
- LCDPrinter.print("Sensor: " + Character.toString(m.charAt(0)) + " with value: " + m.substring(1));
String s = m.substring(1);
switch(RemoteSensors.RemoteSensorEnum.values()[Integer.valueOf(Character.toString(m.charAt(0)))]){
case COLOR: