OK...understood...I'll try it again. 

> On Apr 18, 2014, at 7:56 AM, Ytai Ben-Tsvi <[email protected]> wrote:
> 
> Your explanation of what's happening is correct. Your solution may work if 
> you get rid of the ioio.waitForConnect() and move the endBatch to where it 
> used to be.
> 
> However, I don't understand why you're saying that you'll be missing readings 
> with the approach I proposed. You're only discarding pulses which are not 
> legitimate readings and the getDurationBuffered() method is supposed to give 
> you every pulse.
> 
> 
>> On Thu, Apr 17, 2014 at 8:01 PM, Vic Wintriss <[email protected]> wrote:
>> 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.
> 
> -- 
> 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