Ayuda con programa (novato)

Soy nuevo en esto de la programacion, he estado viendo algunos ejemplos basicos de arduino, como el Led-Blink y Led-Boton, mi idea es hacer una luz sencilla para mi bicicleta que haga lo siguiente:

1.- Presionar boton.
2.- Enciende un led.
3.- Presionar de nuevo el boton.
4.- El led cambia a modo intermitente.
5.- Presionar de nuevo el boton.
6.- El led cambia a modo estrobo.
7.- Presionar de nuevo el boton.
8.- El led se apaga.

Lo que no tengo claro es como hacer que al presionar el boton cambie al siguiente modo, espero me puedan ayudar.

Saludos!

Modificando un programa llamado "Contador" en los ejemplos de arduino logre que cambiara el modo de encender del led, pero tengo que presionar varias veces el boton para lograrlo, quisiera que cambiara de modo con solo presionar una vez el boton.
Espero me puedan ayudar.
Saludos!

Codigo:

/*
State change detection (edge detection)

Often, you don't need to know the state of a digital input all the time,
but you just need to know when the input changes from one state to another.
For example, you want to know when a button goes from OFF to ON. This is called
state change detection, or edge detection.

This example shows how to detect when a button or button changes from off to on
and on to off.

The circuit:

  • pushbutton attached to pin 2 from +5V
  • 10K resistor attached to pin 2 from ground
  • LED attached from pin 13 to ground (or use the built-in LED on
    most Arduino boards)

created 27 Sep 2005
modified 30 Aug 2011
by Tom Igoe

This example code is in the public domain.

http://arduino.cc/en/Tutorial/ButtonStateChange

*/

// this constant won't change:
const int buttonPin = 2; // the pin that the pushbutton is attached to
const int ledPin = 13; // the pin that the LED is attached to

// Variables will change:
int buttonPushCounter = 0; // counter for the number of button presses
int buttonState = 0; // current state of the button
int lastButtonState = 0; // previous state of the button

void setup() {
// initialize the button pin as a input:
pinMode(buttonPin, INPUT);
// initialize the LED as an output:
pinMode(ledPin, OUTPUT);
// initialize serial communication:
Serial.begin(9600);
}

void loop() {
// read the pushbutton input pin:
buttonState = digitalRead(buttonPin);

// compare the buttonState to its previous state
if (buttonState != lastButtonState) {
// if the state has changed, increment the counter
if (buttonState == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
buttonPushCounter++;
Serial.println("on");
Serial.print("number of button pushes: ");
Serial.println(buttonPushCounter);
}
else {
// if the current state is LOW then the button
// wend from on to off:
Serial.println("off");
}
}
// save the current state as the last state,
//for next time through the loop
lastButtonState = buttonState;

// turns on the LED every four button pushes by
// checking the modulo of the button push counter.
// the modulo function gives you the remainder of
// the division of two numbers:
if (buttonPushCounter % 2 == 0) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
if (buttonPushCounter % 4 == 0) {
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
} else {
digitalWrite(ledPin, LOW);
}
if (buttonPushCounter % 6 == 0) {
digitalWrite(ledPin, HIGH);
delay(50);
digitalWrite(ledPin, LOW);
delay(50);
digitalWrite(ledPin, HIGH);
delay(50);
digitalWrite(ledPin, LOW);
delay(50);
digitalWrite(ledPin, HIGH);
delay(50);
digitalWrite(ledPin, LOW);
delay(50);
digitalWrite(ledPin, HIGH);
delay(50);
digitalWrite(ledPin, LOW);
delay(500);
} else {
digitalWrite(ledPin, LOW);
}
}

Hola, tenes que crear una variable que cuente esas veces. Casi te lo hize porque yo hize algo parecido para mi moto. Te lo mezcle junto a un sistema antirebote para que no te joda el pulsador, ahi tenes para pensar.

/* 

const int led = 13;
const int pulsador = 52;    // pulsador conectado al pin 52 como entrada digital
const int tiempoAntirebote = 10;  //le damos un valor de 10ms como valor maximo para esperar a que pase el rebote del pulsador

int cuenta = 0;  // lleva la cuenta de cuantas veces presionamos el pulsador para el antirebote
int cuenta2 = 0; //veces que pulsemos para hacer lo que vos queres
int estadoPulsador;
int estadoPulsadorAnterior;

boolean antirebote(int pin) {
  int contador = 0;
  boolean estado;          //guarda el estado del pulsador
  boolean estadoAnterior;  //guarda el ultimo estado del pulsador

  do {
    estado = digitalRead (pin);
    if (estado != estadoAnterior) { //comparamos el estado actual con el anterior
      contador = 0;  //reiniciamos el contador
      estadoAnterior = estado;
    }
    else {
      contador = contador + 1;  //aumentamos el contador en 1
    }
    delay(1); //esperamos 1ms para superar los 10ms del tiempo antirebote y de esa forma salir del do-else-while y regresar el valor de estado
  } while (contador < tiempoAntirebote);

  return estado; //nos puede dar un valor true o false dependiendo de como este accionado el pulsador
}

void setup() {
  pinMode(pulsador, INPUT);  //declaramos el pulsador como entrada
  pinMode(led, OUTPUT);
}

void loop() {
  estadoPulsador = digitalRead(pulsador); // leemos el estado del pulsador

  if (estadoPulsador != estadoPulsadorAnterior) { //si hay cambio con respecto al estado anterior
    if (antirebote(pulsador)) { // revisamos si esta presionado y si lo esta
      cuenta++; // se aumenta la cuenta en 1
      //ACA IRIA TU PRIMER PROCESO CON EL LED
      contador2 = 1;
    }
    if (contador2 == 1) {
      //ACA IRIA EL SIGUIENTE
      contador2 = 2;
    }
    if (contador2 == 2) {
      //TERCER PROCESO
      contador2 = 3;
    }
    if (contador2 == 3) {
      //CUARTO PROCESO
      contador2 = 0;
    }
  }
}

estadoPulsadorAnterior = estadoPulsador;     // guardamos el estado del pulsador
}