@Duane
At this point I'm convinced that there is no reason why this *should* work.
If it used to work in the past it is probably coincidental and you can of
course downgrade if you prefer.
I'm not going to spend any time supporting one specific sensor that has a
weird interface. You have several viable options for solving your problem:

   - Use a different sensor as recommended above.
   - Filter out the trigger pulse using simple discrete logic as
   recommended above.
   - Change the firmware to support your use-case, for example, to filter
   out pulses shorter than a certain limit or even having a dedicated PING
   interface that can do both the output and input.

@Vic
While you're generating the output with one pin and reading the input with
another, the latter pin is being exposed to both signals.


On Sat, Apr 26, 2014 at 4:20 PM, Vic Wintriss <[email protected]>wrote:

> The output pulse and input pulse are not on the same pin.  I assume by
> line you meant pin.  Output is on one pin and input is on another pin.
>
>
> On Saturday, April 26, 2014 4:04:51 PM UTC-7, Ytai wrote:
>
>> PulseInput is primarily designed for:
>>
>>    1. Measuring rate or pulse-width of a pulse train signal, where it is
>>    not necessarily important to get a result for each and every pulse. This 
>> is
>>    useful, for example, to measure speed of a wheel or to decode a servo
>>    signal.
>>    2. Measuring width of individual pulses that occur relatively
>>    sporadically, like outputs from ultrasonics.
>>
>> In your case, we have two kinds of pulses (in/out) on the same line in
>> close proximity, and you're trying to extract one but not the other. Not
>> that there is anything particularly hard to implement such a feature, only
>> that it is not generic enough to be addressed in the standard interfaces
>> that I've developed.
>>
>>
>> On Fri, Apr 25, 2014 at 9:50 PM, Vic Wintriss <[email protected]>wrote:
>>
>>> I am just trying to put out a pulse on one pin and then read a  pulse
>>> width on a different pin 750 microsecs later. Why do you say that it was
>>> not designed for such a use?
>>>
>>>
>>> On Wednesday, April 23, 2014 9:21:54 PM UTC-7, Ytai wrote:
>>>
>>>> Nope. The PulseInput module was really not designed for such a
>>>> use-case. If you had only the output pulses on the input things would "just
>>>> work". Try the AND gate trick.
>>>>
>>>>
>>>> On Wed, Apr 23, 2014 at 9:15 PM, Vic Wintriss <[email protected]>wrote:
>>>>
>>>>> I have tried all combinations of opening pulse input after sending the
>>>>> trigger pulse...no luck.  I am reading both the output (trigger pulse) and
>>>>> the echo (return) pulse...alternately.  About 5 trigger pulse readings to
>>>>> each echo pulse reading.  Any work around ideas?
>>>>>
>>>>>
>>>>> On Wednesday, April 23, 2014 8:44:02 PM UTC-7, Ytai wrote:
>>>>>
>>>>>> Opening the pulse input after sending the pulse should have done
>>>>>> that. You shouldn't be able to get a pulse from the past the way you're
>>>>>> doing this. Are you saying that what you're reading back is the output
>>>>>> pulse?
>>>>>> It is possible that there's a bug in the firmware side on the
>>>>>> PulseInput implementation in that case.
>>>>>>
>>>>>>
>>>>>> On Wed, Apr 23, 2014 at 2:33 PM, Vic Wintriss <[email protected]>wrote:
>>>>>>
>>>>>>> I'm using 0503.
>>>>>>>
>>>>>>> The problem is that the ping and the return are getting out of sync.
>>>>>>>  The getDuration() readings match exactly the times that I see on the 
>>>>>>> scope.
>>>>>>> How can I synchronize so that I only start listening after the ping
>>>>>>> pulse is complete?
>>>>>>>
>>>>>>>
>>>>>>> On Wednesday, April 23, 2014 8:51:26 AM UTC-7, Ytai wrote:
>>>>>>>
>>>>>>>> Are you using the latest firmware?
>>>>>>>> Also, cancellation is supported. Search the forum for TimerTask.
>>>>>>>>
>>>>>>>>
>>>>>>>> On Tue, Apr 22, 2014 at 10:10 PM, Vic Wintriss <[email protected]
>>>>>>>> > wrote:
>>>>>>>>
>>>>>>>>> I tried the following:
>>>>>>>>>
>>>>>>>>> public void read() throws ConnectionLostException,
>>>>>>>>> InterruptedException {
>>>>>>>>>
>>>>>>>>>  ioio.beginBatch();
>>>>>>>>>
>>>>>>>>>  leftStrobe.write(false);
>>>>>>>>>
>>>>>>>>>  leftStrobe.write(true);
>>>>>>>>>
>>>>>>>>>  leftStrobe.write(false);
>>>>>>>>>
>>>>>>>>>    leftInput = ioio.openPulseInput(LEFT_ULTRASONIC_INPUT_PIN,
>>>>>>>>>
>>>>>>>>>   PulseMode.POSITIVE);
>>>>>>>>>
>>>>>>>>>    ioio.endBatch();
>>>>>>>>>
>>>>>>>>>  leftDistance = (int) (leftInput.getDurationBuffered() * 1000000);
>>>>>>>>>
>>>>>>>>>  leftInput.close();
>>>>>>>>>
>>>>>>>>>  SystemClock.sleep(100);
>>>>>>>>>
>>>>>>>>>  dashboard.log(leftDistance + "");
>>>>>>>>>
>>>>>>>>> }
>>>>>>>>> It makes one reading and then hangs up.  How do I time out if I
>>>>>>>>> want stop waiting?
>>>>>>>>> I put the scope on the sensor and discovered that I am reading
>>>>>>>>> alternately both the trigger pulse and the echo pulse...most often the
>>>>>>>>> trigger pulse.
>>>>>>>>>
>>>>>>>>> On Tuesday, April 22, 2014 5:05:23 PM UTC-7, Ytai wrote:
>>>>>>>>>
>>>>>>>>>> No, there isn't, and even if there were, I'm not sure this will
>>>>>>>>>> actually do what you want.
>>>>>>>>>> Have you tried the hack I recommended on the previous post?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Mon, Apr 21, 2014 at 8:36 PM, Vic Wintriss <
>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>
>>>>>>>>>>> Good idea about the logic fix.  I’m redoing the interface
>>>>>>>>>>> boards, so I might add that logic.
>>>>>>>>>>> If I am, in fact, reading part of the trigger pulse, is there
>>>>>>>>>>> any way of imposing a short, predictable delay…say 50 
>>>>>>>>>>> microsecs…after the
>>>>>>>>>>> trigger pulse but before the getDuration() read?
>>>>>>>>>>>
>>>>>>>>>>> On Apr 21, 2014, at 5:12 PM, Ytai Ben-Tsvi <[email protected]>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>> 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) throwsConnectionLostException
>>>>>>>>>>>>>
>>>>>>>>>>>>> {
>>>>>>>>>>>>>
>>>>>>>>>>>>>  this.leftInput = ioio.openPulseInput(LEFT_ULTRA
>>>>>>>>>>>>> SONIC_INPUT_PIN, PulseMode.POSITIVE);
>>>>>>>>>>>>>
>>>>>>>>>>>>>  this.leftStrobe = ioio.openDigitalOutput(LEFT_ST
>>>>>>>>>>>>> ROBE_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.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 a topic
>>>>>>>>>>> in the Google Groups "ioio-users" group.
>>>>>>>>>>> To unsubscribe from this topic, visit
>>>>>>>>>>> https://groups.google.com/d/topic/ioio-users/3MDLEEKtejY/uns
>>>>>>>>>>> ubscribe.
>>>>>>>>>>>  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 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.
>>>>>>>
>>>>>>
>>>>>>  --
>>>>> 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.
>>>
>>
>>  --
> 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