Bon, en enlevant des morceaux de code, je pense avoir trouvé le problème. Cela ne vient pas des lectures de la carte SD, mais d'un fonction qui est incluse dans la première lecture : litSeqFP().
Dans cette fonction, je viens placer des morceaux de FP[i] dans un tableau à deux entrées et c'est, je pense, là où j'ai dû me mélanger les crayons dans l'ordre des indices sur lesquels j'avais pourtant porté mon attention. Ce qui est étrange, c'est que le programme fonctionne bien (peut-être quae dans ce cas, des débordements de la pile ne gênait personne) ! Voici les variables et le code :
struct sequence {
uint8_t valid;
uint16_t dep;
uint8_t mode;
uint16_t fin;
};
sequence seqFP[4][6]; // La première accolade est le mode et la deuxième est la voie
String FP[6];
void litSeqFP() {
int8_t pN[13];
for (uint8_t i = 0; i < 6; i++) { // Nombre de fils pilotes
for (uint8_t j = 0; j < 13; j++) // Nombre de ";" dans la phrase
pN[j] = 0;
int8_t p = -2;
int8_t j = 0;
do { // Trouve la position de chaque délimiteur
p = FP[i].indexOf(';', p+2);
if (p > 0) {
pN[j] = p;
j++;
}
}
while(p > 0);
uint8_t k = 0;
uint8_t seq = 0;
while (pN[k+1] > 0) { // Nombre de ";"
uint16_t val = FP[i].substring(pN[k]+1, pN[k+1]).toInt();
switch (k % 3) {
case 0:
seqFP[seq][i].dep = val;
seqFP[seq][i].valid = 0;
break;
case 1:
seqFP[seq][i].mode = val;
break;
case 2:
seqFP[seq][i].fin = val;
seqFP[seq][i].valid = 1;
seq++;
break;
}
k++;
}
}
}
J'ai donc changé sequence seqFP[4][6] en sequence seqFP[6][4];
Mais là, j'avoue que je n'y comprends plus rien car, à l'utilisation, mon premier indice représente les 4 séquences et le deuxième les 6 fils pilotes alors que dans la définition de la variable, c'est l'inverse ???
Non, l'accès est aléatoire, on peut lire/écrire dans n'importe quel ordre
Il faut dire aussi que l'héritage du basic avec i et j pour balayer les tableaux c'est pas terrible pour s'y retrouver. Il vaut mieux prendre des noms un peu plus explicites pour les index.
tableau[ligne][colonne].