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.

Reply via email to