J'aimerais savoir si quelqu'un connait le moyen d'afficher un tableau de 7 lignes et 2 colonnes sur le port série ??
mon code:
#include <SD.h>
#include <SPI.h>
File fichierlog;
static char buf[50]; // buffer pour la lecture de la linge
int ligne=0; // compteur pour la lecture de la ligne
// Pour chaque ligne du cycleur
char *p1; // Cellule 1
char *p2; // Cellule 2 pas besoin d'être séparé (soit N soit B)
char *p12; // Partie à gauche du "+"
char *p22; // Partie à droite du "+"
char *p121; // Partie à gauche du "=" à gauche du "+"
char *p122; // Partie à droite du "=" à gauche du "+"
char *p221; // Partie à gauche du "=" à droite du "+"
char *p222; // Partie à droite du "=" à droite du "+"
//********************************************************************************************************************
// déclaration des structures
struct relai {
int numRelai; // numéro du relai
int etatRelai; // état du relai
};
relai variable {0,0};
void setup() {
// déclaration du tableau
int Etape[7][2] =
{0,0};
//********************************************************************************************************************
// Ouverture du port série
Serial.begin(9600);
while (!Serial) {};
// -----------------------Initialisation de la carte SD------------------------------
Serial.print("Initialisation de la carte SD ...");
if (!SD.begin(4)) {
Serial.println("initialisation echouee !");
return;
}
Serial.println("initialisation reussie.");
//------------------------Ouverture du fichier csv-----------------------------------
fichierlog = SD.open ("READTEST.csv", FILE_READ);
//----------------------Lecture du fichier csv ligne par ligne-----------------------
while (fichierlog.available())
{
int i;
for (i = 0; fichierlog.available() && i < sizeof buf - 1; i++)
{
buf[i] = fichierlog.read();
if (buf[i] == '\n')
break; // fin de ligne
}
buf[i] = 0; // fin de la chaine
ligne++;
//--------------séparation des données d'une ligne (ici 3 données max)---------------
// Séparation des cellules
p1=strtok(buf,";");
p2=strtok(NULL,";");
// Séparation au niveau du "+"
p12=strtok(p1, "+");
p22=strtok(NULL, ";");
// Séparation de la partie a gauche du "+" au niveau du "="
p121=strtok(p12, "=");
p122=strtok(NULL,";");
// Séparation de la partie a droite du "+" au niveau du "="
p221=strtok(p22, "=");
p222=strtok(NULL, ";");
//------------------Verification de la lecture et du découpage--------------------
//Serial.println(p1); // Cellule 1
//Serial.println(p2); // Cellule 2 pas besoin d'être séparé (soit N soit B)
//Serial.println(p12); // Partie à gauche du "+"
//Serial.println(p22); // Partie à droite du "+"
//Serial.println(p121); // Partie à gauche du "=" à gauche du "+"
//Serial.println(p122); // Partie à droite du "=" à gauche du "+"
//Serial.println(p221); // Partie à gauche du "=" à droite du "+"
//Serial.println(p222); // Partie à droite du "=" à droite du "+"
//---------------------conversion du numéro du 1er relai----------------------------
if (strcmp(p121,"R1")==0)
variable.numRelai=1; // Si on lit R1, on affecte à numRelai la valeur 1
else if (strcmp(p121,"R2")==0)
variable.numRelai=2; // Si on lit R2, on affecte à numRelai la valeur 2
else
variable.numRelai=0; // Si on lit ni R1 ni R2, le numéro du relai est 0
// Serial.println(variable.numRelai); // affiche le résultat de la conversion
//----------------------conversion de l'etat du 1er relai----------------------------
if (strcmp(p122,"ON")==0)
variable.etatRelai=1; // si on lit ON, on affecte à etatRelai la valeur 1
else if (strcmp(p122,"OFF")==0)
variable.etatRelai=0; // Si on lit OFF, on affecte à etatRelai la valeur 0
else
variable.etatRelai=5; // Si on lit ni ON ni OFF, on affecte à etatRelai la valeur 5 (à changer si necéssaire)
// Serial.println(variable.etatRelai);
/*for(ligne=1;;)
{
Etape[1][0]=variable.numRelai;
Etape[1][1]=variable.etatRelai;
};*/
// Affectation des paramètres lu dans le fichier .csv
switch(ligne){
case 1:
Etape[1][0]=variable.numRelai;
Etape[1][1]=variable.etatRelai;
break;
case 2 :
Etape[2][0]=variable.numRelai;
Etape[2][1]=variable.etatRelai;
break;
case 3 :
Etape[3][0]=variable.numRelai;
Etape[3][1]=variable.etatRelai;
break;
case 4 :
Etape[4][0]=variable.numRelai;
Etape[4][1]=variable.etatRelai;
break;
case 5 :
Etape[5][0]=variable.numRelai;
Etape[5][1]=variable.etatRelai;
break;
case 6 :
Etape[6][0]=variable.numRelai;
Etape[6][1]=variable.etatRelai;
break;
case 7 :
Etape[7][0]=variable.numRelai;
Etape[7][1]=variable.etatRelai;
break;
}
}
}
void loop() {
}
kooxy:
Si je fais ça, faut il enlever cette ligne ?
relai variable {0,0};
Pas forcément, tu peut ranger les valeurs directement dans tableau ou utiliser une variable intermédiaire comme tu le fais actuellement.
Dans ce cas l’affectation au tableau sera par exemple:
#include <SD.h>
#include <SPI.h>
File fichierlog;
static char buf[50]; // buffer pour la lecture de la linge
int ligne=0; // compteur pour la lecture de la ligne
// Pour chaque ligne du cycleur
char *p1; // Cellule 1
char *p2; // Cellule 2 pas besoin d'être séparé (soit N soit B)
char *p12; // Partie à gauche du "+"
char *p22; // Partie à droite du "+"
char *p121; // Partie à gauche du "=" à gauche du "+"
char *p122; // Partie à droite du "=" à gauche du "+"
char *p221; // Partie à gauche du "=" à droite du "+"
char *p222; // Partie à droite du "=" à droite du "+"
//********************************************************************************************************************
// déclaration des structures
struct relai {
int numRelai; // numéro du relai
int etatRelai; // état du relai
int numRelai2; // numéro du relai
int etatRelai2; // état du relai
};
relai variable {0,0};
// déclaration du tableau
int Etape[8][4] = //Nouveau
{0,0,0,0};
void setup() {
//********************************************************************************************************************
// Ouverture du port série
Serial.begin(9600);
while (!Serial) {};
// -----------------------Initialisation de la carte SD------------------------------
Serial.print("Initialisation de la carte SD ...");
if (!SD.begin(4)) {
Serial.println("initialisation echouee !");
return;
}
Serial.println("initialisation reussie.");
//------------------------Ouverture du fichier csv-----------------------------------
fichierlog = SD.open ("READTEST.csv", FILE_READ);
//----------------------Lecture du fichier csv ligne par ligne-----------------------
while (fichierlog.available())
{
int i;
for (i = 0; fichierlog.available() && i < sizeof buf - 1; i++)
{
buf[i] = fichierlog.read();
if (buf[i] == '\n')
break; // fin de ligne
}
buf[i] = 0; // fin de la chaine
ligne++;
//--------------séparation des données d'une ligne (ici 3 données max)---------------
// Séparation des cellules
p1=strtok(buf,";");
p2=strtok(NULL,";");
// Séparation au niveau du "+"
p12=strtok(p1, "+");
p22=strtok(NULL, ";");
// Séparation de la partie a gauche du "+" au niveau du "="
p121=strtok(p12, "=");
p122=strtok(NULL,";");
// Séparation de la partie a droite du "+" au niveau du "="
p221=strtok(p22, "=");
p222=strtok(NULL, ";");
//------------------Verification de la lecture et du découpage--------------------
//Serial.println(p1); // Cellule 1
//Serial.println(p2); // Cellule 2 pas besoin d'être séparé (soit N soit B)
//Serial.println(p12); // Partie à gauche du "+"
//Serial.println(p22); // Partie à droite du "+"
//Serial.println(p121); // Partie à gauche du "=" à gauche du "+"
//Serial.println(p122); // Partie à droite du "=" à gauche du "+"
//Serial.println(p221); // Partie à gauche du "=" à droite du "+"
//Serial.println(p222); // Partie à droite du "=" à droite du "+"
//********************************1er Relai*****************************************
//---------------------conversion du numéro du 1er relai----------------------------
if (strcmp(p121,"R1")==0)
variable.numRelai=1; // Si on lit R1, on affecte à numRelai la valeur 1
else if (strcmp(p121,"R2")==0)
variable.numRelai=2; // Si on lit R2, on affecte à numRelai la valeur 2
else
variable.numRelai=0; // Si on lit ni R1 ni R2, le numéro du relai est 0
// Serial.println(variable.numRelai); // affiche le résultat de la conversion
//----------------------conversion de l'etat du 1er relai----------------------------
if (strcmp(p122,"ON")==0)
variable.etatRelai=1; // si on lit ON, on affecte à etatRelai la valeur 1
else if (strcmp(p122,"OFF")==0)
variable.etatRelai=0; // Si on lit OFF, on affecte à etatRelai la valeur 0
else
variable.etatRelai=5; // Si on lit ni ON ni OFF, on affecte à etatRelai la valeur 5 (à changer si necéssaire)
// Serial.println(variable.etatRelai);
//********************************2ème Relai*****************************************//Nouveau
//---------------------conversion du numéro du 2ème relai----------------------------
if (strcmp(p221,"R1")==0)
variable.numRelai2=1; // Si on lit R1, on affecte à numRelai la valeur 1
else if (strcmp(p221,"R2")==0)
variable.numRelai2=2; // Si on lit R2, on affecte à numRelai la valeur 2
else
variable.numRelai2=0; // Si on lit ni R1 ni R2, le numéro du relai est 0
// Serial.println(variable.numRelai); // affiche le résultat de la conversion
//----------------------conversion de l'etat du 2ème relai----------------------------
if (strcmp(p222,"ON")==0)
variable.etatRelai2=1; // si on lit ON, on affecte à etatRelai la valeur 1
else if (strcmp(p222,"OFF")==0)
variable.etatRelai2=0; // Si on lit OFF, on affecte à etatRelai la valeur 0
else
variable.etatRelai2=5; // Si on lit ni ON ni OFF, on affecte à etatRelai la valeur 5 (à changer si necéssaire)
// Serial.println(variable.etatRelai);
// Affectation des paramètres lu dans le fichier .csv
switch(ligne){
case 1:
Etape[0][0]=variable.numRelai;
Etape[0][1]=variable.etatRelai;
Etape[0][2]=variable.numRelai2; //Nouveau
Etape[0][3]=variable.etatRelai2; //Nouveau
break;
case 2 :
Etape[1][0]=variable.numRelai;
Etape[1][1]=variable.etatRelai;
Etape[1][2]=variable.numRelai2; //Nouveau
Etape[1][3]=variable.etatRelai2; //Nouveau
break;
case 4 :
Etape[2][0]=variable.numRelai;
Etape[2][1]=variable.etatRelai;
Etape[2][2]=variable.numRelai2;//Nouveau
Etape[2][3]=variable.etatRelai2; //Nouveau
break;
case 6 :
Etape[3][0]=variable.numRelai;
Etape[3][1]=variable.etatRelai;
Etape[3][2]=variable.numRelai2;//Nouveau
Etape[3][3]=variable.etatRelai2; //Nouveau
break;
case 8 :
Etape[4][0]=variable.numRelai;
Etape[4][1]=variable.etatRelai;
Etape[4][2]=variable.numRelai2;//Nouveau
Etape[4][3]=variable.etatRelai2; //Nouveau
break;
case 10 :
Etape[5][0]=variable.numRelai;
Etape[5][1]=variable.etatRelai;
Etape[5][2]=variable.numRelai2;//Nouveau
Etape[5][3]=variable.etatRelai2; //Nouveau
break;
case 12 :
Etape[6][0]=variable.numRelai;
Etape[6][1]=variable.etatRelai;
Etape[6][2]=variable.numRelai2;//Nouveau
Etape[6][3]=variable.etatRelai2; //Nouveau
break;
case 14 :
Etape[7][0]=variable.numRelai;
Etape[7][1]=variable.etatRelai;
Etape[7][2]=variable.numRelai2;//Nouveau
Etape[7][3]=variable.etatRelai2; //Nouveau
}
}
for (int l=0; l<8; l++)
{
Serial.print("Etape[");
Serial.print(l);
Serial.print("]: ");
for (int c=0; c<4; c++)//Nouveau
{
Serial.print(Etape[l][c]);
if (c==0)
Serial.print(',');
else
Serial.println();
}
}
}
C'est juste une question de faire le saut de ligne à la fin de la ligne et non en plein milieu
modifie comme ceci
for (int l = 0; l < 8; l++)
{
Serial.print("Etape[");
Serial.print(l);
Serial.print("]: ");
for (int c = 0; c < 4; c++) //Nouveau
{
Serial.print(Etape[l][c]);
if (c < 3)
Serial.print(',');
else
Serial.println();
}
}