typedef struct {
uint8_t pitch;
}LearnNote;
#define MAX_NOTE 500
LearnNote Noteseq[MAX_NOTE];
int learnindex=0;
void loop() {
MIDI.read();
}
void MyHandleNoteOn(byte channel, byte pitch, byte velocity){
Noteseq[learnindex].pitch=pitch;
learnindex++;
}
-
You are misusing the title. You are not supposed to squeeze your question there. Instead you should give a brief description of your Problem. Beside that in your particular case you can only cast your array from LearnNote to uint8_t. You need to loop over all entries and copy them one-by-one into an int-array.– KwasmichCommented Apr 25, 2017 at 11:34
1 Answer
Its not very clear what you are asking, but I think you are saying can you do this
uint8_t anArray[MAX_NOTE];
anArray = Noteseq.pitch;
In general the answer is no. However in this specific case off the top of my head I think you probably can (maybe). You have a struct which only contains bytes. The compiler will probably pack the sequentially so you will effectively have a contiguous sequence of bytes which you would be able to copy to the byte array by doing:
memcpy (anArray, Noteseq, MAX_NOTE); // THIS IS BAD PRACTICE!
You can only do this in this case because the types are both 8bit numbers. Its not a good idea to do this copy between an array of structs and a POD type array is just asking for trouble.
Instead use a function to do it.
int* CopyPitch (LearnNote* source, int* destination, int count)
{
for (int i = 0; i < count; ++i)
{
destination[i] = source[i].pitch;
}
}
(You should really check for null pointers and stuff, but its just an example)