[VicPiMakers Projects] Make class out of functions

Mark G. vpm at palaceofretention.ca
Sun Nov 15 23:08:53 EST 2020


Quick update:

You probably want to add unsigned in front of
all the long ints, or adjust the type as needed
(all over, including  the "const" values).


On 2020-11-15 7:13 p.m., Mark G. wrote:
> Hi George,
> 
> Here's a quick outline of an ActionTimer class.  What
> do you make of it?
> 
> Mark
> 
> 
> On 2020-11-15 6:07 p.m., George Bowden wrote:
>> I have two "identical" functions for time slicing the Arduino loop.  
>> One function is called to see if it is time to toggle the LED every 
>> second, and the other "identical" function is called to see if it is 
>> time to send a post to the website every few minutes.  These functions 
>> seem good candidates for a single C++ class, and I'm looking for some 
>> advice, never having coded a class before.  Maybe it's a coding 
>> challenge? I'm using Arduinos millis() which increments continuously 
>> and the modulus of that, with a different period value passed to the 
>> functions, to determine when to act.  When the modulus remainder is 
>> smaller than the last time through the loop, it is time to take 
>> action. (the vertical line in the stairs)
>>
>> image.png
>>
>>
>>
>> Each instance of the class needs its own static variable for the value 
>> of mod'ed millis() last time through the loop.   I would like to write 
>> a class which I instantiate with NEW for each different period, ....  
>> I would like to put these in a library that I could include in any of 
>> my projects that need time sliced
>>
>>   Here is how I have coded it as functions:
>>
>> unsigned long lastPostMillis=0;  // the value of the modulus last time 
>> through the loop.
>> unsigned long lastBlinkMillis=0;
>>
>> bool isPostTime(unsigned long int period){
>>    if(millis() % period > lastPostMillis) {
>>      lastPostMillis = millis()% period;
>>      return true;
>>    }
>>    else {
>>      lastPostMillis = millis() % period;
>>      return false;
>>    }
>> }
>> bool isBlinkTime(unsigned long int period){
>>    int blinkPeriod = 500;
>>    if(millis() % blinkPeriod > lastBlinkMillis) {
>>      lastBlinkMillis = millis()% period;
>>      return true;
>>    }
>>    else {
>>      lastBlinkMillis = millis()% period;
>>      return false;
>>    }
>> }
>> void setup() {...
>> }
>> void loop() {
>>    if (isPostTime(minutesBetweenPosts*60000)) { //time to send a Post 
>> to the website
>>    ...
>>    if(isBlinkTime(500)){
>>      toggle builtin led}
>> } // end loop
>> -- 
>> George Bowden, 250-893-7423
>> gtbowdeng at gmail.com
>> <mailto:gtbowdeng at gmail.com>
>>
> 




More information about the Projects mailing list