d25adb36c68a5e0df5c25cf15d7337322a45332a
[des2015.git] / dsl / runtime / src / nl / ru / des / sensors / RemoteSensors.java
1 package nl.ru.des.sensors;
2
3 import java.util.Queue;
4
5 import lejos.robotics.SampleProvider;
6 import nl.ru.des.LCDPrinter;
7
8 public class RemoteSensors{
9 public static final int DELAY = 250;
10 private SampleProvider left, right, ultra, color;
11 private float[] leftSamples, rightSamples, ultraSamples, colorSamples;
12 private float leftLatest, rightLatest, ultraLatest, colorLatest;
13
14 public enum RemoteSensorEnum {
15 LEFT, RIGHT, ULTRA, COLOR;
16 }
17
18 public RemoteSensors(SampleProvider left, SampleProvider right, SampleProvider ultra, SampleProvider color){
19 this.left = left;
20 this.right = right;
21 this.ultra = ultra;
22 this.color = color;
23 leftSamples = new float[left.sampleSize()];
24 rightSamples = new float[right.sampleSize()];
25 ultraSamples = new float[ultra.sampleSize()];
26 colorSamples = new float[color.sampleSize()];
27 }
28
29 public void start(Queue<String> q){
30 long last = System.currentTimeMillis();
31 LCDPrinter.print("Start sending values...");
32 while(true){
33 if(System.currentTimeMillis()-last > DELAY && q.size()<5){
34 last = System.currentTimeMillis();
35 left.fetchSample(leftSamples, 0);
36 if(leftSamples[0] != leftLatest){
37 leftLatest = leftSamples[0];
38 q.add(Integer.toString(RemoteSensorEnum.LEFT.ordinal())+Integer.toString((int)leftLatest)+"\n");
39 }
40 right.fetchSample(rightSamples, 0);
41 if(rightSamples[0] != rightLatest){
42 rightLatest = rightSamples[0];
43 q.add(Integer.toString(RemoteSensorEnum.RIGHT.ordinal())+Integer.toString((int)rightLatest)+"\n");
44 }
45
46 ultra.fetchSample(ultraSamples, 0);
47 if(ultraSamples[0] != ultraLatest){
48 ultraLatest = ultraSamples[0];
49 q.add(Integer.toString(RemoteSensorEnum.ULTRA.ordinal())+Float.toString(ultraLatest)+"\n");
50 }
51
52 color.fetchSample(colorSamples, 0);
53 if(colorSamples[0] != colorLatest){
54 colorLatest = colorSamples[0];
55 q.add(Integer.toString(RemoteSensorEnum.COLOR.ordinal())+Integer.toString((int)colorLatest)+"\n");
56 }
57 }
58 Thread.yield();
59 }
60 }
61 }