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 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]))
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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.