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