I would welcome any comments on the library both on how it is written and the functions provided so that I can improve it/fix it and possibly add to it.
Every class I've ever developed has a name that starts with a capital letter.
unsigned long _startLowPeriod;
unsigned long _startHighPeriod;
Seeing these, I went looking for the corresponding end variables. None to be seen...
So, I thought that maybe there was a reason to distinguish between the initial periods and the current periods. But, there is no way to change the periods, so I'm scratching my head about the meaning of start in the names.
byte _startState;
byte _startStartState;
There's no _startStartStartState...
I would really expect the constructor to take a pin number, and the on and off periods. I would not expect it to do anything with the data, except for storing it.
Why does the example sketch have 4 instances of the class, with only one variable to hold the current and previous count(s)? Someone will think that the current and previous variables can be used to hold all the current and previous counts.
Having an array of periods AND two scalar variables holding the same values is just asking for them to get out of sync.