https://groups.google.com/d/msg/ioio-users/B6dTfB2scpI/b0o8Q15SEwgJ


On Fri, Apr 25, 2014 at 3:09 PM, Vic Wintriss <[email protected]>wrote:

> Could you give me a simple example of how to interrupt getDuration(). I
> checked the TimerTask forum, but am not sure that I understand. I assume
> that getDuration() is blocking.
>
>
> 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_ULTRASONIC_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) 
>>>>>>>>>>> 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 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 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