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.

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 Sep 25 '17 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 Sep 25 '17 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 Sep 25 '17 at 9:57
  • It's not a constant, but an incrementing index as I populate an array. ;-) – bot1131357 Sep 25 '17 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. – Majenko Sep 25 '17 at 10:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.