Microcontrollers have timers, and a timeslice routing can be called each tick.
A way of doing an Automata is to use a countdown timer.
Musical boxes often use a rotating disk and pins pluck a note.
A clock that strikes the hour have a mechanism that is triggered and counts out the dongs.
Each value of Timer
timer1 is a variable.
each timer tick decrement it down to zero
onTimerTick?(){
if ( timer1 > 0 ){
timer1 += -1
}
if ( timer1 == 10 ){ routine0() }
if ( timer1 == 5 ){ routine2() }
if ( timer1 == 1 ){ routine2)_ }
}
Each timertick execute a line of code.
For each tick decrement by K, and increment by decimal value
Execute the next routing in the list.
Each timertick, jump through a pointer to the handler . The Handler leaves the pointer at the next routine.
onTimerTick?() switch ( timer0 ){ 10: routine(); break; 30: routine(); break; 35: routine(); break; }
}
Each timer tick a routine is run and a pointer is set to the routine called next tick.
The state is coded 1 << state | count
Use a shift register in a slow timer tick to detect edges.
// shift register edge detector for HALT button.
lastHALT = ( lastHALT + lastHALT + digitalRead( HALT ) ) & 3 ;
// edge ---___ reset waitingPauseSet?
// edge ___--- store waitingPauseSet?
// ____ increment.
switch ( lastHALT ) {
case 0: { waitingPauseSet? ++ ; break; };
case 1: {
Serial1.print( " waitingPauseSet?: " );
Serial1.print( waitingPauseSet? ); break;
};
case 2: { waitingPauseSet? = 0; break; };
default:{ }
}