-
Notifications
You must be signed in to change notification settings - Fork 63
Tips & tricks & pitfalls
Tinkerspy edited this page May 25, 2016
·
17 revisions
Atm_led led1;
led1.begin( 3 ).blink( 25, 500, 5 ).trigger( led1.EVT_BLINK );
while ( led1.cycle().state() );
You can easily combine a timer with a counter to achieve longer delays than the millis maximum of 49.7 days even within one state. A timer expiry switches the state back to itself while the counter is decremented in the ON_ENTER handler. That way the state refreshes its timer long before a second millis() rollover could occur.
To achieve a full year delay you could combine 86,400,000 (number of milliseconds in a day) as a timer value with 365 as a counter value and the machine would stay in that state for (about) a year.
Such a machine's begin function could look like this:
static const state_t state_table[] PROGMEM = {
/* ON_ENTER ON_LOOP ON_EXIT EVT_START EVT_TIMER EVT_COUNTER ELSE */
/* IDLE */ ACT_INIT, ATM_SLEEP, -1, WAIT, -1, -1, -1,
/* WAIT */ ACT_COUNT, -1, -1, -1, WAIT, FINISH, -1,
/* FINISH */ ACT_FINISH, -1, -1, -1, -1, -1, IDLE,
};
timer.begin( this, 86400000 );
counter.set( 365 );
Taking the counter value up to the maximum 65534 would give you about 179 years.