Thanks so much for the analaysis...I'll try it tomorrow and let you know...sounds like it might work!
On Saturday, April 26, 2014 8:06:53 PM UTC-7, Ytai wrote: > > OK. I think I know why it isn't working. The way the input capture > (PulseInput) works in the firmware is that a 200Hz (=5ms) timer kicks off > the captures. I've done this in order to throttle the rate of pulse > reports. So when you open a pulse input, it can take up to 5ms before it > triggers a conversion. > From looking at the ping datasheet, it is not clear whether the operation > is triggered by the rising edge or the falling edge or your pulse. If it is > the falling edge, you should be able to do something like: > > triggerHigh(); > in = openPulseInput(); > sleep(20ms); // wait until the pulse input module is ready for a pulse. > triggerLow(); // kick off a measurement (falling edge does not trigger > the pulse input) > duration = in.getDuration(); > in.close(); > return duration; > > > On Sat, Apr 26, 2014 at 5:02 PM, Vic Wintriss > <[email protected]<javascript:> > > wrote: > >> It doesn't work when I close and then reopen the input line. Can you >> recommend some tests that I can do to try and find out why it doesn't work? >> >> >> On Saturday, April 26, 2014 4:57:52 PM UTC-7, Ytai wrote: >>> >>> Yes. This is what we tried before. I'm still under the impression that >>> it should have worked but you've reported that it doesn't. >>> >>> Can I close the input while I am doing the strobe so that the input is >>> not being exposed to both pulses? >>> >>> On Saturday, April 26, 2014 4:23:51 PM UTC-7, Ytai wrote: >>>> >>>> @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. >>> >> -- >> 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.
