array must be initialized with a brace-enclosed initializer

Buongiorno,
Vorrei salvare quello che mi arriva sulla seriale (myserial) per poi estrapolare due numeri.
Mi da questo errore: array must be initialized with a brace-enclosed initializer
Leggendo sui forum dicono di dichiarare prima l'array ma non risolve,

void loop() {
  if (mySerial.available())
  char Str1[89] = "inizializza";
  char Str1[89] = mySerial.read();
    Serial.write(Str1[]);
  if (Serial.available())
    mySerial.write(Serial.read());

}

Grazie

ciao...un po' di cose...se dichiari una stringa come :

char Str1[89]="inizializza";

non serve il char successivo come fai qui:

char Str1[89] = mySerial.read();

basterebbe un semplice:

Str1[89] = mySerial.read();

così però salvi nell'ultima posizione della stringa un byte di ritorno dlla seriale...ricorda che l'ultima posizione di una stringa è dedicato al suo terminatore '\0'.
detto questo...per stampare una stringa basta il semplece:

Serial.write(Str1);

cioè le [] non servono...oppure servono se vuoi stampare un carattere ben preciso della stringa ed allora ci va il corrispondente numero

PS: mi correggo...se prima dichiari una stringa lunga 89...poi se scrivi alla 89ma posizione vai oltre...il terminatore sarà alla 88ma (in quanto parti a contare da posizione 0).

Ciao, grazie del consiglio.
ho provato come mi hai detto tu ma mi dice che la stringa non è stata dichiarata ('Str1' was not declared in this scope)

void loop() {
  if (mySerial.available())
    char Str1[89] = "inizializza";
    Str1 = mySerial.read();
    Serial.write(Str1);
  if (Serial.available())
    mySerial.write(Serial.read());

}

sostituisci

char Str1[89] = "inizializza";

con

char Str1 ;

ciao...quello che fai è creare una string locale nell'if che appena usciti si "distrugge"...quindi ha poco senso, in questo caso, visto come viene gestito il Serial.available(), creare un array così lungo per poi verificare solo un byte.
Poi tieni presente che quando crei un array il nome dell'array è un puntatore...che puoi gestire o con le [], per indicare una posizione, o referenziando/deferenziando con & od *.
quindi quel Str1 = Serial.read()...non va bene...dovrebbe essere o Str1[posizioneArray] o *Str1 (per salvare il byte in ingresso alla posizione 0 dell'array).

pippopippoli:
ho provato come mi hai detto tu ma mi dice che la stringa non è stata dichiarata ('Str1' was not declared in this scope)

Il problema principale che vedo è che non basta l'indentazione per determinare le istruzioni da eseguire in blocco (in questo caso nella if).

Quindi intanto fai fare all'IDE un "auto-indent" del tuo codice, e potrai notare subito il problema perché diventa:

void loop() {
  if (mySerial.available())
    char Str1[89] = "inizializza";
  Str1 = mySerial.read();
  Serial.write(Str1);
  if (Serial.available())
    mySerial.write(Serial.read());
}

Questo significa che la if() ha UNA sola istruzione da eseguire, ed essendo questa la creazione della variabile "Str1", questa stringa all'uscita dalla "if" viene rilasciata, per cui l'istruzione "Str1 = mySerial.read();" cerca di scrivere in una variabile che non esiste più!

Quindi ti basta usare le graffe, credo volessi fare questo:

void loop() {
  if (mySerial.available()) {
    char Str1[89] = "inizializza";
    Str1 = mySerial.read();
    Serial.write(Str1);
  }
  if (Serial.available())
    mySerial.write(Serial.read());
}

Detto questo, però, ci sono altre cose concettuali che mancano. Tu con questa variabile "Str1" che ci vuoi fare? Ti serve/servirà anche esternamente a questo codice? Perché in tal caso ti conviene dichiararla globale, fuori dal loop:

char Str1[89] = "inizializza";
void loop() {
  if (mySerial.available()) {
    Str1 = mySerial.read();
    Serial.write(Str1);
  }
  if (Serial.available())
    mySerial.write(Serial.read());
}

Ora però sorge un altro problema. Tu conla mySerial.read() leggi UN carattere. Non puoi assegnarlo così, devi decidere DOVE va messo all'interno della tua variabile strina di buffer. Ad esempio puoi metterla come primo carattere, ma per poter usare "Str1" come stringa devi anche mettere il terminatore di stringa \0.
Inoltre la seconda if() è inutile (anzi dannosa in quanto si "mangia" un secondo carattere) quindi va rimossa. Quindi una cosa del tipo:

char Str1[89] = "inizializza";
void loop() {
  if (mySerial.available()) {
    Str1[0] = mySerial.read();
    Str1[1] = 0;
    Serial.print(Str1);
  }
}

grazie delle risposte, mettendo le graffe e dichiarandola in modo diverso in effetti funziona