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]<javascript:> > > 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) throws ConnectionLostException >>>>>> >>>>>> { >>>>>> >>>>>> 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] <javascript:>. >> To post to this group, send email to [email protected]<javascript:> >> . >> 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.
