Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

Currently I'm using Arduino for my project and what I want is to have an array that stores an array of sensors. I do understand that there's limited resource to be used for a dynamic array. But by limiting the number of items in the array and uses struct data instead of creating a class, I managed to cut the SRAM cost. So without further ado, here's my code :

#define MAX_SENSOR 6

namespace Sensors
{
    typedef struct
    {
        byte SlavePin;
        byte LDRPin;
        byte RedPin;
        byte BluePin;
    } Sensor;

    Sensor _sensors[MAX_SENSOR];
    byte _len = 0;

    void Add(Sensor s)
    {
        if (_len > MAX_SENSOR)
            return;
        _len++;
        _sensors[_len] = s;
    }

    Sensor Get(byte index)
    {
        return _sensors[index];
    }
}

And here's how I use it.

#include "Sensors.h"

void setup()
{
    for (int i = 0; i < 6; i++)
    {
        Sensors::Sensor sen;
        sen.SlavePin = 0;
        Sensors::Add(sen);
    }
    Serial.print("Length = ");
    Serial.println(Sensors::_len);

    for (int j = 0; j < Sensors::_len; j++)
    {
        Serial.print(j);
        Serial.print(" = ");
        Serial.println(Sensors::Get(i).SlavePin);
    }
}

void loop() { //Nothing goes here }

This code works and it compiles successfully. But when I run it, the serial window shows this :

Length : 6

Sensor 0:0

Sensor 1:0

Sensor 2:1

Sensor 3:2

Sensor 4:3

Sensor 5:4

Apparently, the first and the second item in the array has the same value and honestly, I don't know why.

Here's the output that I'm expecting :

Length : 6

Sensor 0:0

Sensor 1:1

Sensor 2:2

Sensor 3:3

Sensor 4:4

Sensor 5:5

Any help would be very appreciated. And BTW, I'm sorry if this kind of thread had already existed.

share|improve this question
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.