[VicPiMakers Projects] Make class out of functions
Mark G.
vpm at palaceofretention.ca
Sun Nov 15 20:08:53 PST 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