Stampare il valore di un Array ! - possibile che non vada ? 🔵

Salve a tutti ...
Vi supplico di aiutarmi perchè non ci dormo da due giorni e non capisco perchè non funzioni !!!!

Vi posto tutto il codice che ho scritto:

int cubo[17][2];

int Button_move_R = 6;

int count_a=1;
int count_b=1;
int newVal;
int oldVal=0;
 

void setup(){
  Serial.begin(9600);
  pinMode(Button_move_R, INPUT);

  // INIZIALIZZA
  for(int r = 0; r < 18; r++){ //riga 
    for(int c = 0; c < 3; c++){ //colonna
    
      cubo[r][c]=count_a;
      count_b=count_b+1;
      if (count_b == 10) {
        count_b=1;
        count_a++;
        }

// VISUALIZZA LO STATO
      String str = String(cubo[r][c]) + " ";
      Serial.print(str);
    }//close for c 
    Serial.println("\n");
  }
 }

void loop(){


newVal=digitalRead(Button_move_R);
  if(newVal==1&&oldVal==0)
  {
 
      Serial.println("R");
   // Serial.println(cubo[2][2]);


    delay(50);
    oldVal=1;
  }

 if(newVal==0&&oldVal==1)
 {
  delay(50);
    oldVal=newVal;

  }   
}

In pratica definisco una matrice "cubo[17][2]"
nel VOID gli assegno dei valori con i cicli for... e sempre nei cicli for faccio stampare i valori

  String str = String(cubo[r][c]) + " ";
  Serial.print(str);

fino qui tutto bene ...
All'interno del LOOP, ho fatto in modo che alla pressione di un tasto fisico (pin 6), venga stampata la lettera "R"
Serial.println("R"); <--- e funziona !!

Se però sostituisco

Serial.println("R");
con
Serial.println(cubo[2][2]);

Non funziona più nulla ed escono dei geroglifici ... -.-'' ASSURDO no ???

Ma perchè non funziona ????

Grazie,
Davide

io direi di rivedere le iterazioni nei due for del setup e di abbassare almeno di 1 i confronti...e ragionare bene su cosa chiedi con:

Serial.println(cubo[2][2]);

su una matrice che ha colonne "0" e "1"....la tua dichiarazione in testa al programma è:

int cubo[17][2];

PS: se alzi il livello degli allarmi in compilazione ti dovrebbe dare un warning sul valore dei confronti nei for()...

l'array cubo contiene "18" righe (da 0 a 17) e "3" colonne (da 0 a 2)

Semplicemente vorrei che mi stampasse il valore contenuto nell'array cubo alla posizione riga [2] e colonna [2].

Dovrebbe restituirmi 2 poichè tale valore è già stato assegnato all'interno dell'array (vedi VOID)

la colonna 2 ...cioè cubo[x][2] non esiste!
puoi stampare cubo[x][0] e/o cubo[x][1]

mentre molto più grave è il fatto che nei due for del setup vai a scrivere delle aree di memoria che il programma ha riservato per altro e non per le tue variabili...e questo ti provoca, molto probabilmente, problemi con il programma.

PS: dimenticavo...questo è sbagliato-> "l'array cubo contiene "18" righe (da 0 a 17) e "3" colonne (da 0 a 2)"
la matrice conterà da 0 a 16 le righe e da 0 a 1 le colonne...questo per comel'hai dichiarata all'inizio.

1 Like

prova questo e dimmi se ti funziona:

int cubo[18][3];

int Button_move_R = 6;

int count_a=1;
int count_b=1;
int newVal;
int oldVal=0;
 

void setup(){
  Serial.begin(9600);
  pinMode(Button_move_R, INPUT);

  // INIZIALIZZA
  for(int r = 0; r < 18; r++){ //riga 
    for(int c = 0; c < 3; c++){ //colonna
    
      cubo[r][c]=count_a;
      count_b=count_b+1;
      if (count_b == 10) {
        count_b=1;
        count_a++;
        }

// VISUALIZZA LO STATO
      String str = String(cubo[r][c]) + " ";
      Serial.print(str);
    }//close for c 
    Serial.println("\n");
  }
 }

void loop(){


newVal=digitalRead(Button_move_R);
  if(newVal==1&&oldVal==0)
  {
 
     // Serial.println("R");
    Serial.println(cubo[2][2]);


    delay(50);
    oldVal=1;
  }

 if(newVal==0&&oldVal==1)
 {
  delay(50);
    oldVal=newVal;

  }   
}
1 Like

Andrea ... hai perfettamente ragione !!!

Ho sbagliato io la dichiarazione iniziale !!! -.-''

Ho corretto con

int cubo[18][3];

ed effettivamente ho 18 righe e 3 colonne!

Ti ringrazio moltissimo !!! Magari per te era banale ma mi hai risolto un problemone :slight_smile:

Stanotte potrò dormire ... :stuck_out_tongue_winking_eye:

Grazie,
Davide

Sono 17 elementi indicizzati da 0 a 16.
Sono 2 elementi indicizzati da 0 a 1.

Quindi cubo[16] è l'ultimo indica valido
cubo[16][1] gli indici non possono assumere valore maggiore di quello specificato.

Ciao.

1 Like

esatto...

onestamente io mi sono perso anche in meno...

Non importa quanto bravo sei a programmare, il C e gli array primo o poi ti fregano. La differenza sta nel riconoscere subito i sintomi di avere fatto la pipi fuori dal vaso.

La scritta "Lancia Razzi". :smile:

Ciao.

@Furda:

Buongiorno,

... so che sei un vecchio utente della sezione Italiana del forum :slight_smile: , ma ... purtroppo non riesco a trovare il tuo post di presentazione :confused:, per cui, cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazione NELL'APPOSITA DISCUSSIONE spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Grazie,

Guglielmo

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