... si può tranquillamente usare un Arduino AVR ... come per gli STM cambia solo l'ambiente di sviluppo, ovviamente NON si usa l'IDE ma altri embienti (es. MPLAB X di Microchip) e veri debugger che si collegano sul connettore ICSP
Se poi uno usa schede che montano le MCU ARM SAM credo che il debug si possa fare anche dall'IDE Arduino 2.0 (... ancora in beta) che lo prevede solo per alcune famiglie di schede
Ehi ehi ehi, ma perché mi devo complicate la vita?
Se proprio non devo usare l'idea di Arduino, uso ardublock o minibloq così sto più nel mio ambiente di programmazione grafica
Tornando a noi quindi devo usare la definizione con l'asterisco che inizializza,se ho capito bene, il puntatore ad un Array? O posso usare direttamente un Array?
Alla fine io da quell'array dovrò prendere i singoli valori (che saranno poi modificati, quelli si con dei define) e darli in pasto a tre funzioni tone()
... stai dichiarando un array di stringhe classiche del 'C' per cui:
CH_G4[0] assumerà il valore "G4", CH_G4[1] il valore "B4" ed infine CH_G4[2] il valore "D5", ma, come vedi, sono valori racchiusi tra doppi apici, quindi NON numeri ma strighe di caratteri !!!
Tu invece cosa vorresti? Che alla fine CH_G4[0] contenesse il valore numerico 64, CH_G4[1] il valore 128 e CH_G4[2] il valore 192? ... perché, così come hai scritto, NON ottieni questo eh ...
Esatto.. Vorrei quello
Però mi sembra di capire che la stringa non si sostituisce al nome della variabile
Ma magari posso ottenerlo piu semplicemente con un Array di questo tipo allora?
int CH_G4 {G4,B4,D5}
I vari G4,B4 e D5 verrebbero sostituiti dal define?
O darebbe errore di compilazione?
Avevo immaginato, infatti io non capisco perché ti stai incaponendo con 'sti array di stringe quando per riprodurre una nota hai bisogno di un numero intero.
Alla fine, per quanto riguarda il calcolo del picth di una nota si tratta di matematica spicciola.
Prendiamo ad esempio l'ottava 4 ovvero quella che contiene il La a 440Hz, potresti ottenere tutte le altre note ad esempio con un qualcosa tipo questo:
Potresti anche fare una cosa molto più semplice: usare solo dei valori numerici per esprimere le note musicali, ad esempio:
54=Sol4
74=Si4
25=Re5
I diesis puoi indicarli con un 1 iniziale, ad esempio:
24=Re4
144=Fa#4
64=La4
Ci vuole poco, poi, a risalire alla nota:
dividi per 100 e determini se è diesis;
il resto diviso 10 ti da la nota;
il resto di quest'ultima divisione è l'ottava.
Certo, però, che i #define che sostituiscono direttamente la frequenza al nome sono una soluzione semplicissima e non rubano spazio in memoria!
Per me è palese il perchè.
E' una questione di leggibilità del codice.
Se io devo comporre degli accordi e ci metto dentro dei numeri, non sapro' mai se quel numero che ho messo dentro è la nota corretta che deve suonare in quell'accordo.
Io ho tanti define come nell'esempio che hai postato per avere le frequenze di ogni nota (in int pero' , perchè avevo letto che il tone accetta solo interi)
Poi ho 3 buzzer.
Ognuno di essi riproduce una nota diversa che forma un accordo.
Se io ho un accordo di DO, dovro' suonare DO, MI e SOL sui 3 buzzer.
Quindi voglio che ci sia un array col nome DO che contenga le 3 note che compongono l'accordo. Certo che potrei mettere direttamente i numeri, ma io voglio essere sicuro di aver inserito le note giuste da suonare.
Per questo pensavo di fare:
int CH_DO4 [] = {DO4,MI4,SOL4} e aspettarmi che i 3 define corrispondenti mi sostituiscano i nomi delle note con i valori numerici.
poi nella parte di riproduzione metterei i tre tone, uno per ogni frequenza.
In questo esempio manca il sensore che permetterà di scegliere quale accordo suonare quindi metto sempre il G4.
Non so se è un problema del simulatore che non puo' suonare piu' note insieme o se c'e' un errore nel mio software...
Questa è l'idea di cosa vorrei fare, ma mi da errore nell'assegnazione dell'array accordo
perchè in C/C++ NON puoi copiare un intero array con una assegnazione.
Devi usare un ciclo for
for(int i=0;i<=2;i++) accordo[i] = CH_G4[i];
oppure una funzione tipo memcpy()
oppure a manina
accordo[0] = CH_G4[0]; accordo[1] = CH_G4[1]; accordo[2] = CH_G4[2];
Se lo fa, e non so se lo fa anche nelle ultime versioni, lo fa intelligentemente senza chiedermi niente
Se gli chiedo di copiare un array, mi copia un array e muuuuto