che c'è di sbagliato in questo switch?

sto usando un display a 7 segmenti e un bottone. il programma sarebbe che: Premo il bottone 3 volte e il display deve segnare 3, ecc.

Perché mi da errore nel case 9?

int bassoSinistra = 13;
int basso = 12;
int bassoDestra = 11;
int punto = 10;
int centro = 9;
int altoSinistra = 8;
int altoCentro = 7;
int altoDestra = 6;
int bottone = 5;
int posizioni[] = {bassoSinistra, basso, bassoDestra, centro, altoSinistra, altoCentro, altoDestra};
int vettore[7];
void setup() {
  pinMode(bottone, INPUT);
  pinMode(bassoSinistra, OUTPUT);
  pinMode(basso, OUTPUT);
  pinMode(bassoDestra, OUTPUT);
  pinMode(punto, OUTPUT);
  pinMode(centro, OUTPUT);
  pinMode(altoSinistra, OUTPUT);
  pinMode(altoCentro, OUTPUT);
  pinMode(altoDestra, OUTPUT);
}

void loop() {
  int contatore = 0;

  switch (contatore) {
    case 0: vettore = {1, 1, 1, 0, 1, 1, 1};
      break;
    case 1:  vettore = {0, 0, 1, 0, 0, 0, 1};
      break;
    case 2:   vettore  = {1, 1, 0, 1, 0, 1, 1};
      break;
    case 3:   vettore  = {0, 1, 1, 1, 0, 1, 1};
      break;
    case 4:   vettore = {0, 0, 1, 1, 1, 0, 1};
      break;
    case 5:   vettore  = {0, 1, 1, 1, 1, 1, 0};
      break;
    case 6:   vettore  = {1, 1, 1, 1, 1, 1, 0};
      break;
    case 7:   vettore  = {0, 0, 1, 0, 0, 1, 1};
      break;
    case 8:   vettore = {1, 1, 1, 1, 1, 1, 1};
      break;
    case 9:   vettore  = {0, 1, 1, 1, 1, 1, 1};
      break;

  }
  for (int i = 0; i < 7; i++) {
    digitalWrite(posizioni[i], vettore[i]);
  }

}

ci sarebbe poi un modo migliore di farlo? Per esempio una matrice sarebbe comoda.

L'errore è in tutti i case. Assegnamenti di questo tipo:

vettore = {1, 1, 1, 0, 1, 1, 1};

li puoi fare solo in fase di dichiarazione, non successivamente. Devi quindi impostare esplicitamente ogni elemento del vettore:

vettore[0] = 0;
vettore[1] = 1;
...

In realtà puoi farlo con un solo byte invece del vettore:

byte b;
...
 case 0: b = 0b01110111;
...

Nel for puoi poi estrarre i singoli bit con bitRead().

ok, sto correggendo, ma non ci sarebbe un modo più veloce e pratico?

L'ho già aggiunto nel post precedente!

non ho capito che devo fare nel for. Come faccio il for?
byte by;
...
case 0: by = 0b01110111;
...

for (int i = 0; i < 7; i++) {
bitRead(i, by);
}

e poi ho un altro problema, ossia che il programma ad un certo punto entra in un loop infinito non so se mi spiego. Tipo dovrebbbe fare la pausa di 3 secondi ma ad un certo punto smette di farla.,..

int bassoSinistra = 13;
int basso = 12;
int bassoDestra = 11;
int punto = 10;
int centro = 9;
int altoSinistra = 8;
int altoCentro = 7;
int altoDestra = 6;
int bottone = 5;
int posizioni[] = {bassoSinistra, basso, bassoDestra, centro, altoSinistra, altoCentro, altoDestra};
byte by;
int contatore = 0;
int secondi = 0;
boolean b = false;
void setup() {
  pinMode(bottone, INPUT);
  pinMode(bassoSinistra, OUTPUT);
  pinMode(basso, OUTPUT);
  pinMode(bassoDestra, OUTPUT);
  pinMode(punto, OUTPUT);
  pinMode(centro, OUTPUT);
  pinMode(altoSinistra, OUTPUT);
  pinMode(altoCentro, OUTPUT);
  pinMode(altoDestra, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  Serial.println("programma iniziato");
  while (millis() - secondi <= 3000) {
    if (digitalRead(bottone) == LOW) {

      b = true;
    } else {
      if (b == true) {
        contatore++;
        b = false;
        secondi = millis();
      }
    }
  }

  Serial.println(contatore);
  if (contatore > 9) {
    contatore = 9;
  }
  switch (contatore) {
    case 0: by = 0b01110111;
      break;
    case 1:
      by = 0b00010001;
      break;
    case 2:
      by = 0b01101011;
      break;
    case 3:
      by = 0b00111011;
      break;
    case 4:
      by = 0b00011101;
      break;
    case 5:
      by = 0b00111110;
      break;
    case 6:
      by = 0b01111110;
      break;
    case 7:
      by = 0b00010011;
      break;
    case 8:
      by = 0b01111111;
      break;
    case 9:
      by = 0b00111111;
      break;

  }

  for (int i = 0; i < 7; i++) {
    bitRead(i, by);
  }

  secondi = millis();
  contatore = 0;

}
for (int i = 0; i < 7; i++) {
  digitalWrite(posizioni[i], bitRead(by, i));
}

Credo che il codice che m'è stato dato non funzioni

Serial.println(contatore);
  if (contatore > 9) {
    contatore = 9;
  }
  switch (contatore) {
    case 0:
      by = 0b01110111;
      break;
    case 1:
      by = 0b00010001;
      break;
    case 2:
      by = 0b01101011;
      break;
    case 3:
      by = 0b00111011;
      break;
    case 4:
      by = 0b00011101;
      break;
    case 5:
      by = 0b00111110;
      break;
    case 6:
      by = 0b01111110;
      break;
    case 7:
      by = 0b00010011;
      break;
    case 8:
      by = 0b01111111;
      break;
    case 9:
      by = 0b00111111;
      break;
  }

  for (int i = 0; i < 7; i++) {
    digitalWrite(posizioni[i], bitRead(by, i));
  }

c'è un modo per dire di più variabili che sono uguali a zero senza stare a scrivere tipo
vettore[0]=0;
vettore[1]=0;

non so se s'è capito.
ho capito perché entrava in un ciclo infinito, la variabile secondi dev'essere un long e non un int

In che senso non funziona? Non fa niente o accende i segmenti sbagliati?