Search wiring.org.co:

This example is for Wiring version 1.0 build 0100+. If you have a previous version, use the examples included with your software. If you see any errors or have comments, please let us know.

LEDStateMachine by BREVIG http://alexanderbrevig.com
Use a Finite State Machine for controlling an LED This example is intended as an illustration, you should not use an FSM to control a single LED

    #include <FiniteStateMachine.h>
    #include <Button.h>
    #include <LED.h>

    const byte NUMBER_OF_STATES = 4; //how many states are we cycling through?

    //initialize states
    State On = State(ledOn);
    State Off = State(ledOff);
    State FadeIn = State(ledFadeIn);
    State FadeOut = State(ledFadeOut);

    FSM ledStateMachine = FSM(On);     //initialize state machine, start in state: On

    Button button = Button(12,BUTTON_PULLUP); //initialize the button (wire between pin 12 and ground)
    LED led = LED(11);                 //initialize the LED
    byte buttonPresses = 0;            //counter variable, hols number of button presses

    void setup(){ /*nothing to setup*/ }

    //poor example, but then again; it's just an example
    void loop()
    {
      if (button.uniquePress())
      {
        //increment buttonPresses and constrain it to [ 0, 1, 2, 3 ]
        buttonPresses = ++buttonPresses % NUMBER_OF_STATES;
        switch (buttonPresses)
        {
          case 0: ledStateMachine.transitionTo(On); break;
          case 1: ledStateMachine.transitionTo(Off); break;
          case 2: ledStateMachine.transitionTo(FadeIn); break;
          case 3: ledStateMachine.transitionTo(FadeOut); break;
        }
      }
      ledStateMachine.update();
    }

    void ledOn(){ led.on(); }
    void ledOff(){ led.off(); }
    void ledFadeIn(){ led.fadeIn(500); }
    void ledFadeOut(){ led.fadeOut(500); }