Here's a simple sketch. I have an array data
and a variable idx
.
I'm assigning a value to each of the array element, and then sending them to my serial monitor.
volatile uint16_t data[5];
volatile uint16_t idx = 5;
void setup() {
Serial.begin(9600);
while (!Serial) { }
Serial.println("\nHello!");
data[0] = 1010;
data[1] = 1011;
data[2] = 1012;
data[3] = 1013;
data[4] = 1014;
for(int i = 0; i< idx; ++i)
{
Serial.print(data[idx]);
Serial.write(",");
}
while(1){ }
}
void loop() {}
When I look into my serial monitor, I get this:
Hello!
0,0,0,0,0,
Why is this happening? Did I overlook something fundamental? I'd appreciate if you could offer your thoughts on this.
I'm testing this code on Arduino Mega2560.
1 Answer 1
You got confused here:
Serial.print(data[idx]);
You're printing array slice 5 (the sixth entry in a 5 entry array) 5 times.
You probably meant to write:
Serial.print(data[i]);
To improve clarity you may want to #define
it instead:
#define DATA_SIZE 5
uint16_t data[DATA_SIZE];
...
for (int i = 0; i < DATA_SIZE; i++) {
....
}
Or you can do it the other way round (get the size from the array):
uint16_t data[5];
#define DATA_SIZE (sizeof(data) / sizeof(data[0]))
-
It's easy to go code-blind ;)Majenko– Majenko2017年09月25日 09:51:42 +00:00Commented Sep 25, 2017 at 9:51
-
Terrible. Can't believe I missed such a simple thing. Perhaps I would've noticed if I labeled 'idx' as 'last_idx' or something clearer.bot1131357– bot11313572017年09月25日 09:55:49 +00:00Commented Sep 25, 2017 at 9:55
-
For those kind of constants it's better to use a #define and use all capitals. I'll show you an example in my answer.Majenko– Majenko2017年09月25日 09:57:02 +00:00Commented Sep 25, 2017 at 9:57
-
It's not a constant, but an incrementing index as I populate an array. ;-)bot1131357– bot11313572017年09月25日 09:59:47 +00:00Commented Sep 25, 2017 at 9:59
-
1Ah, right. Well, don't forget that the array size itself is fixed (something many users here don't realise), so you need to allocate all the memory up front.Majenko– Majenko2017年09月25日 10:00:35 +00:00Commented Sep 25, 2017 at 10:00