Analog samples get pushed from the IOIO to the Android at 1kHz (one sample every 1ms). So if you use getVoltage(), whatever sample you're getting is only a few milliseconds old (since there's some latency too). I'm guessing that for pH measurements this is completely insignificant. The *Sync version is only interesting for example in case where you want to set some output which affects the voltage you're measuring and then make sure that the reading you're getting is one that was captured after the output has been set. Doesn't seem relevant for your case.
On Tue, Aug 29, 2017 at 12:17 AM, Maximillian <[email protected]> wrote: > Hi Ytai, > > I'd like to have the pulse counting to be as accurrate as possible. > > I'm not really sure about the difference of getVoltageSync() and > getVoltage(). > > But when I use the *sync method, the method block until new sample arrive > right? > > I don't mind if i lost a few pH input. > > So in order to achieve that goal, would it be better if I use getVoltage() > rather than getVoltageSync()? > Or maybe I should try another method? > > Many thanks > > > On Tuesday, August 29, 2017 at 1:17:37 PM UTC+7, Ytai wrote: >> >> I don't think there's a lot of value in using the *Sync version. >> Otherwise it's fine, as long as you don't mind that the sample rate varies >> with the flow rate. Otherwise, create a separate thread for one or the >> other. >> >> On Aug 28, 2017 18:21, "Maximillian" <[email protected]> wrote: >> >>> Thanks a lot Ytai. >>> >>> One more thing. >>> >>> I plan to use pH sensor along with this flow sensor. >>> >>> more or less it will be like this: >>> >>> PulseInput flowMeter = ioio_.openPulseInput(FLOW_METER_PIN, PulseInput. >>> PulseMode.FREQ_SCALE_16); //using frequency measurement with 16x scaling >>> AnalogInput phMeter = ioio_.openAnalogInput(PH_METER_PIN); >>> >>> >>> float phVolt; >>> >>> int totalPulse = 0; //set initial value of totalPulse >>> >>> (this is inside the loop) >>> >>> { >>> >>> duration = flowMeter.getDurationBuffered(); //the loop will wait here >>> for 16 pulse then continue to next line >>> >>> totalPulse += 16; //add total pulse by 16 because we use FREQ_SCALE_16 >>> >>> .... >>> phVolt = phMeter.getVoltageSync(); >>> phValue = calculatePhFromVolt(phVolt); >>> >>> .... >>> >>> } >>> >>> >>> I think the phMeter will always has a value to return and will not block >>> the UI. >>> >>> Would it be an issue if combined with the PulseInput.getDurationBuffered >>> ()? >>> >>> Thanks. >>> >>> On Monday, August 28, 2017 at 9:03:16 PM UTC+7, Ytai wrote: >>>> >>>> Yup, that's what I meant. And you don't need the sleep. >>>> >>>> On Aug 28, 2017 1:21 AM, "Maximillian" <[email protected]> wrote: >>>> >>>>> Hi Ytai, thanks for the reply, >>>>> >>>>> Based from your suggestion, >>>>> >>>>> PulseInput flowMeter = ioio_.openPulseInput(FLOW_METER_PIN, >>>>> PulseInput.PulseMode.FREQ_SCALE_16); //using frequency measurement with >>>>> 16x scaling >>>>> >>>>> >>>>> int totalPulse = 0; //set initial value of totalPulse >>>>> >>>>> (this is inside the loop) >>>>> >>>>> { >>>>> >>>>> duration = flowMeter.getDurationBuffered(); //the loop will wait here >>>>> for 16 pulse then continue to next line >>>>> >>>>> totalPulse += 16; //add total pulse by 16 because we use FREQ_SCALE_16 >>>>> >>>>> .... >>>>> >>>>> .... >>>>> >>>>> Thread.sleep(100); >>>>> >>>>> } >>>>> >>>>> >>>>> Do you mean like this? >>>>> >>>>> And also, do I still need the Thread.sleep(100)? As the >>>>> getDurationBuffered() will do pause the loop while waiting for 16 >>>>> pulse to come. >>>>> >>>>> Thanks >>>>> >>>>> >>>>> do I still need to use Thread.sleep(100) when using this >>>>> implementation? Since getDurationBuffered will do pausing the loop >>>>> waiting for 16 pulse to come. >>>>> >>>>> On Monday, August 28, 2017 at 11:15:05 AM UTC+7, Ytai wrote: >>>>>> >>>>>> You can use getDurationBuffered() and apply scaling (to reduce the >>>>>> pulse rate). This will ensure you don't miss any pulses. You can even >>>>>> ignore the actual value returned, since you don't seem to care about the >>>>>> rate, but rather about the count. Each time getDurationBuffered() >>>>>> returns, >>>>>> it would mean that 16 pulses (or whatever your scaling is) were observed. >>>>>> So you'll end up with a somewhat cumbersome, yet accurate way to count >>>>>> your >>>>>> pulses. >>>>>> >>>>>> On Wed, Aug 23, 2017 at 7:39 PM, Maximillian <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> Fyi, I use this sensor. >>>>>>> https://www.seeedstudio.com/Water-Flow-Sensor-YF-B1-p-2878.html >>>>>>> >>>>>>> >>>>>>> On Thursday, August 24, 2017 at 9:38:08 AM UTC+7, Maximillian wrote: >>>>>>>> >>>>>>>> I think I could get around ~40 pulse per each call of flowMeter. >>>>>>>> getFrequencySync() in a Thread.sleep(100) loop. >>>>>>>> >>>>>>>> Is it still unsafe to just use the getFrequencySync() method for >>>>>>>> that amount of pulse? >>>>>>>> >>>>>>>> Or maybe I can just lower the sleep time to maybe Thread.sleep(50) >>>>>>>> for better accuracy? >>>>>>>> >>>>>>>> Thanks for the hint, I'll try to look into that. >>>>>>>> >>>>>>>> >>>>>>>> On Thursday, August 24, 2017 at 6:18:52 AM UTC+7, Ytai wrote: >>>>>>>>> >>>>>>>>> What's the maximum pulse rate for your application? >>>>>>>>> >>>>>>>>> On Wed, Aug 23, 2017 at 3:36 PM, Maximillian <[email protected] >>>>>>>>> > wrote: >>>>>>>>> >>>>>>>>>> Can you give more hint about how to count? >>>>>>>>>> >>>>>>>>>> I'm not really sure how to do it. >>>>>>>>>> >>>>>>>>>> Big thanks >>>>>>>>>> >>>>>>>>>> On Wednesday, August 23, 2017 at 11:56:20 PM UTC+7, Ytai wrote: >>>>>>>>>>> >>>>>>>>>>> Sampling the frequency and integrating will give you an estimate >>>>>>>>>>> of the total. If it's not accurate enough, you'll need to count. >>>>>>>>>>> >>>>>>>>>>> On Aug 22, 2017 2:51 PM, "Maximillian" <[email protected]> >>>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi Ytai, >>>>>>>>>>>> >>>>>>>>>>>> This is my current code (trimmed for this post) >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> int FLOW_METER_PIN = 14; >>>>>>>>>>>> >>>>>>>>>>>> volatile float pulseFreq, totalPulse; >>>>>>>>>>>> >>>>>>>>>>>> PulseInput flowMeter = ioio_.openPulseInput(FLOW_METER_PIN, >>>>>>>>>>>> PulseInput.PulseMode.FREQ); >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> totalPulse = 0; >>>>>>>>>>>> >>>>>>>>>>>> public void loop() throws ConnectionLostException, >>>>>>>>>>>> InterruptedException >>>>>>>>>>>> { >>>>>>>>>>>> >>>>>>>>>>>> pulseFreq = flowMeter.getFrequencySync(); >>>>>>>>>>>> totalPulse += pulseFreq; >>>>>>>>>>>> //display totalPulse value to a textView; >>>>>>>>>>>> >>>>>>>>>>>> Thread.sleep(100); >>>>>>>>>>>> } >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Current behavior is already as I expected, the totalPulse >>>>>>>>>>>> textView will updated only when the hall sensor is spinning >>>>>>>>>>>> (flow detected) >>>>>>>>>>>> >>>>>>>>>>>> If I use the getFrequencySync() method, I think the loop is >>>>>>>>>>>> paused, waiting the flowMeter to receive input. >>>>>>>>>>>> >>>>>>>>>>>> If it received input, the totalPulse will increase by the >>>>>>>>>>>> amount of pulseFreq from getFrequencySync(). >>>>>>>>>>>> >>>>>>>>>>>> I haven't tested with real water yet (I just blow the flow >>>>>>>>>>>> sensor to make the hall spin for early development test) >>>>>>>>>>>> >>>>>>>>>>>> My question, is it correct to use this approach with the >>>>>>>>>>>> getFrequencySync() method? >>>>>>>>>>>> Or I still need to hack the DigitalInputImpl to count the >>>>>>>>>>>> pulses? >>>>>>>>>>>> >>>>>>>>>>>> Thanks >>>>>>>>>>>> >>>>>>>>>>>> On Wednesday, August 23, 2017 at 4:18:28 AM UTC+7, Ytai wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> It is known, but there isn't currently a plan to add it. If >>>>>>>>>>>>> anyone wants to contribute a patch, I will happily consider >>>>>>>>>>>>> adopting it. >>>>>>>>>>>>> >>>>>>>>>>>>> On Aug 13, 2017 8:21 PM, "Maximillian" <[email protected]> >>>>>>>>>>>>> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Is this still a known missing feature? As this post is from >>>>>>>>>>>>>> 2013.. I need to use flow sensor as well.. >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Monday, September 9, 2013 at 10:31:46 AM UTC+7, Ytai wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> This is known missing feature. You can work around this by >>>>>>>>>>>>>>> hacking DigitalInputImpl to count the pulses: its setValue() >>>>>>>>>>>>>>> method will >>>>>>>>>>>>>>> get called on every edge. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Fri, Sep 6, 2013 at 11:21 AM, jorge sb < >>>>>>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Hi. I want to connect a hall sensor flow meter to ioio. >>>>>>>>>>>>>>>> Perhaps, I could use "PulseInput" but after reading >>>>>>>>>>>>>>>> ioio-wiki, I see that I can't do it with it. >>>>>>>>>>>>>>>> Really, I need a simple pulse counter but without loosing >>>>>>>>>>>>>>>> any pulse. >>>>>>>>>>>>>>>> With flow meter I will like to get: >>>>>>>>>>>>>>>> - Total liquid flow (accumulated countered pulses) >>>>>>>>>>>>>>>> - Instant flow (reading difference between two counts in a >>>>>>>>>>>>>>>> measured time). >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> With this sensor I could get a pulse every 50 msec or less >>>>>>>>>>>>>>>> at max rate. >>>>>>>>>>>>>>>> I think I could loose pulses doing periodic read of digital >>>>>>>>>>>>>>>> input. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Some suggestion. >>>>>>>>>>>>>>>> Thanks. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>> 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/grou >>>>>>>>>>>>>>>> ps/opt_out. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> -- >>>>>>>>>>>>>> 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/grou >>>>>>>>>>>>>> p/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 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.
