Sorry about the Java error...very embarrassing!
Corrected the code, but still returns mostly zeroes.  Tried this, but stalls 
after a read or two...don't know why:

public void read() throws ConnectionLostException, InterruptedException, 
IncompatibilityException 
        {
                ioio.beginBatch();
                leftStrobe.write(true);
                leftStrobe.write(false);
                leftInput = ioio.openPulseInput(LEFT_ULTRASONIC_INPUT_PIN, 
PulseMode.POSITIVE);
                ioio.waitForConnect();
                leftDistance = leftInput.getDuration();
                leftInput.close();
                ioio.endBatch();
        }
On Apr 16, 2014, at 4:50 PM, Ytai Ben-Tsvi <[email protected]> wrote:

> Your local leftDistance variable is shadowing the class field...
> 
> On Apr 16, 2014 3:18 PM, "Vic Wintriss" <[email protected]> wrote:
> It's not too important that we get every pulse.
> I tried the following code, but still get all zeroes:
> public class UltraSonicSensors 
> {
>       private static final int LEFT_ULTRASONIC_INPUT_PIN = 35;
>       private static final int LEFT_STROBE_ULTRASONIC_OUTPUT_PIN = 15;
>       private final PulseInput leftInput;
>       private DigitalOutput leftStrobe;
>       private float leftDistance;
>       private IOIO ioio;
>       
>       public UltraSonicSensors(IOIO ioio) throws ConnectionLostException 
>       {
>               this.leftInput = ioio.openPulseInput(LEFT_ULTRASONIC_INPUT_PIN, 
> PulseMode.POSITIVE);
>               this.leftStrobe = 
> ioio.openDigitalOutput(LEFT_STROBE_ULTRASONIC_OUTPUT_PIN);
>               this.ioio = ioio;
>       }
> 
>       public void read() throws ConnectionLostException, InterruptedException 
>       {
>               read(leftStrobe, leftInput);
>       }
> 
>       private void read(DigitalOutput strobe, PulseInput input) throws 
> ConnectionLostException, InterruptedException 
>       {
>               ioio.beginBatch();
>               strobe.write(true);
>               strobe.write(false);
>               ioio.endBatch();
>               while (true) 
>               {
>                 float leftDistance = leftInput.getDurationBuffered();
>                 if (leftDistance > .0000001)
>                 {
>                         break;
>                 }
>               }
>       }
> 
>       public float getLeftDistance() 
>       {
>               return leftDistance;
>       }
> }
> What should I try next?
> Thanks for the lead to the 4-pin sensors.  I have ordered some...but since a 
> lot of the kids already have the 3-pin versions, I'm stuck with having to 
> make that work, too.
> I use use a pretty simple circuit to separate the input from the 
> output...attached.
> 
> Thanks for all the great help.
> 
> On Apr 15, 2014, at 9:41 PM, Ytai Ben-Tsvi <[email protected]> wrote:
> 
>> Yes, that's what I meant when I said that you may miss the actual pulse.
>> 
>> What about the following approach:
>> beginBatch();
>> sendPulse();
>> endBatch();
>> while (true) {
>>   float duration = pulseIn.GetDurationBuffered();
>>   if (duration > MIN_DURATION) return duration;
>> }
>> 
>> Of course, you can timeout if you want.
>> With this approach, every pulse is captured and considered, and you're 
>> filtering out the really short ones that indicate the input pulses.
>> 
>> BTW, there are equivalent ultrasonic range finders that have a more pleasant 
>> interface (for example, analog, or similar to the one you have but the 
>> feedback is on a separate pin). Here's one (available on DX for <$5):
>> http://www.micropik.com/PDF/HCSR04.pdf
>> 
>> 
>> 
>> On Tue, Apr 15, 2014 at 7:00 PM, Vic Wintriss <[email protected]> wrote:
>> Ytai:
>> 
>> With the sync() call after the endBatch() and before the getDuration() the 
>> program hangs up and I get no readings.
>> 
>> Vic
>> 
>> On Apr 15, 2014, at 5:32 PM, Ytai Ben-Tsvi <[email protected]> wrote:
>> 
>>> This code doesn't have the sync() call I proposed. It should come after the 
>>> batch.
>>> 
>>> On Apr 15, 2014 4:43 PM, "Vic Wintriss" <[email protected]> wrote:
>>> Ytai:
>>> 
>>> This code produces only 1.6875E-5...reading 2 times per second.
>>> 
>>> import ioio.lib.api.DigitalOutput;
>>> import ioio.lib.api.IOIO;
>>> import ioio.lib.api.PulseInput;
>>> import ioio.lib.api.PulseInput.PulseMode;
>>> import ioio.lib.api.exception.ConnectionLostException;
>>> 
>>> public class UltraSonicSensors 
>>> {
>>>     private static final int LEFT_ULTRASONIC_INPUT_PIN = 35;
>>>     private static final int LEFT_STROBE_ULTRASONIC_OUTPUT_PIN = 15;
>>>     private final PulseInput leftInput;
>>>     private DigitalOutput leftStrobe;
>>>     private float leftDistance;
>>>     private IOIO ioio;
>>>     
>>>     public UltraSonicSensors(IOIO ioio) throws ConnectionLostException 
>>>     {
>>>             this.leftInput = ioio.openPulseInput(LEFT_ULTRASONIC_INPUT_PIN, 
>>> PulseMode.POSITIVE);
>>>             this.leftStrobe = 
>>> ioio.openDigitalOutput(LEFT_STROBE_ULTRASONIC_OUTPUT_PIN);
>>>             this.ioio = ioio;
>>>     }
>>> 
>>>     public void read() throws ConnectionLostException, InterruptedException 
>>>     {
>>>             read(leftStrobe, leftInput);
>>>     }
>>> 
>>>     private void read(DigitalOutput strobe, PulseInput input) throws 
>>> ConnectionLostException, InterruptedException 
>>>     {
>>>             ioio.beginBatch();
>>>             strobe.write(true);
>>>             strobe.write(false);
>>>             ioio.endBatch();
>>>             this.leftDistance =  input.getDurationSync();
>>>     }
>>> 
>>>     public float getLeftDistance() 
>>>     {
>>>             return leftDistance;
>>>     }
>>> }
>>> On Apr 15, 2014, at 4:27 PM, Ytai Ben-Tsvi <[email protected]> wrote:
>>> 
>>>> Can you send me the most "correct" version of your code that demonstrates 
>>>> the issue?
>>>> I can probably make the necessary changes to sync () if this is indeed a 
>>>> problem.
>>>> 
>>>> On Apr 15, 2014 4:03 PM, "Vic Wintriss" <[email protected]> wrote:
>>>> Thanks for the ideas. I've tried many combinations of synch, 
>>>> readBuffered...etc, but unfortunately it still reads very small 
>>>> numbers...probably measuring the last part of the trigger pulse. Is there 
>>>> any way that I can delay the read by a couple of hundred micro seconds?  
>>>> Could you do the..... sync() call  "send" half inside the batch and "wait" 
>>>> half outside thing?
>>>> 
>>>> Thanks for all the help.  The kids are trying to use these sensors for 
>>>> iARoC 2014 (the International Autonomous Robot Competition) here in San 
>>>> Diego.
>>>> 
>>>> -- 
>>>> You received this message because you are subscribed to the Google Groups 
>>>> "ioio-users" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>>> email to [email protected].
>>>> To post to this group, send email to [email protected].
>>>> Visit this group at http://groups.google.com/group/ioio-users.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>> 
>>>> -- 
>>>> You received this message because you are subscribed to a topic in the 
>>>> Google Groups "ioio-users" group.
>>>> To unsubscribe from this topic, visit 
>>>> https://groups.google.com/d/topic/ioio-users/3MDLEEKtejY/unsubscribe.
>>>> To unsubscribe from this group and all its topics, send an email to 
>>>> [email protected].
>>>> To post to this group, send email to [email protected].
>>>> Visit this group at http://groups.google.com/group/ioio-users.
>>>> For more options, visit https://groups.google.com/d/optout.
>>> 
>>> 
>>> -- 
>>> You received this message because you are subscribed to the Google Groups 
>>> "ioio-users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at http://groups.google.com/group/ioio-users.
>>> For more options, visit https://groups.google.com/d/optout.
>>> 
>>> -- 
>>> You received this message because you are subscribed to a topic in the 
>>> Google Groups "ioio-users" group.
>>> To unsubscribe from this topic, visit 
>>> https://groups.google.com/d/topic/ioio-users/3MDLEEKtejY/unsubscribe.
>>> To unsubscribe from this group and all its topics, send an email to 
>>> [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at http://groups.google.com/group/ioio-users.
>>> For more options, visit https://groups.google.com/d/optout.
>> 
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "ioio-users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at http://groups.google.com/group/ioio-users.
>> For more options, visit https://groups.google.com/d/optout.
>> 
>> 
>> -- 
>> You received this message because you are subscribed to a topic in the 
>> Google Groups "ioio-users" group.
>> To unsubscribe from this topic, visit 
>> https://groups.google.com/d/topic/ioio-users/3MDLEEKtejY/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to 
>> [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at http://groups.google.com/group/ioio-users.
>> For more options, visit https://groups.google.com/d/optout.
> 
> --
> You received this message because you are subscribed to the Google Groups 
> "ioio-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/ioio-users.
> For more options, visit https://groups.google.com/d/optout.
> 
> 
> 
> -- 
> You received this message because you are subscribed to a topic in the Google 
> Groups "ioio-users" group.
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/ioio-users/3MDLEEKtejY/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to 
> [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/ioio-users.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"ioio-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/ioio-users.
For more options, visit https://groups.google.com/d/optout.

Reply via email to