3faae0999ab379f5c5bcd308b04c48524f0553dd
[des2015.git] / dsl / runtime / src / nl / ru / des / sensors / SensorCollector.java
1 package nl.ru.des.sensors;
2
3 import lejos.robotics.SampleProvider;
4
5 public class SensorCollector implements MessageHandler{
6 public static final int DELAY = 300;
7
8 //Local sensors
9 private SampleProvider ultra, leftLight, rightLight, gyro;
10 private float[] ultraSamples, leftLightSamples, rightLightSamples, gyroSamples;
11 private long ultraTime, leftLightTime, rightLightTime, gyroTime;
12
13 //Remote sensors
14 private int color;
15 private boolean leftTouch, rightTouch;
16 private float frontUltra;
17
18 public SensorCollector(SampleProvider ultra,
19 SampleProvider leftLight,
20 SampleProvider rightLight,
21 SampleProvider gyro){
22 this.ultra = ultra;
23 this.leftLight = leftLight;
24 this.rightLight = rightLight;
25 this.gyro = gyro;
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();
34 }
35
36 //Local sensors
37 public float backDistance(){
38 if(System.currentTimeMillis()-ultraTime>DELAY){
39 ultra.fetchSample(ultraSamples, 0);
40 ultraTime = System.currentTimeMillis();
41 }
42 return ultraSamples[0];
43 }
44
45 public boolean leftLight(){
46 if(System.currentTimeMillis()-leftLightTime>DELAY){
47 leftLight.fetchSample(leftLightSamples, 0);
48 leftLightTime = System.currentTimeMillis();
49 }
50 return leftLightSamples[0]>0.5;
51 }
52
53 public boolean rightLight(){
54 if(System.currentTimeMillis()-rightLightTime>DELAY){
55 rightLight.fetchSample(rightLightSamples, 0);
56 rightLightTime = System.currentTimeMillis();
57 }
58 return rightLightSamples[0]>0.5;
59 }
60
61 public float gyro(){
62 if(System.currentTimeMillis()-gyroTime>DELAY){
63 gyro.fetchSample(gyroSamples, 0);
64 gyroTime = System.currentTimeMillis();
65 }
66 return gyroSamples[0];
67 }
68
69 //Remote sensors
70 public int color(){
71 return color;
72 }
73
74 public boolean leftTouch(){
75 return leftTouch;
76 }
77
78 public boolean rightTouch(){
79 return rightTouch;
80 }
81
82 public float frontDistance(){
83 return frontUltra;
84 }
85
86 @Override
87 public void handleMessage(String m) {
88 String s = m.substring(1);
89 switch(RemoteSensors.RemoteSensorEnum.values()[Integer.valueOf(Character.toString(m.charAt(0)))]){
90 case COLOR:
91 color = Integer.valueOf(s);
92 break;
93 case LEFT:
94 leftTouch = Integer.valueOf(s)==1;
95 break;
96 case RIGHT:
97 rightTouch = Integer.valueOf(s)==1;
98 break;
99 case ULTRA:
100 frontUltra = Float.valueOf(s);
101 break;
102 }
103 }
104 }