You can check the release notes page on the wiki. I strongly recommend against using old versions of the library.
On Wed, Jun 22, 2016 at 9:58 AM, <vic.wintr...@jointheleague.org> wrote: > It's iARoC time again, and we are having ultrasonic problems again! This > year I am using only 4-pin sensors like you recommend and OTG. > I can't find any of the ioio.sync() methods. What version of the ioiolib > are they in? All the robots have 3 or 4 ultrasonic sensors. > > On Tuesday, April 12, 2016 at 3:09:22 PM UTC-7, Ytai wrote: >> >> Because there's no guarantee hour long it would take between when your >> command executed on the Android and when the actual pin voltage changes. >> What you're seeing when having a short (or no) delay between the commands >> is that sometimes they would end up actually getting executed a very short >> gap between them. >> Coming to think of it, if you only care about minimum duration, you can >> add a ioio.sync() call after starting the pulse and before starting the >> delay. This will guarantee that the delay begins after the pin has already >> been set. This will allow you to set a 1ms sleep without the pulse >> collapsing, but no guarantees on maximum width, it may come out wider than >> 1ms. >> On Apr 12, 2016 3:02 PM, "Vic Wintriss" <vic.wi...@jointheleague.org> >> wrote: >> >> Ytai: >> >> Why can’t I use: >> >> strobe.write(true); >> strobe.write(false); >> input.getDuration(); >> >> Vic >> >> >> On Apr 12, 2016, at 2:57 PM, Ytai Ben-Tsvi <yta...@gmail.com> wrote: >> >> Good question. Currently the only way to ensure this level of sync is the >> motion control API. Alternatively, if your time constants are coarse >> enough, you can open multiple PWM channels running at slow rates and insert >> delays between the open command (order of 10's of ms as you have seen with >> your experiments). The ideal solution would have been a one-shot function, >> which is easy to implement using an output compare module, but this doesn't >> currently exist. >> On Apr 12, 2016 11:07, "Vic Wintriss" <wint...@gmail.com> wrote: >> >>> How would you work the PWM with multiple sensors? >>> >>> On Tuesday, April 12, 2016 at 10:54:34 AM UTC-7, Ytai wrote: >>>> >>>> No threads involved and nothing asynchronous. You set the PWM once >>>> during setup(), then you getDuration() whenever you please. >>>> On Apr 12, 2016 10:52 AM, "Vic Wintriss" <wint...@gmail.com> wrote: >>>> >>>>> I would rather run the ultrasonics asynchronously. Also since the >>>>> kids may not be be that advanced in our curriculum I prefer to stay away >>>>> from threads. The last code that I posted works fine. >>>>> >>>>> On Tuesday, April 12, 2016 at 10:37:52 AM UTC-7, Ytai wrote: >>>>>> >>>>>> Use PWM output to generate periodic, precisely timed trigger pulses. >>>>>> On Apr 12, 2016 10:36, "Vic Wintriss" <wint...@gmail.com> wrote: >>>>>> >>>>>>> I thought I was following your instructions. I am using the 4-pin >>>>>>> sensor as suggested and code that I thought was standard. What did you >>>>>>> tell me to do that I am not doing? >>>>>>> >>>>>>> On Monday, April 11, 2016 at 1:28:48 PM UTC-7, Ytai wrote: >>>>>>>> >>>>>>>> I feel like I gave you my best advice, but you seem to insist on >>>>>>>> doing it in a way that's not supposed to work. >>>>>>>> On Apr 11, 2016 1:03 PM, "Vic Wintriss" <wint...@gmail.com> wrote: >>>>>>>> >>>>>>>>> When I use this code: >>>>>>>>> >>>>>>>>> ioio.beginBatch(); >>>>>>>>> rightStrobe.write(true); >>>>>>>>> rightStrobe.write(false); >>>>>>>>> ioio.endBatch(); >>>>>>>>> >>>>>>>>> I get this beautiful result: >>>>>>>>> >>>>>>>>> >>>>>>>>> <https://lh3.googleusercontent.com/-qyhO2zqtmoY/VwwBnL2vE7I/AAAAAAAAAAg/xyOLBnQBnuIvFhdp0IdprRb_qVvx6Hckw/s1600/bad.PNG> >>>>>>>>> >>>>>>>>> >>>>>>>>> But the code hangs up and I get no duration readings. >>>>>>>>> >>>>>>>>> If I use this code: >>>>>>>>> >>>>>>>>> rightStrobe.write(true); >>>>>>>>> SystemClock.sleep(10); >>>>>>>>> rightStrobe.write(false); >>>>>>>>> >>>>>>>>> rightDistance = (int) (rightInput.getDuration() * >>>>>>>>> CONVERSION_FACTOR); >>>>>>>>> I get this awful situation, but it works. Anything less than a 10 >>>>>>>>> millisec sleep fails. >>>>>>>>> >>>>>>>>> >>>>>>>>> <https://lh3.googleusercontent.com/-WEm_XYa5PF8/VwwBBYuVQ9I/AAAAAAAAAAY/15jv4SAWC3ouxIcAW9EyO7GC-SEZgtSZA/s1600/works.png> >>>>>>>>> >>>>>>>>> On Monday, April 4, 2016 at 9:25:36 PM UTC-7, Ytai wrote: >>>>>>>>>> >>>>>>>>>> Sorry, I meant "output" from the IOIO's point of view. >>>>>>>>>> Let me make sure I understand you correctly: are you claiming >>>>>>>>>> that you're emitting a shorter-than-10-ms trigger pulse, the pulse >>>>>>>>>> gets >>>>>>>>>> emitted correctly as verified by a scope, the echo pulse gets emitted >>>>>>>>>> correctly as verified by a scope, but your app is blocked >>>>>>>>>> on waitPulseGetDuration()? If that's the case, the only thing I can >>>>>>>>>> imagine >>>>>>>>>> is that the wait*() method is called after the pulse has already >>>>>>>>>> comes back. >>>>>>>>>> >>>>>>>>>> Have you considered using PwmOutput as trigger, as per my >>>>>>>>>> suggestion? Then you can use getDuration() and never have to block. >>>>>>>>>> I think >>>>>>>>>> this is a rather elegant solution. >>>>>>>>>> >>>>>>>>>> On Mon, Apr 4, 2016 at 10:51 AM, <vic.wi...@jointheleague.org> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> The output pulse (echo pulse returning from the ultrasonic >>>>>>>>>>> sensor) is correct...it is milli secs long and varies >>>>>>>>>>> proportionately with >>>>>>>>>>> the distance. I am not using Bluetooth...the Android is directly >>>>>>>>>>> connected >>>>>>>>>>> to the ioio board. It is the trigger pulse that must be >>>>>>>>>>> long...more than >>>>>>>>>>> 10 millisec...for the program to run. It hangs up with smaller >>>>>>>>>>> trigger >>>>>>>>>>> pulses. I can easily generate 10 microsec trigger pulses...as >>>>>>>>>>> observed on >>>>>>>>>>> scope...but then the program hangs up. Ideas? >>>>>>>>>>> >>>>>>>>>>> On Friday, April 1, 2016 at 9:55:17 PM UTC-7, Ytai wrote: >>>>>>>>>>>> >>>>>>>>>>>> When you look at the waveforms, what do you see as the output >>>>>>>>>>>> pulse? My guess would be that it is very narrow, in the order of a >>>>>>>>>>>> couple >>>>>>>>>>>> of usec perhaps, and if that's indeed the case, it is likely >>>>>>>>>>>> because both >>>>>>>>>>>> messages comprising the pulse got collapsed into the same packet >>>>>>>>>>>> over one >>>>>>>>>>>> of the slower connections such as Bluetooth. In short, trying to >>>>>>>>>>>> achieve >>>>>>>>>>>> precise timing of any sort at this time scale is a bad idea. It >>>>>>>>>>>> would be >>>>>>>>>>>> possible to add a one-shot feature to the IOIO to achieve that. If >>>>>>>>>>>> you want >>>>>>>>>>>> this reading periodically, consider using a PwmOutput to keep >>>>>>>>>>>> triggering >>>>>>>>>>>> the sensor without your intervention at very precise pulse widths >>>>>>>>>>>> and >>>>>>>>>>>> period. Another option would be to use a version of those sensors >>>>>>>>>>>> that >>>>>>>>>>>> emits an analog voltage corresponding to the distance. >>>>>>>>>>>> On Apr 1, 2016 9:38 PM, <vic.wi...@jointheleague.org> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> It's a new iARoC (International Autonomous Robot Competition) >>>>>>>>>>>>> year (2016) and we are back to the ultrasonic sensor problem. >>>>>>>>>>>>> This year I >>>>>>>>>>>>> am using the 4-pin version. The following code works: >>>>>>>>>>>>> >>>>>>>>>>>>> public void readRight() throws ConnectionLostException, >>>>>>>>>>>>> InterruptedException >>>>>>>>>>>>> {//This code works with the 4-pin sensor...don't change >>>>>>>>>>>>> anything! >>>>>>>>>>>>> rightStrobe.write(true); >>>>>>>>>>>>> SystemClock.*sleep*(10); >>>>>>>>>>>>> rightStrobe.write(false); >>>>>>>>>>>>> rightDistance = (int) (rightInput.getDuration() * >>>>>>>>>>>>> *CONVERSION_FACTOR*); >>>>>>>>>>>>> } >>>>>>>>>>>>> >>>>>>>>>>>>> But it will not work with less than a 10 ms long trigger >>>>>>>>>>>>> pulse. I don't understand this, because the ultrasonic sensor >>>>>>>>>>>>> spec says >>>>>>>>>>>>> that the trigger pulse should be around 10 micro sec. Do you >>>>>>>>>>>>> have any idea >>>>>>>>>>>>> why I need such a long trigger pulse. I verified the waveforms >>>>>>>>>>>>> with a >>>>>>>>>>>>> scope. It seems to be the case with both the 4-pin and the 3-pin >>>>>>>>>>>>> version. >>>>>>>>>>>>> >>>>>>>>>>>>> On Thursday, April 23, 2015 at 9:43:50 PM UTC-7, Ytai wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>> You can add a TimerTask to interrupt the thread after some >>>>>>>>>>>>>> timeout. Search the forum for examples if you need them. If you >>>>>>>>>>>>>> don't want >>>>>>>>>>>>>> to delay all the other 5 if one is stuck you can easily run 6 >>>>>>>>>>>>>> sensors on 6 >>>>>>>>>>>>>> different threads. >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Wed, Apr 22, 2015 at 2:42 PM, Daniel Brown < >>>>>>>>>>>>>> mr....@gmail.com> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> if one PulseInput pin is open or has not received a pulse >>>>>>>>>>>>>>> and you call getDuration() it will block you from reading all >>>>>>>>>>>>>>> other PulseInput pins until it has received at least one pulse. >>>>>>>>>>>>>>> We have >>>>>>>>>>>>>>> found that one bad sensor will stop you from reading any other >>>>>>>>>>>>>>> sensor. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Friday, April 10, 2015 at 6:59:52 PM UTC-6, Daniel Brown >>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> We have a project that uses 6 distance finders, when we >>>>>>>>>>>>>>>> try to call .getDuration() on more then one all further >>>>>>>>>>>>>>>> reading freezes. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> protected void setup() throws ConnectionLostException { >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> // front left pulse and echo >>>>>>>>>>>>>>>> echoPinfl_ = ioio_.openPulseInput(6, PulseMode.POSITIVE); >>>>>>>>>>>>>>>> triggerPinfl_ = ioio_.openDigitalOutput(7); >>>>>>>>>>>>>>>> // front middle pulse and echo >>>>>>>>>>>>>>>> echoPinfm_ = ioio_.openPulseInput(2, PulseMode.POSITIVE); >>>>>>>>>>>>>>>> triggerPinfm_ = ioio_.openDigitalOutput(4); >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> ... >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> public void loop() throws ConnectionLostException, >>>>>>>>>>>>>>>> InterruptedException { >>>>>>>>>>>>>>>> // updates front left sensor >>>>>>>>>>>>>>>> try{ >>>>>>>>>>>>>>>> triggerPinfl_.write(false); >>>>>>>>>>>>>>>> Thread.sleep(5); >>>>>>>>>>>>>>>> triggerPinfl_.write(true); >>>>>>>>>>>>>>>> Thread.sleep(1); >>>>>>>>>>>>>>>> triggerPinfl_.write(false); >>>>>>>>>>>>>>>> echosecondsfl_ = (int)(echoPinfl_.getDuration() * 1000 * >>>>>>>>>>>>>>>> 1000); >>>>>>>>>>>>>>>> echoDistanceCmfl_ = echosecondsfl_ / 29 / 2; >>>>>>>>>>>>>>>> }catch (ConnectionLostException e) { throw e;} >>>>>>>>>>>>>>>> // updates front middle sensor >>>>>>>>>>>>>>>> try{ >>>>>>>>>>>>>>>> triggerPinfm_.write(false); >>>>>>>>>>>>>>>> Thread.sleep(5); >>>>>>>>>>>>>>>> triggerPinfm_.write(true); >>>>>>>>>>>>>>>> Thread.sleep(1); >>>>>>>>>>>>>>>> triggerPinfm_.write(false); >>>>>>>>>>>>>>>> // echosecondsfm_ = (int)(echoPinfm_.getDuration() * 1000 >>>>>>>>>>>>>>>> * 1000); //if this line is commented in all further input >>>>>>>>>>>>>>>> stops >>>>>>>>>>>>>>>> // echoDistanceCmfm_ = echosecondsfm_ / 29 / 2; >>>>>>>>>>>>>>>> }catch (ConnectionLostException e) { throw e;} >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> ... >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> On Friday, May 16, 2014 at 11:03:20 AM UTC-6, Ytai wrote: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Thanks for sharing! >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On Thu, May 15, 2014 at 9:25 PM, <v...@wintrisstech.org> >>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Here is some code that works great with the Parallax >>>>>>>>>>>>>>>>>> Ping))) with the circuit in the file attached (thanks to >>>>>>>>>>>>>>>>>> Ytai): >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> private int read(DigitalOutput strobe, PulseInput input, int >>>>>>>>>>>>>>>>>> inputPin) throws ConnectionLostException, >>>>>>>>>>>>>>>>>> InterruptedException // Order of following statements is >>>>>>>>>>>>>>>>>> very important...do not change >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> { >>>>>>>>>>>>>>>>>> int distance = 0; >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> ioio.beginBatch(); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> strobe.write(true); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> input = ioio.openPulseInput(inputPin, >>>>>>>>>>>>>>>>>> PulseMode.POSITIVE); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> ioio.endBatch(); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SystemClock.sleep(40); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> strobe.write(false); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> distance += (int) (input.getDuration() * >>>>>>>>>>>>>>>>>> CONVERSION_FACTOR); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> input.close(); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> return distance; >>>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> On Wednesday, April 30, 2014 10:25:27 AM UTC-7, >>>>>>>>>>>>>>>>>> v...@wintrisstech.org wrote: >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> I'll clean up the class and post it. Hope other people >>>>>>>>>>>>>>>>>>> can use it. Works very solidly with the Parallax Ping))) >>>>>>>>>>>>>>>>>>> ultrasonic module. >>>>>>>>>>>>>>>>>>> Great suggestion to use only one pin for both input and >>>>>>>>>>>>>>>>>>> output. It would even have saved me a part on the pc >>>>>>>>>>>>>>>>>>> boards. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> On Sunday, April 27, 2014 8:24:19 PM UTC-7, Ytai wrote: >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Cool. If you can create a nice class for using the PING >>>>>>>>>>>>>>>>>>>> (where the ctor gets a IOIO and two pin numbers, and >>>>>>>>>>>>>>>>>>>> there's a >>>>>>>>>>>>>>>>>>>> getDistance() method) and share it on this forum, it would >>>>>>>>>>>>>>>>>>>> be a decent >>>>>>>>>>>>>>>>>>>> return for our efforts :) As a side note, since you're >>>>>>>>>>>>>>>>>>>> doing the open-close >>>>>>>>>>>>>>>>>>>> trick, you might as well use a single pin and open-close >>>>>>>>>>>>>>>>>>>> the digital output >>>>>>>>>>>>>>>>>>>> as well and not need the driver chip, so you can even >>>>>>>>>>>>>>>>>>>> further simplify both >>>>>>>>>>>>>>>>>>>> your code and your circuit. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> On Sun, Apr 27, 2014 at 8:19 PM, Vic Wintriss < >>>>>>>>>>>>>>>>>>>> vic.wi...@gmail.com> wrote: >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> I finally got it to work using your last suggestion. >>>>>>>>>>>>>>>>>>>>> This code works that you recommended works perfectly. >>>>>>>>>>>>>>>>>>>>> Thanks so much for >>>>>>>>>>>>>>>>>>>>> sticking with us. We've got 30 or 40 kids using this >>>>>>>>>>>>>>>>>>>>> code at the >>>>>>>>>>>>>>>>>>>>> International Autonomous Robot Competition (iARoC 2014) >>>>>>>>>>>>>>>>>>>>> coming up at the >>>>>>>>>>>>>>>>>>>>> end of June. Check out iaroc.org. >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> 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 Sunday, April 27, 2014 11:36:53 AM UTC-7, Ytai >>>>>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Let me shed some light on the internals of PulseInput: >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> - A timer is running on the IOIO set to 200Hz >>>>>>>>>>>>>>>>>>>>>> (5ms). >>>>>>>>>>>>>>>>>>>>>> - As soon as the pulse input module is opened, >>>>>>>>>>>>>>>>>>>>>> and every time after a pulse is captured the module >>>>>>>>>>>>>>>>>>>>>> will be put in the >>>>>>>>>>>>>>>>>>>>>> "ready" state. >>>>>>>>>>>>>>>>>>>>>> - Every time the 200Hz timer triggers, each >>>>>>>>>>>>>>>>>>>>>> "ready" module will be activated, i.e. put in a state >>>>>>>>>>>>>>>>>>>>>> where it is waiting >>>>>>>>>>>>>>>>>>>>>> for a new pulse. >>>>>>>>>>>>>>>>>>>>>> - Once activated, the module will wait forever >>>>>>>>>>>>>>>>>>>>>> (or until closed) for a pulse, then measure its >>>>>>>>>>>>>>>>>>>>>> duration, then sends the >>>>>>>>>>>>>>>>>>>>>> result to the Android. >>>>>>>>>>>>>>>>>>>>>> - So this means that effectively no matter what >>>>>>>>>>>>>>>>>>>>>> the actual pulse rate is, you will never get more >>>>>>>>>>>>>>>>>>>>>> than 200 reports per >>>>>>>>>>>>>>>>>>>>>> second. This has been done on purpose to prevent a >>>>>>>>>>>>>>>>>>>>>> high frequency pulse >>>>>>>>>>>>>>>>>>>>>> train from saturating the connection between the IOIO >>>>>>>>>>>>>>>>>>>>>> and the Android. This >>>>>>>>>>>>>>>>>>>>>> also means that there is a potential "dead time" of >>>>>>>>>>>>>>>>>>>>>> up to 5ms after opening >>>>>>>>>>>>>>>>>>>>>> or between pulses, during which a pulse would not be >>>>>>>>>>>>>>>>>>>>>> detected. >>>>>>>>>>>>>>>>>>>>>> - On the Android side, every pulse report finds >>>>>>>>>>>>>>>>>>>>>> its way to your PulseInput object. You can then read >>>>>>>>>>>>>>>>>>>>>> it in one of three >>>>>>>>>>>>>>>>>>>>>> ways: >>>>>>>>>>>>>>>>>>>>>> - getDuration() will return the last report. >>>>>>>>>>>>>>>>>>>>>> It will generally not block, then only exception >>>>>>>>>>>>>>>>>>>>>> is until the first report >>>>>>>>>>>>>>>>>>>>>> arrives. >>>>>>>>>>>>>>>>>>>>>> - getDurationSync() will always block until a >>>>>>>>>>>>>>>>>>>>>> new report comes in, then return it. So you can be >>>>>>>>>>>>>>>>>>>>>> sure that the report is >>>>>>>>>>>>>>>>>>>>>> new. >>>>>>>>>>>>>>>>>>>>>> - getDurationBuffered() pulls pulses one by >>>>>>>>>>>>>>>>>>>>>> one from a queue. When the queue becomes empty it >>>>>>>>>>>>>>>>>>>>>> behave like >>>>>>>>>>>>>>>>>>>>>> getDurationSync(), i.e. waits until a new report >>>>>>>>>>>>>>>>>>>>>> comes in. >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> The Arduino approach cannot be directly applied to >>>>>>>>>>>>>>>>>>>>>> the IOIO API, since you have to take into account that >>>>>>>>>>>>>>>>>>>>>> because of the >>>>>>>>>>>>>>>>>>>>>> communication between the Android and the IOIO, much of >>>>>>>>>>>>>>>>>>>>>> the IOIO API has >>>>>>>>>>>>>>>>>>>>>> been designed to be asynchronous in nature. If you were >>>>>>>>>>>>>>>>>>>>>> to bake the PING >>>>>>>>>>>>>>>>>>>>>> driver directly into the IOIO firmware, you can use a >>>>>>>>>>>>>>>>>>>>>> similar approach to >>>>>>>>>>>>>>>>>>>>>> Arduino's (although you'd probably want to implement it >>>>>>>>>>>>>>>>>>>>>> in a non-blocking >>>>>>>>>>>>>>>>>>>>>> way, since the IOIO allows everything to be used >>>>>>>>>>>>>>>>>>>>>> concurrently). The reason >>>>>>>>>>>>>>>>>>>>>> why I have not done that is because I tried to focus on >>>>>>>>>>>>>>>>>>>>>> generic use-cases >>>>>>>>>>>>>>>>>>>>>> rather than on one peculiar sensor interface. >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> On Sun, Apr 27, 2014 at 10:57 AM, Duane DeSieno < >>>>>>>>>>>>>>>>>>>>>> surfe...@gmail.com> wrote: >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> My confusion is maybe over the way getDuration >>>>>>>>>>>>>>>>>>>>>>> works. >>>>>>>>>>>>>>>>>>>>>>> Does it delay 5ms before looking for the pulse or >>>>>>>>>>>>>>>>>>>>>>> does it look immediately? >>>>>>>>>>>>>>>>>>>>>>> I put 555 timer on the input pin and set it up for >>>>>>>>>>>>>>>>>>>>>>> 3.15hz and 25.4% duty cycle or an 80.6ms pulse every >>>>>>>>>>>>>>>>>>>>>>> 317.4ms. >>>>>>>>>>>>>>>>>>>>>>> I called getDuration roughly every 100ms. It did >>>>>>>>>>>>>>>>>>>>>>> not block and returned the same value several times >>>>>>>>>>>>>>>>>>>>>>> before the next pulse >>>>>>>>>>>>>>>>>>>>>>> occurred(not what I expected). >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> Looked at the Arduino approach to using the PING and >>>>>>>>>>>>>>>>>>>>>>> they use just one pin, changing from output after >>>>>>>>>>>>>>>>>>>>>>> sending a pulse to ping >>>>>>>>>>>>>>>>>>>>>>> to an input for their get duration call. >>>>>>>>>>>>>>>>>>>>>>> Since they don't impose a 5ms delay, they get the >>>>>>>>>>>>>>>>>>>>>>> duration of the return pulse. >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> Thanks for you help on this. >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> Duane >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>>>>>>>> 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 ioio-users+...@ >>>>>>>>>>>>>>>>>>>>>>> googlegroups.com. >>>>>>>>>>>>>>>>>>>>>>> To post to this group, send email to >>>>>>>>>>>>>>>>>>>>>>> ioio-...@googlegroups.com. >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> 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 >>>>>>>>>>>>>>>>>>>>> ioio-users+...@googlegroups.com. >>>>>>>>>>>>>>>>>>>>> To post to this group, send email to >>>>>>>>>>>>>>>>>>>>> ioio-...@googlegroups.com. >>>>>>>>>>>>>>>>>>>>> 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 ioio-users+...@googlegroups.com >>>>>>>>>>>>>>>>>> . >>>>>>>>>>>>>>>>>> To post to this group, send email to >>>>>>>>>>>>>>>>>> ioio-...@googlegroups.com. >>>>>>>>>>>>>>>>>> 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 ioio-users+...@googlegroups.com. >>>>>>>>>>>>>>> To post to this group, send email to >>>>>>>>>>>>>>> ioio-...@googlegroups.com. >>>>>>>>>>>>>>> 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 ioio-users+...@googlegroups.com. >>>>>>>>>>>>> To post to this group, send email to ioio-...@googlegroups.com >>>>>>>>>>>>> . >>>>>>>>>>>>> Visit this group at https://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 ioio-users+...@googlegroups.com. >>>>>>>>>>> To post to this group, send email to ioio-...@googlegroups.com. >>>>>>>>>>> Visit this group at https://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 ioio-users+...@googlegroups.com. >>>>>>>>> To post to this group, send email to ioio-...@googlegroups.com. >>>>>>>>> Visit this group at https://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 ioio-users+...@googlegroups.com. >>>>>>> To post to this group, send email to ioio-...@googlegroups.com. >>>>>>> Visit this group at https://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 ioio-users+...@googlegroups.com. >>>>> To post to this group, send email to ioio-...@googlegroups.com. >>>>> Visit this group at https://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 ioio-users+...@googlegroups.com. >>> To post to this group, send email to ioio-...@googlegroups.com. >>> Visit this group at https://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 >> ioio-users+...@googlegroups.com. >> >> To post to this group, send email to ioio-...@googlegroups.com. >> Visit this group at https://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 ioio-users+...@googlegroups.com. >> To post to this group, send email to ioio-...@googlegroups.com. >> Visit this group at https://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 ioio-users+unsubscr...@googlegroups.com. > To post to this group, send email to ioio-users@googlegroups.com. > Visit this group at https://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 ioio-users+unsubscr...@googlegroups.com. To post to this group, send email to ioio-users@googlegroups.com. Visit this group at https://groups.google.com/group/ioio-users. For more options, visit https://groups.google.com/d/optout.