Good catch, I forgot about this constraint.
In that case, this (similar to what you've proposed) approach might work:

beginBatch();
generatePulse();
openPulseIn();
endBatch();
getDuration();
closePulseIn();

I'd like to emphasize that the fact we have to jump through weird hoops to
get is working is mostly due to the fact that this sensor has a weird
interface. BTW, another thing you can do is use a discrete logic gate to
filter out the ping input pulse from the output. Something like:
clean_out = ping_pin & !ioio_pulse_out_pin

This will convert the Ping's interface to be similar to the one of the
other sensor I referred you to.



On Mon, Apr 21, 2014 at 3:23 PM, Vic Wintriss <[email protected]>wrote:

> I don't think that I can use getDurationBuffered() in this case. The
> getDuration() Interface notes say: "...Note that once a pulse is detected,
> the next one must have its leading edge at least 5ms after the leading edge
> of the current one, or else it will be skipped."  The ping pulse is about
> 50 microsecs long, and the echo pulse comes about 750 microsecs after the
> ping pulse,  If I am getting the last part of the ping pulse, the echo
> pulse will come too soon for getDurationBuffered() to acquire the echo
> pulse.  Am I understanding this right?
>
>
> On Sunday, April 13, 2014 7:22:39 PM UTC-7, Vic Wintriss wrote:
>>
>> I am trying to use the Parallax Ping))) ultrasonic sensor with a ioio V1
>> board, using the IOIO00503 library.  I get a good looking signal...see the
>> attached scope view, but the input.getDuration() call returns 16.8 micro
>> seconds most of the time, called 2 times per second.  Every once in a while
>> I get the proper number.
>>
>>  Any ideas? Here is the code:
>>
>> 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) 
>> throwsConnectionLostException, InterruptedException
>>
>> {
>>
>>  ioio.beginBatch();
>>
>>  strobe.write(true);
>>
>>  strobe.write(false);
>>
>>  ioio.endBatch();
>>
>>  this.leftDistance =  input.getDuration();
>>
>> }
>>
>>
>>  public float getLeftDistance()
>>
>> {
>>
>>  return leftDistance;
>>
>> }
>>
>> }
>>
>  --
> 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 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