I would like to pass a character array micPointsChar[]
to a function initMicPoints()
and parse it into a multi-dimensional array micPoints
. I am able to successfully do this using a one dimensional array:
char micPointsChar[30 + 1] = {};
float *initMicPoints(char micPointsChar[], float micPoints[3]);
int main()
{
// Read in mic points from file
char micPointsChar[40] = "2,3.343,4.432\n";
float micPoints[3] = {};
float *newMicPoints = initMicPoints(micPointsChar, micPoints);
for (int i = 1; i <= 3; i++)
{
Serial.print(newMicPoints[i]);
Serial.print("\n");
}
return 0;
}
float *initMicPoints(char micPointsChar[], float micPoints[3])
{
static int i = 1;
static int micNum = 1;
static int numMics = 1;
float coordinateDec = 0;
char *coordinate = strtok(micPointsChar, ",\n");
coordinateDec = atof(coordinate);
while (micNum <= numMics)
{
while (i <= ((micNum * 3)) && (coordinate != NULL))
{
if (i == ((micNum * 3) - 2))
{
micPoints[1] = coordinateDec;
}
else if (i == ((micNum * 3) - 1))
{
micPoints[2] = coordinateDec;
}
else if (i == ((micNum * 3) - 0))
{
micPoints[3] = coordinateDec;
}
coordinate = strtok(NULL, ",\n");
coordinateDec = atof(coordinate);
i++;
}
micNum++;
}
return micPoints;
}
This outputs the expected:
2.00
3.34
4.43
However, when I change my code to handle a multidimensional array, micPoints[360][3]
:
char micPointsChar[30 + 1] = {};
float *initMicPoints(char micPointsChar[], float micPoints[360][3]);
int main()
{
// Read in mic points from file
char micPointsChar[40] = "2,3.343,4.432\n";
float micPoints[360][3] = {};
float *newMicPoints = initMicPoints(micPointsChar, micPoints);
static int i = 0;
for (i = 1; i <= 3; i++)
{
Serial.print(*newMicPoints[i][0]);
Serial.print("\n");
Serial.print(*newMicPoints[i][1]);
Serial.print("\n");
Serial.print(*newMicPoints[i][2]);
Serial.print("\n");
}
return 0;
}
float *initMicPoints(char micPointsChar[], float micPoints[360][3])
{
static int i = 1;
static int micNum = 1;
static int numMics = 1;
float coordinateDec = 0;
char *coordinate = strtok(micPointsChar, ",\n");
coordinateDec = atof(coordinate);
while (micNum <= numMics)
{
while (i <= ((micNum * 3)) && (coordinate != NULL))
{
if (i == ((micNum * 3) - 2))
{
micPoints[i][0] = coordinateDec;
}
else if (i == ((micNum * 3) - 1))
{
micPoints[i][1] = coordinateDec;
}
else if (i == ((micNum * 3) - 0))
{
micPoints[i][2] = coordinateDec;
}
coordinate = strtok(NULL, ",\n");
coordinateDec = atof(coordinate);
i++;
}
micNum++;
}
return micPoints;
}
I receive a compile time error of:
cannot convert 'float (*)[3]' to 'float*' in return
Am I making this too complicated? What is the best way to return a multidimensional array?