Salve. Ho bisogno del vostro aiuto per correggere il mio codice, che vi allego in aggiunta al post.
Si tratta del codice di un orologio con DS1307 connesso via I2C.
Il mio obbiettivo è quello di avere una visualizzazione di ore, minuti, giorno della settimana (in lettere), giorno mensile e mese (in lettere) mediante multiplexaggio di 126 led collegati a 53 pin (48 colonne, 5 righe).
La board che sto usando è una Mega2560.
L'errore che mi presenta l'IDE è il seguente:
invalid types 'int[int]' for array subscript
ho provato a correggerlo in diversi modi ed ho cercato gia nel web ma tutti i "tentativi" portano allo stesso problema.
Sono consapevole che il problema sia legato al fatto che voglio inserire in un array 5x48 una serie di array di dimensione inferiore (5x3 e 5x5).
Cosa potrei fare per far funzionare tutto senza dover necessariamente dichiarare tutte le mini_matrici della stessa dimensione della matrice_finale? (questa soluzione oltretutto porterebbe ad eccedere la memoria totale disponibile del 181%)
Grazie in anticipo.
Benvenuto,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentartiIN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione tutto il su citato REGOLAMENTO ... Grazie.
nid69ita
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto.
Guardando il sorgente non riesco a capire perché ti segnala errore, il codice sembra a prima vista corretto e non saprei dove sia la parte che causa il messaggio d'errore.
Sono curioso, se qualcuno più esperto individua l'errore, sono curioso di saperlo
Non mi sono soffermato troppo ad analizzare il programma, qullo che ti posso suggerire è quello di evitare di sprecare memoria definndo di tipo int gli array e le variabile che dovranno contenere un valore che rientra nei valori compresi tra 0 e 255 in tal caso usa byte e per ogni variabile/elemento array risparmi un byte.
Poi anche l'array pins è superfluo, primo perché lo usi solo per inizializzare le matrici e per definire le altre matrici, quindi il suggermineto in qusto caso potrebbe essere delle costanti o ancora meglio delle define e ner definire come out i vari pin cicla sulle due matrici.
Tutte queste
memcpy (mini_matrice_1_lettera_giorno_sett, M, sizeof (mini_matrice_1_lettera_giorno_sett));
se funzionano lo fanno perché probabilmente le hai definite in numeri_lettere.h ma a meno che non ci sia qualcosa che mi sfugge non trovo il motivo di non fare direttamente
In più se del .h citato hai usato una cosa del tipo
#define M 'M'
o
#define A 65 //non ricordo l'esatto codice ASCII è a caso
quando compili il programma tutte le corrispondenze verranno sostituite dal compilatore, nulla da eccepire se vuoi rimanere su questa strada ma usa dell define con un nome parlante e non ambiguo.
Ragazzi innanzi tutto grazie infinite per le risposte e l'interesse.
fabpolli:
Non mi sono soffermato troppo ad analizzare il programma, qullo che ti posso suggerire è quello di evitare di sprecare memoria ...
Davvero una genialata quella del definire byte al posto di int, ho praticamente convertito tutto in byte.
Per quanto riguarda le lettere penso di aver capito cosa intendi, ma come pensi possa fare delle define con l'attuale metodo usato per la definizione delle matrici?(ti ho allegato il file .h)
Servono info: prima di tutto devi postare tutto il codice, anche il .h altrimenti spariamo a casaccio supposizioni.
Non so con che IDE compili, ma ora che hai messo il .h possiamo provarlo a compilare.
Inoltre non sappiamo quale libreria DS usi di preciso (c'e' ne sono innumerevoli).
Il compilatore ti dice che mini_matrice_3_lettera_mese NON è una matrice a 2 dimensioni
infatti è dichiarata
int mini_matrice_3_lettera_mese [ sizeof (let) / sizeof ( int )];
quindi è una matrice a 1 dimensione, quindi come pensi di poterla poi usare con 2 parentesi quadre ?
I vari memcpy() funzionano anche se copi da matrice a 2D a matrice 1D perché passi puntatori di memoria e il compilatore non può controllare cosa copi.
>iron93: Quando si quota un post, NON è necessario riportarlo (inutilmente) tutto; bastano poche righe per far capire di cosa si parla ed a cosa ci si riferisce, inoltre, se si risponde al post immediatamente precedente, normalmente NON è necessario alcun "quote" dato che è sottinteso.
Gli utenti da device "mobile" (piccoli schermi) ringrazieranno per la cortesia
Guglielmo
P.S.: Ho troncato io il "quote" del tuo post #4 qui sopra
iron93:
Per quanto riguarda le lettere penso di aver capito cosa intendi, ma come pensi possa fare delle define con l'attuale metodo usato per la definizione delle matrici?(ti ho allegato il file .h)
Ok, vedendo il file è chiaro, non hai usato una #define quindi non hai particolare problema ma io adotterei una cosa del tipo
o cose del genere, in questo modo togli ambiguità e soprattutto (ma vale sempre) immagina che un domani devi fare una ricerca e sostituzione, se occorrerà cercare A in tutto il codice ti tocca decidere a mano se sostituire o meno, se invece devi cercare una cosa del tipo A_CharMatrix o simili puoi cercare/sostituire molto molto più facilmente
gpb01 ti ringrazio per la professionalità con la quale tratti questo forum, perdona le mie disattenzioni.
fabpolli, ho seguito il tuo (giustissimo) suggerimento ed ho modificato tutto, il listato sembra più ordinato
nid69ita, hai detto bene, ho appena dichiarato quelle matrici come ciò che sono (bidimensionali), uso l' IDE Arduino 1.8.12, vi allego la libreria dell'RTC
@iron93, l'errore è come hai dichiarato gi array/matrici. Che ti devo dire oltre ?
Hai cambiato codice ? O posti tutto, ino e .h attuale oppure che possiamo dirti ?
Ripeto, per fare prove ed aiutare ci occorrono le info corrette.
nid69ita Prima del tuo post avevo solo modificato il file .h usando le indicazioni di fabpolli.
Adesso ho dichiarato le matrici ed ho provato ad inserirle come parametri della funzione Assemblaggio_matrice_finale (l'ide mi compila tutto senza errori).
Credete possa esserci un qualche errore logico che l'ide non mi evidenzia? L'ho connesso alla matrice fisica e quello che vedo è che tutti i led sono accesi .
Allego i file e il disegno di come vorrei venisse (per farvi fare un'idea)
Salve, ho avuto modo di ragionare sul mio codice ed ho scoperto che mi stavo complicando la vita inutilmente cercando di creare una matrice quando bastava multiplexare direttamaente gli anodi, o i catodi (connessi in comune) dei singoli display, questo mi ha anche portato anche a ridurre drasticamente le porte dell'arduino mega da utilizzare.
Adesso sono arrivato all'ultimo problema (spero):
come si vede dallo screenshot del mio simulatore (Proteus) riesco a visualizzare correttamente nei rispettivi display le informazioni circa la giorno della settimana (in inglese) ed il giorno del mese; invece per quanto riguarda le ore, i minuti ed il mese, i dati che visualizzo sono solamente 10 per ore e minuti e AUG (agosto, riferito al valore 10 dello switch case dei mesi).
Ragionandoci su posso intuire che il mio problema è legato alla libreria relativa all'RTC, come credete possa risolvere questo inconveniente?
Vi allego il file .ino, la libreria (ed il file di esempio), lo screenshot ed il progetto in proteus (utile nel caso lo usaste anche voi).
spero di aver fornite tutto l'occorrente a voi utile.
Grazie in anticipo.