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