class elapsedSeconds
{
private:
unsigned long ms=0;
public:
elapsedSeconds(void) { ms = millis();}
elapsedSeconds(unsigned long val) { ms = millis() - 1000UL*val ; }
elapsedSeconds(const elapsedSeconds &orig) { ms = orig.ms; }
operator unsigned long () const { return (millis()-ms)/1000; }
elapsedSeconds & operator = (const elapsedSeconds &rhs) { ms = rhs.ms; return *this; }
elapsedSeconds & operator = (unsigned long val) { ms = millis() - val*1000UL; return *this; }
elapsedSeconds & operator -= (unsigned long val) { ms += val*1000UL ; return *this; }
elapsedSeconds & operator += (unsigned long val) { ms -= val*1000UL ; return *this; }
elapsedSeconds operator - (int val) const { elapsedSeconds r(*this); r.ms += val*1000UL; return r; }
elapsedSeconds operator - (unsigned int val) const { elapsedSeconds r(*this); r.ms += val*1000UL; return r; }
elapsedSeconds operator - (long val) const { elapsedSeconds r(*this); r.ms += val*1000UL; return r; }
elapsedSeconds operator - (unsigned long val) const { elapsedSeconds r(*this); r.ms += val*1000UL; return r; }
elapsedSeconds operator + (int val) const { elapsedSeconds r(*this); r.ms -= val*1000UL; return r; }
elapsedSeconds operator + (unsigned int val) const { elapsedSeconds r(*this); r.ms -= val*1000UL; return r; }
elapsedSeconds operator + (long val) const { elapsedSeconds r(*this); r.ms -= val*1000UL; return r; }
elapsedSeconds operator + (unsigned long val) const { elapsedSeconds r(*this); r.ms -= val*1000UL; return r; }
};
elapsedSeconds secs, secs2(40);
extern volatile unsigned long timer0_millis;
void setup() {
Serial.begin(115200);
unsigned long zero = 0, biggest = -1, second = 1000;
unsigned long rolloverSecond = biggest / 1000;
unsigned long lastSecondMs = rolloverSecond*1000;
Serial.println(biggest);
Serial.println(rolloverSecond);
Serial.println(lastSecondMs);
Serial.println( zero - rolloverSecond );
secs = 10 ; Serial.println(secs);
secs += 10 ; Serial.println(secs);
secs -= 5 ; Serial.println(secs);
secs2; Serial.println(secs2);
Serial.println();
secs = -10;
noInterrupts();
timer0_millis = zero - 10*second;
interrupts();
}
void loop() {
unsigned long now = millis();
// put your main code here, to run repeatedly:
static unsigned long lastSec = secs;
if(secs != lastSec){
lastSec = secs;
Serial.print(now);
Serial.print(" ");
Serial.print(secs);
Serial.print(" ");
Serial.print(secs2);
Serial.println();
}
if(secs == 30){
secs = 100;
secs2 = secs;
}
}