Hi Felipe,

us not having a user list is intentional, so this is absolutely the right place 
to come and ask questions.

As the filter itself is super-trivial, I think it might be the simplest 
solution to implement the filter itself:

            TStream<Double> filteredReadings = tempReadings.filter(reading -> {
                System.out.println(String.format("The value was %s", reading));
                return reading < 50 || reading > 80;
            });

This should do the trick ...

Hope this helps,
Chris



Am 21.11.18, 15:59 schrieb "Felipe Gutierrez" <felipe.o.gutier...@gmail.com>:

    Hi,
    
    This question is about an application that I am using Apache Edgent, not
    really a development effort into Apache Edgent. But as there is no user@list
    I am sensding here.
    
    I am using Apache Edgent  (Java framework) to poll values from an HCSR04
    ultrasonic sensor on a Raspberry Pi every 3 seconds. I use a filter to not
    get values from 50cm to 80cm (
    
https://github.com/felipegutierrez/explore-rpi/blob/master/src/main/java/org/sense/edgent/app/UltrasonicEdgentApp.java
    ).
    
    UltrasonicStream sensor = new UltrasonicStream();
    DirectProvider dp = new DirectProvider();
    Topology topology = dp.newTopology();
    TStream<Double> tempReadings = topology.poll(sensor, 3, TimeUnit.SECONDS);
    TStream<Double> filteredReadings = tempReadings.filter(reading -> reading <
    50 || reading > 80);
    System.out.println("filter added: tempReadings.filter(reading -> reading <
    50 || reading > 80);");
    filteredReadings.print();
    dp.submit(topology);
    
    I want to show some message when the values are filtered. When the values
    do not match with my filter I can poll them, but when they match I am not
    returning, that is ok. However, I want just to show that a value was
    filtered using Apache Edgent libraries. I know that I can do something on
    the `public double get()` method, but I wonder if I could do this trick
    with some method of the Apache Edgent (
    
https://github.com/felipegutierrez/explore-rpi/blob/master/src/main/java/org/sense/sensor/UltrasonicStream.java
    ).
    
    public class UltrasonicStream implements Supplier<Double> {
    
    private static final long serialVersionUID = -6511218542753341056L;
    
    private static GpioPinDigitalOutput sensorTriggerPin;
    private static GpioPinDigitalInput sensorEchoPin;
    private static final GpioController gpio = GpioFactory.getInstance();
    private double currentDistance = -1.0;
    
    /**
    * The HCSR04 Ultrasonic sensor is connected on the physical pin 16 and 18
    which
    * correspond to the GPIO 04 and 05 of the WiringPi library.
    */
    public UltrasonicStream() {
    // Trigger pin as OUTPUT
    sensorTriggerPin = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_04);
    // Echo pin as INPUT
    sensorEchoPin = gpio.provisionDigitalInputPin(RaspiPin.GPIO_05,
    PinPullResistance.PULL_DOWN);
    }
    
    /**
    * This is the override method of the Supplier interface from Apache Edgent
    */
    @Override
    public Double get() {
    try {
    System.out.print("Distance in centimeters: ");
    currentDistance = getDistance();
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return currentDistance;
    }
    
    /**
    * Retrieve the distance measured by the HCSR04 Ultrasonic sensor connected
    on a
    * Raspberry Pi 3+B
    *
    * @return the distance in centimeters
    * @throws InterruptedException
    */
    public double getDistance() throws InterruptedException {
    
    double distanceCM = -1;
    try {
    // Thread.sleep(2000);
    sensorTriggerPin.high(); // Make trigger pin HIGH
    Thread.sleep((long) 0.01);// Delay for 10 microseconds
    sensorTriggerPin.low(); // Make trigger pin LOW
    
    // Wait until the ECHO pin gets HIGH
    while (sensorEchoPin.isLow()) {
    
    }
    // Store the current time to calculate ECHO pin HIGH time.
    long startTime = System.nanoTime();
    // Wait until the ECHO pin gets LOW
    while (sensorEchoPin.isHigh()) {
    
    }
    // Store the echo pin HIGH end time to calculate ECHO pin HIGH time.
    long endTime = System.nanoTime();
    
    distanceCM = ((((endTime - startTime) / 1e3) / 2) / 29.1);
    // Printing out the distance in centimeters
    // System.out.println("Distance: " + distanceCM + " centimeters");
    
    return distanceCM;
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    return distanceCM;
    }
    }
    
    Thanks,
    Felipe
    
    *--*
    *-- Felipe Gutierrez*
    
    *-- skype: felipe.o.gutierrez*
    *--* *https://felipeogutierrez.blogspot.com
    <https://felipeogutierrez.blogspot.com>*
    

Reply via email to