Is ioio.sync() in the latest versions?

On Wednesday, June 22, 2016 at 9:36:41 PM UTC-7, Ytai wrote:
>
> 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.wi...@jointheleague.org 
> <javascript:>> 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+...@googlegroups.com <javascript:>.
>> To post to this group, send email to ioio-...@googlegroups.com 
>> <javascript:>.
>> 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