My theory was that the getDuration() call was coming too quickly and actually 
reading the end of the trigger pulse. I thought that by delaying the 
getDuration() a bit (or not opening it until the trigger pulse was finished) I 
could avoid that.  Does that hypothesis sound likely to you?

Setting a threshold makes me miss a lot of readings.  When the robot is moving 
fast, I need as many valid readings as possible.

On Apr 17, 2014, at 6:54 PM, Ytai Ben-Tsvi <[email protected]> wrote:

> What's with the waitForConnect()? And why are you closing the pins?
> The approach you took before is OK. Why did you change it? I think the fact 
> that you set the threshold to 0.1us is a problem. You should set it to 
> whatever you think is the minimum pulse width you're ever going to get.
> Also, I'd have this function simply return the result as opposed to set a 
> field.
> 
> 
> On Thu, Apr 17, 2014 at 1:15 PM, Vic Wintriss <[email protected]> wrote:
> 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.
> 
> 
> -- 
> 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