Resolvido - Definir mais de uma ação para um button

Algo assim?

#define TIME_OUT     2000
unsigned char num_clicks = 0; 
unsigned char time_on = 0; 
unsigned long timer = 0;
unsigned char flanco = 0; 

if (digitalRead(botao) == LOW && flanco == 0) { //primeiro click. 
   num_clicks++; //incrementa clicks
   flanco = 1; // não volta aqui neste ciclo.
   if (time_on == 0) { //primeira vez que entra aqui. 
      timer = millis();
      time_on = 1; //não volta a entrar. 
   } 
}

if (digitalRead(botao) == HIGH) { //faz reset do flanco para entrar na condicão anterior. 
   flanco = 0; 
}

if (millis() - timer >= TIME_OUT ) { //acabou-se o tempo desde que carregaste pela primeira vez no botão. 
   switch (num_clicks) {  //decide o que fazer tendo por base o numero de clicks. 
      case 1: {
                  funcao_1();
                  break;
                  }
      case 2: {
                  funcao_2();
                  break;
                  }
      case 3: {
                  funcao_3();
                  break;
                  }
      default: {
                  erro();
                  break;
                  }
    }
//faz reset do ciclo... 
num_clicks = 0; 
flanco = 0; 
time_on = 0;
}

Este código (ou qualquer código com botões) tem o problema do debounce. Provavelmente a variável num_clicks vai contar mais que o numero de vezes que clicaste no botão. Mas nada como experimentar e ver o que dá.