adwsystems:
When I compile the program, it comes to 22804 and 1961.
We may have different versions of the libraries and the IDE.
Upon implementing... This is the same memory savings.
I'm not sure why you say 20798/1691 is the same as 20316/1468.
/dev:
And you don't need to use a TIMER, since you only set runnable flags in the ISR.
Nope. Timer stays... I still need to deal with debouncing the I2C PCF8575 and filtering the remote I2C ADCs.
Then you don't understand interrupt routines.
You cannot do I2C operations inside an interrupt routine. All you do (currently) is set flags in the ISR. Then you check them in loop. This means that you aren't handling timed operations any faster than loop can get to them.
So you might as well simply check the "timer" (aka millis()) in loop and set the same flags... as I showed in the attached file. All I did was convert the ISR into a regular routine and call it from loop.
Any chance of getting some comments on what and how you are [not using sprintf and sscanf]?
...
what is causing the String class to be included?
...
There is too much code in loop().
Did you even look at the attached file? I would suggest using a file-difference utility to compare the two files. I like WinMerge, but Compare++ looks nice.
BTW, I just tried the sscanf replacement code... this line needs "-1":
const size_t baseNameSize = sizeof(FILE_BASE_NAME)-1;
If you have specific questions about that section please ask. Much info here (that goes to strncmp_P, use the search box in the upper-right corner of the page for others).
there are many aspects, including these two, that you didn't notice aren't complete.
Objection, your honour. Requires knowing the poster's state of mind.
Cheers,
/dev