X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=dsl%2Fruntime%2Fsrc%2Fnl%2Fru%2Fdes%2FSensorCollector.java;h=9a58ae46ecd140c56ee0db545c8505df63f3fb8d;hb=34dae1e7f9c49481d90b3d26978cc5ab52ccc050;hp=5210bd1f6396b62c99c4517e454c9b98dcc53ea8;hpb=55df69a5d4941d45bd3d860e6cea9b1357e09f98;p=des2015.git diff --git a/dsl/runtime/src/nl/ru/des/SensorCollector.java b/dsl/runtime/src/nl/ru/des/SensorCollector.java index 5210bd1..9a58ae4 100644 --- a/dsl/runtime/src/nl/ru/des/SensorCollector.java +++ b/dsl/runtime/src/nl/ru/des/SensorCollector.java @@ -1,78 +1,105 @@ package nl.ru.des; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; - import lejos.robotics.SampleProvider; -public class SensorCollector{ - public static final int DELAY = 100; +public class SensorCollector implements MessageHandler{ + public static final int DELAY = 300; - private SampleProvider ultrasone, leftTouch, rightTouch; - private float[] ultrasoneSamples, colorSamples, leftTouchSamples, rightTouchSamples; - private long ultrasoneTime, leftTouchTime, rightTouchTime; - private Set colorsCollected; - - public SensorCollector(SampleProvider ultrasone, - final SampleProvider color, - SampleProvider leftTouch, - SampleProvider rightTouch){ - this.ultrasone = ultrasone; - this.leftTouch = leftTouch; - this.rightTouch = rightTouch; - ultrasoneSamples = new float[ultrasone.sampleSize()]; - colorSamples = new float[color.sampleSize()]; - leftTouchSamples = new float[leftTouch.sampleSize()]; - rightTouchSamples = new float[rightTouch.sampleSize()]; - ultrasoneTime = System.currentTimeMillis(); - leftTouchTime = System.currentTimeMillis(); - rightTouchTime = System.currentTimeMillis(); - colorsCollected = new HashSet(); - new Thread(){ - @Override public void run(){ - long time = System.currentTimeMillis(); - while(true){ - if(System.currentTimeMillis() - time > DELAY){ - color.fetchSample(colorSamples, 0); - colorsCollected.add(color()); - time = System.currentTimeMillis(); - } - Thread.yield(); - } - } - }.start(); + //Local sensors + private SampleProvider ultra, leftLight, rightLight, gyro; + private float[] ultraSamples, leftLightSamples, rightLightSamples, gyroSamples; + private long ultraTime, leftLightTime, rightLightTime, gyroTime; + + //Remote sensors + private int color; + private boolean leftTouch, rightTouch; + private float frontUltra; + + public SensorCollector(SampleProvider ultra, + SampleProvider leftLight, + SampleProvider rightLight, + SampleProvider gyro){ + this.ultra = ultra; + this.leftLight = leftLight; + this.rightLight = rightLight; + this.gyro = gyro; + ultraSamples = new float[ultra.sampleSize()]; + gyroSamples = new float[gyro.sampleSize()]; + leftLightSamples = new float[leftLight.sampleSize()]; + rightLightSamples = new float[rightLight.sampleSize()]; + ultraTime = System.currentTimeMillis(); + leftLightTime = System.currentTimeMillis(); + rightLightTime = System.currentTimeMillis(); + gyroTime = System.currentTimeMillis(); + } + + //Local sensors + public float backDistance(){ + if(System.currentTimeMillis()-ultraTime>DELAY){ + ultra.fetchSample(ultraSamples, 0); + ultraTime = System.currentTimeMillis(); + } + return ultraSamples[0]; + } + + public boolean leftLight(){ + if(System.currentTimeMillis()-leftLightTime>DELAY){ + leftLight.fetchSample(leftLightSamples, 0); + leftLightTime = System.currentTimeMillis(); + } + return leftLightSamples[0]>0.5; } - public float distance(){ - if(System.currentTimeMillis()-ultrasoneTime>DELAY){ - ultrasone.fetchSample(ultrasoneSamples, 0); - ultrasoneTime = System.currentTimeMillis(); + public boolean rightLight(){ + if(System.currentTimeMillis()-rightLightTime>DELAY){ + rightLight.fetchSample(rightLightSamples, 0); + rightLightTime = System.currentTimeMillis(); } - return ultrasoneSamples[0]; + return rightLightSamples[0]>0.5; } + public float gyro(){ + if(System.currentTimeMillis()-gyroTime>DELAY){ + gyro.fetchSample(gyroSamples, 0); + gyroTime = System.currentTimeMillis(); + } + return gyroSamples[0]; + } + + //Remote sensors public int color(){ - return (int)colorSamples[0]; + return color; } public boolean leftTouch(){ - if(System.currentTimeMillis()-leftTouchTime>DELAY){ - leftTouch.fetchSample(leftTouchSamples, 0); - leftTouchTime = System.currentTimeMillis(); - } - return leftTouchSamples[0]==1; + return leftTouch; } public boolean rightTouch(){ - if(System.currentTimeMillis()-rightTouchTime>DELAY){ - rightTouch.fetchSample(rightTouchSamples, 0); - rightTouchTime = System.currentTimeMillis(); - } - return rightTouchSamples[0]==1; + return rightTouch; + } + + public float frontDistance(){ + return frontUltra; } - public boolean collected(int[] is) { - return colorsCollected.containsAll(Arrays.asList(is)); + @Override + public void handleMessage(String m) { + LCDPrinter.print(m); + String s = m.substring(1); + switch(RemoteSensors.RemoteSensorEnum.values()[Integer.valueOf(m.charAt(0))]){ + case COLOR: + color = Integer.valueOf(s); + break; + case LEFT: + leftTouch = Integer.valueOf(s)==1; + break; + case RIGHT: + rightTouch = Integer.valueOf(s)==1; + break; + case ULTRA: + frontUltra = Float.valueOf(s); + break; + } } } \ No newline at end of file