Azzerare bool array

buonasera a tutti, mi ritrovo con un problema
avrei bisogno che nel momenro che premo il pulsante , l array che vado a modificare , deve azzerarmi tutti i valori nelle celle tranne nella cella in cui e' arrvato il nuovo dato
ringrazio in anticipo per il votro aiuto

Posta il codice.

Excel?

ecco una parte di codice
quando premo il tasto ,vorrei che l array bool Audio[4] mi portasse tutte le celle precedentemete memoriate a 0 tranne l ultima che e' stata ricevuta a 1

 if (Push == 3) {                     // Gestione di 'Push' quando è uguale a 3
  for (int i = 1; i < 4; i++) {      // Copia i valori da 'switch_A' a 'switch_A_TX'
    Audio_TX[i] = Audio[i];
   }
    
    
    
    Push = 0;
    Array_mod = 5;
    if (!myBool) {                     // Inizia il timer solo se 'myBool' è false
      Serial.println(myBool);
      previousMillis = millis();
      myBool = true;
    }
  }

Prova a spiegarti meglio. Almeno, io, non ho capito nulla di quello che vuoi fare.

IN generale azzeri un array con un for, se hai una variabile che dice quale elemento è l'ultimo che hai scritto (posizione) nel for con un if non azzeri se indice ciclo è uguale a quella posizione
esempio:

xultimo=2;  // posizione 
for(int i=0;i<4;i++)
{ if( i != xultimo) 
  { audio[i] =0;
  } 
}

P. S. perché indice audio nel tuo codice parte da 1??

allora ,spero di spiegarmi un po meglio,, quando ho premuto il tasto per la 3 volta , desidero che tutto l array sia a 0 a parte l ultimo dato che e' arrivato
io pensavo di confrontare l array audio ed guardare quale e cambiato, azzerare audio e portare a 1 solo la cella che e' cambiata

 }
  if (Push == 1) {                          // Gestione di 'Push' quando è uguale a 1
    Push = 2;
    if (navigate == 0 || navigate == 4) {
      navigate = 0;
      Page = 1;
    }
  }
 if (Push == 2) {  
  for (int i = 1; i < 4; i++) {
  Serial.print(Audio[i]);
 }
 Serial.println();
 }
  if (Push == 3) {                     // Gestione di 'Push' quando è uguale a 3
  for (int i = 1; i < 4; i++) {      // Copia i valori da 'switch_A' a 'switch_A_TX'
    Audio_TX[i] = Audio[i];
   }
    Push = 0;
    Array_mod = 5;
    if (!myBool) {                     // Inizia il timer solo se 'myBool' è false
      Serial.println(myBool);
      previousMillis = millis();
      myBool = true;
    }
  }

Ho riletto troppe volte senza capire nel dettaglio le principali informazioni:

  1. L'ultimo dato che è arrivato su quale array è, e in che indice [0÷3] si trova?
  2. io pure pensavo di confrontare; Che non ha senso se non si specificano i campi di confronto, cioè confronto l'array con cosa?

Capisco che non è facile, ma è necessario trovare un modo di comunicare più preciso. Penso che potresti iniziare:

  1. mostrare come dichiari i due array di nome Audio e Audio_TX.
  2. Non si capisce perché copi solo gli elementi da 1 a 3 dell'array Audio all'interno degli elementi da 1 a 3 dell'array Audio_TX, sorge spontaneo chiedersi cosa contenga l'elemento 0 dell'array Audio.

Ad esempio potresti mostrare il contenuto dell'array come se lo dichiarassi statico, cioè così:

bool Audio[] = { 0, 0, 1, 0 }
//                     ^__ultimo dato entrato

Poi cosa contiene l'array Audio_TX prima della copia.

Purtroppo neanche facendo ricorso al mio intuito non riesco dare una risposta perché fondamentalmente non ho capito cosa deve fare il codice.

PS: Ritenta la spiegazione fornendo informazioni non equivocabili e incrocia le dita. :smiley:

Ciao.

1 Like

Quindi Audio_TX è la copia dei valori precedenti?
Ma se azzeri Audio tranne ultimo cambiato, al prossimo giro come fa Audio_TX a contenere i valori precedenti?

Secondo me dovresti postare tutto il codice e spiegare cosa vuoi fare e non chiedere come fare una singola azione che forse non è quella corretta.

grazie delle vostre risposte, ci ho pensato su e poi ho risolto cosi

if (Push == 3) {                     // Gestione di 'Push' quando è uguale a 3
      if ( navigate == 1) {
        Audio_TX[1] = Audio[1] ;
        Audio_TX[2] = 0;
        Audio_TX[3] = 0;
      }
      if ( navigate == 2) {
        Audio_TX[2] = Audio[2];
        Audio_TX[1] = 0;
        Audio_TX[3] = 0;
      }
      if ( navigate == 3) {
        Audio_TX[3] = Audio[3];
        Audio_TX[1] = 0;
        Audio_TX[2] = 0;
      }
      for (int i = 1; i < 4; i++) {      // Copia i valori da 'switch_A' a 'switch_A_TX'
        Audio[i] = Audio_TX[i];
      }

Potevi farlo in 3 istruzioni totali...

Ma l'elemento 0 dell'array che fine ha fatto?

Come ti ha scritto @cotestatnt, nota come in quei 3 if fai copia quando navigate è uguale all'indice che hai tra parentesi quadre

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.