static PT_THREAD (protothread_key_state(struct pt *pt)) { PT_BEGIN(pt); while(1) { PT_YIELD_TIME_msec(30) ; press = [some port pin TRUE when pushed]; switch (PushState) { case NoPush: if (press) PushState=MaybePush; else PushState=NoPush; break; case MaybePush: if (press) { PushState=Pushed; [more code to record a digit] [or start a tone, or other event] } else PushState=NoPush; break; case Pushed: if (press) PushState=Pushed; else PushState=MaybeNoPush; break; case MaybeNoPush: if (press) PushState=Pushed; else PushState=NoPush; break; } // end case } // end while PT_END(pt); } // end thread