I guess I'll just have to use getVoltage() then.. Big thanks Ytai!
You are a lifesaver! :) On Tuesday, August 29, 2017 at 11:31:16 PM UTC+7, Ytai wrote: > > 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] > <javascript:>> 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/groups/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/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] <javascript:>. >> To post to this group, send email to [email protected] >> <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 [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.
