#define botao 2                             // Define pino para o botão
int contador = 2;                           // Variavel para controle de pino LED
unsigned long ledAceso[20];                 // Matriz para controle do tempo aceso
unsigned long tempo = 5000;                // Tempo aceso (Ajuste à sua necessidade)
//-------------------------------------------------------------
void setup() {
  for (int i = 3; i < 20; i++)  {
    pinMode(i, OUTPUT);                     // Define pinos d2 2 a 19 como saida
    digitalWrite(i, LOW);                   // Apaga cada pino
  }
  pinMode(botao, INPUT_PULLUP);             // Define pino botão como entrada
}
//-------------------------------------------------------------
void loop() {
  if (digitalRead(botao) == LOW)            // Verifica se botão foi pressionado
  {
    delay(30);                              // Tempo para evitar repique de botão
    if (digitalRead(botao) == LOW) {        // Confirma se botão ainda pressionado
      contador ++;                          // Incrementa contador de pino
      if (contador > 19)                    // Se pino maior que 19
        contador = 3;                       // Vai para o primeiro pino
      ledAceso[contador] = millis();        // Salva valor de milis() p/ controle do tempo
      while (digitalRead(botao) == LOW) {}  // Trava até o botão ser liberado
      digitalWrite(contador, HIGH);         // Liga o LED do pino contador
    }
  }
  for (int i = 3; i < 20; i++)  {           // Verifica se passou o tempom de todos pinos
    if (millis() - ledAceso[i] > tempo) {   // Se passou de algum pino
      digitalWrite(i, LOW);                 // Desliga o LED
    }
  }
}