Hi Ytai, I got this exception
E/IOIOBaseApplicationHelper: Unexpected exception caught:java.lang.IllegalStateException: Cannot wait for pulse when module was not opened in pulse mode. at ioio.lib.impl.IncapImpl.getDurationBuffered(IncapImpl.java:112) at ioio.test.activities.FillActivity$1.loop(FillActivity.java:328) at ioio.lib.util.IOIOBaseApplicationHelper$IOIOThread.run(IOIOBaseApplicationHelper.java:67) I have initialized the flowmeter like this: PulseInput flowMeter; //in the setup() flowMeter = ioio_.openPulseInput(FLOW_METER_PIN, PulseInput.PulseMode.FREQ_SCALE_16); //in the loop() float durationBuffered = flowMeter.getDurationBuffered(); totalPulse += 16 I don't get the exception when I use getFrequencySync(), but I'd like to you getDurationBuffered() as you suggested for more detailed count. Any suggestion? On Wednesday, August 30, 2017 at 2:02:57 PM UTC+7, Maximillian wrote: > > 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]> >> 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]. >>> 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.
