n° 219
Novembre 2017
Aprile 25, 2018, 05:06:58 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: Gestire più array bidimensionali  (Letto 413 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
EtaBetaPot
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 8


Mostra profilo E-mail
« inserita:: Aprile 10, 2018, 03:59:10 »

Buongiorno a tutti… sono alle prese con il seguente sviluppo di codice C++ ma dubito che la mia soluzione sia la migliore….
In pratica ho 81 matrici bidimensionali [9][9], dichiarate come leds_A1…… fino a leds_H8 che utilizzo per accendere dei LED in matrice 9x9.
Sto utilizzando questo codice che a seconda del valore della variabile Casa mi illumina i led richiesti…

Codice:
boolean leds_A1[9][9]={{1,1,0,0,0,0,0,0,0},{1,1,0,0,0,0,0,0,0},…. fino alla 9°matrice ,{0,0,0,0,0,0,0,0,0 }};
boolean leds_A2[9][9]={{0,0,0,0,0,0,0,0,0},{1,1,0,0,0,0,0,0,0},…. fino alla 9°matrice ,{0,0,0,0,0,0,0,0,0}};
e proseguento fino alla 81°...
boolean leds_H1[9][9]={{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},…. fino alla 9° matrice ,{0,0,0,0,0,0,0,1,1}};

void matrix() {
        for ( int L = 0; L < 9; L++){
        for ( int C = 0; C < 9; C++){        
            switch (Casa) {
              case 1: // casa A8
                if (leds_A8[L][C] == 1){
                    digitalWrite (row[L], HIGH);
                    digitalWrite (col[C], LOW);
                    delayMicroseconds(500);
                     }
                  digitalWrite (row[L], LOW);
                  digitalWrite (col[C], HIGH);
                  delayMicroseconds(500);
                break;
              case 2: // casa B8
                if (leds_B8[L][C] == 1){
                    digitalWrite (row[L], HIGH);
                    digitalWrite (col[C], LOW);
                    delayMicroseconds(500);
                    }
                  digitalWrite (row[L], LOW);
                  digitalWrite (col[C], HIGH);
                  delayMicroseconds(500);    
                break;
.
.
.
.
….. e così avanti fino a ……..
case 64: // casa H1
                if (leds_H1[L][C] == 1){
                    digitalWrite (row[L], HIGH);
                    digitalWrite (col[C], LOW);
                    //delayMicroseconds(500);
                    delay(300);
                  }
                  digitalWrite (row[L], LOW);
                  digitalWrite (col[C], HIGH);
                  delayMicroseconds(500);    
                break;
}        
          }
          }    
   }

Esiste un altro modo di fare tutto questo senza utilizzare la sequenza switch per 64 case ?
Grazie…. Saluti
Registrato
EtaBetaPot
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 8


Mostra profilo E-mail
« Risposta #1 inserita:: Aprile 10, 2018, 08:14:26 »

Penso di creare una matrice boolean leds_matrix[576][9] e gestire il tutto, anche se mi occupa un'pò di memoria... grazie.
Comunque se esiste un altro sistema come richiesto in discussione, sarei lieto di conoscerlo... grazie
Registrato
oregon
Jr. Member
**

Karma: +22/-6
Scollegato Scollegato

Messaggi: 251


Mostra profilo
« Risposta #2 inserita:: Aprile 10, 2018, 11:00:10 »

Se hai problemi di memoria, partendo dal fatto che potresti usare un unico vettore di 5184 elementi.

Se questi elementi (anche se boolean) occupano un byte ciascuno, potresti utilizzare un singolo bit e dimensionare 648 elementi (byte) e accedere ad ogni bit con un minimo di codice in più.
Registrato
EtaBetaPot
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 8


Mostra profilo E-mail
« Risposta #3 inserita:: Aprile 11, 2018, 03:02:28 »

Scusami Oregon ma non ho capito cosa intendi dire.... Forse descrivendo per cosa l'utilizzo potrebbe chiarire un'pò le cose... ll codice dovrebbe far parte di un progetto di scacchiera di scacchi elettronica, e gestisce l'illuminazione dei led collocati ad ogni angolo delle 64 caselle della scacchiera. I led fanno parte di una matrice 9x9 (81 leds in totale) alimentata da 18 pin digitali. Ad esempio effettuando la mossa su scacchiera E2-E4 dovrei illuminare i 4 led presenti sui bordi delle rispettive caselle E2 ed E4. Il codice che ho fatto dovrebbe funzionare, ma mi chiedevo se c'era un modo più 'elegante' senza lo swith-case. Saluti e grazie per l'interessamento.
Registrato
oregon
Jr. Member
**

Karma: +22/-6
Scollegato Scollegato

Messaggi: 251


Mostra profilo
« Risposta #4 inserita:: Aprile 11, 2018, 07:28:42 »

Io ho fatto la premessa ... "se hai problemi di memoria" ... allora puoi utilizzare un solo bit per LED e non un boolean
Registrato
michele.p
Administrator
Sr. Member
*****

Karma: +11/-2
Scollegato Scollegato

Messaggi: 643


Mostra profilo
« Risposta #5 inserita:: Aprile 12, 2018, 02:56:10 »

Se provi a prendere spunto da questi esempi (o simili)?  Sorriso

http://www.instructables.com/id/99-LED-matrix-with-Arduino/

Certo, da adattarsi al tuo caso.
Registrato
EtaBetaPot
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 8


Mostra profilo E-mail
« Risposta #6 inserita:: Aprile 13, 2018, 01:55:52 »

E' quello che ho fatto sviluppando il codice che ho postato Occhiolino. Interessante anche la soluzione utilizzando l'integrato HT16K33 https://github.com/Ernisius/Picochess-nonDGT/tree/master/Picochess-nonDGT ma devo ancora studiarmi il codice per utilizzarlo... se ci riesco  Sorriso
Registrato
michele.p
Administrator
Sr. Member
*****

Karma: +11/-2
Scollegato Scollegato

Messaggi: 643


Mostra profilo
« Risposta #7 inserita:: Aprile 15, 2018, 12:06:46 »

Anche la soluzione prospettata qui

https://forum.arduino.cc/index.php?topic=101394.0

potrebbe fare al caso tuo, optando per 9 righe per 9 colonne.
Che poi altro non è che la soluzione adottata qui:

http://blog.rhesoft.com/2015/07/25/tutorial-creating-a-simple-car-game-with-arduino-led-matrix/

con l'utilizzo di questa scheda: https://www.elabpeers.com/led-matrix-display.html
Registrato
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines