started with new rover, bt still not worknig:(
[des2015.git] / dsl / runtime / src / nl / ru / des / SensorCollector.java
1 package nl.ru.des;
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 LCDPrinter.print(m);
89 String s = m.substring(1);
90 switch(RemoteSensors.RemoteSensorEnum.values()[Integer.valueOf(m.charAt(0))]){
91 case COLOR:
92 color = Integer.valueOf(s);
93 break;
94 case LEFT:
95 leftTouch = Integer.valueOf(s)==1;
96 break;
97 case RIGHT:
98 rightTouch = Integer.valueOf(s)==1;
99 break;
100 case ULTRA:
101 frontUltra = Float.valueOf(s);
102 break;
103 }
104 }
105 }