My theory was that the getDuration() call was coming too quickly and actually reading the end of the trigger pulse. I thought that by delaying the getDuration() a bit (or not opening it until the trigger pulse was finished) I could avoid that. Does that hypothesis sound likely to you?
Setting a threshold makes me miss a lot of readings. When the robot is moving fast, I need as many valid readings as possible. On Apr 17, 2014, at 6:54 PM, Ytai Ben-Tsvi <[email protected]> wrote: > What's with the waitForConnect()? And why are you closing the pins? > The approach you took before is OK. Why did you change it? I think the fact > that you set the threshold to 0.1us is a problem. You should set it to > whatever you think is the minimum pulse width you're ever going to get. > Also, I'd have this function simply return the result as opposed to set a > field. > > > On Thu, Apr 17, 2014 at 1:15 PM, Vic Wintriss <[email protected]> wrote: > Sorry about the Java error...very embarrassing! > Corrected the code, but still returns mostly zeroes. Tried this, but stalls > after a read or two...don't know why: > > public void read() throws ConnectionLostException, InterruptedException, > IncompatibilityException > { > ioio.beginBatch(); > leftStrobe.write(true); > leftStrobe.write(false); > leftInput = ioio.openPulseInput(LEFT_ULTRASONIC_INPUT_PIN, > PulseMode.POSITIVE); > ioio.waitForConnect(); > leftDistance = leftInput.getDuration(); > leftInput.close(); > ioio.endBatch(); > } > On Apr 16, 2014, at 4:50 PM, Ytai Ben-Tsvi <[email protected]> wrote: > >> Your local leftDistance variable is shadowing the class field... >> >> On Apr 16, 2014 3:18 PM, "Vic Wintriss" <[email protected]> wrote: >> It's not too important that we get every pulse. >> I tried the following code, but still get all zeroes: >> 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) throws >> ConnectionLostException, InterruptedException >> { >> ioio.beginBatch(); >> strobe.write(true); >> strobe.write(false); >> ioio.endBatch(); >> while (true) >> { >> float leftDistance = leftInput.getDurationBuffered(); >> if (leftDistance > .0000001) >> { >> break; >> } >> } >> } >> >> public float getLeftDistance() >> { >> return leftDistance; >> } >> } >> What should I try next? >> Thanks for the lead to the 4-pin sensors. I have ordered some...but since a >> lot of the kids already have the 3-pin versions, I'm stuck with having to >> make that work, too. >> I use use a pretty simple circuit to separate the input from the >> output...attached. >> >> Thanks for all the great help. >> >> On Apr 15, 2014, at 9:41 PM, Ytai Ben-Tsvi <[email protected]> wrote: >> >>> Yes, that's what I meant when I said that you may miss the actual pulse. >>> >>> What about the following approach: >>> beginBatch(); >>> sendPulse(); >>> endBatch(); >>> while (true) { >>> float duration = pulseIn.GetDurationBuffered(); >>> if (duration > MIN_DURATION) return duration; >>> } >>> >>> Of course, you can timeout if you want. >>> With this approach, every pulse is captured and considered, and you're >>> filtering out the really short ones that indicate the input pulses. >>> >>> BTW, there are equivalent ultrasonic range finders that have a more >>> pleasant interface (for example, analog, or similar to the one you have but >>> the feedback is on a separate pin). Here's one (available on DX for <$5): >>> http://www.micropik.com/PDF/HCSR04.pdf >>> >>> >>> >>> On Tue, Apr 15, 2014 at 7:00 PM, Vic Wintriss <[email protected]> >>> wrote: >>> Ytai: >>> >>> With the sync() call after the endBatch() and before the getDuration() the >>> program hangs up and I get no readings. >>> >>> Vic >>> >>> On Apr 15, 2014, at 5:32 PM, Ytai Ben-Tsvi <[email protected]> wrote: >>> >>>> This code doesn't have the sync() call I proposed. It should come after >>>> the batch. >>>> >>>> On Apr 15, 2014 4:43 PM, "Vic Wintriss" <[email protected]> wrote: >>>> Ytai: >>>> >>>> This code produces only 1.6875E-5...reading 2 times per second. >>>> >>>> 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) throws >>>> ConnectionLostException, InterruptedException >>>> { >>>> ioio.beginBatch(); >>>> strobe.write(true); >>>> strobe.write(false); >>>> ioio.endBatch(); >>>> this.leftDistance = input.getDurationSync(); >>>> } >>>> >>>> public float getLeftDistance() >>>> { >>>> return leftDistance; >>>> } >>>> } >>>> On Apr 15, 2014, at 4:27 PM, Ytai Ben-Tsvi <[email protected]> wrote: >>>> >>>>> Can you send me the most "correct" version of your code that demonstrates >>>>> the issue? >>>>> I can probably make the necessary changes to sync () if this is indeed a >>>>> problem. >>>>> >>>>> On Apr 15, 2014 4:03 PM, "Vic Wintriss" <[email protected]> wrote: >>>>> Thanks for the ideas. I've tried many combinations of synch, >>>>> readBuffered...etc, but unfortunately it still reads very small >>>>> numbers...probably measuring the last part of the trigger pulse. Is there >>>>> any way that I can delay the read by a couple of hundred micro seconds? >>>>> Could you do the..... sync() call "send" half inside the batch and >>>>> "wait" half outside thing? >>>>> >>>>> Thanks for all the help. The kids are trying to use these sensors for >>>>> iARoC 2014 (the International Autonomous Robot Competition) here in San >>>>> Diego. >>>>> >>>>> -- >>>>> 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 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 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 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 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.
