Yes On Jun 22, 2016 9:47 PM, <[email protected]> wrote: > 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, <[email protected]> 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" <[email protected]> >>>> 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 <[email protected]> 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" <[email protected]> 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" <[email protected]> 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" <[email protected]> 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" <[email protected]> >>>>>>>>>> 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, <[email protected]> >>>>>>>>>>>> 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, <[email protected]> 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 < >>>>>>>>>>>>>>>> [email protected]> 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, <[email protected]> >>>>>>>>>>>>>>>>>>> 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, >>>>>>>>>>>>>>>>>>>> [email protected] 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 < >>>>>>>>>>>>>>>>>>>>>> [email protected]> 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 < >>>>>>>>>>>>>>>>>>>>>>>> [email protected]> 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 >>>>>>>>>>>>>>>>>>>>>>>>> [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 >>>>>>>>>>>>>>> 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 [email protected]. >>>>>>>>>>>>> To post to this group, send email to [email protected] >>>>>>>>>>>>> . >>>>>>>>>>>>> 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 [email protected]. >>>>>>>>>>> To post to this group, send email to [email protected]. >>>>>>>>>>> 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 [email protected]. >>>>>>>>> To post to this group, send email to [email protected]. >>>>>>>>> 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 [email protected]. >>>>>>> To post to this group, send email to [email protected]. >>>>>>> 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 [email protected]. >>>>> To post to this group, send email to [email protected]. >>>>> 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 >>>> [email protected]. >>>> >>>> To post to this group, send email to [email protected]. >>>> 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 [email protected]. >>>> To post to this group, send email to [email protected]. >>>> 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 [email protected]. >>> To post to this group, send email to [email protected]. >>> 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 [email protected]. > To post to this group, send email to [email protected]. > 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 [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/ioio-users. For more options, visit https://groups.google.com/d/optout.
