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) 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/to >>>>> pic/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.
