1

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.

asked Sep 25, 2017 at 9:36

1 Answer 1

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]))
answered Sep 25, 2017 at 9:46
5
  • It's easy to go code-blind ;) Commented 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. Commented 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. Commented Sep 25, 2017 at 9:57
  • It's not a constant, but an incrementing index as I populate an array. ;-) Commented Sep 25, 2017 at 9:59
  • 1
    Ah, 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. Commented Sep 25, 2017 at 10:00

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.