From 70e01e558f4fa101a670d00c9155d2a652b7c74b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Gauthier?= Date: Mon, 27 Jun 2022 16:35:30 +0200 Subject: [PATCH] create readme.md and fix issue on recovery data array from file and adaptative array size frome the number of captors --- Code-C/average.c | 4 +- Code-C/fileGestion.c | 46 +++++++++++------- Code-C/getArray.c | 110 +++++++++++++++++++++++++++++++++++++++--- Code-C/main.c | 4 +- Code-C/simulateFlux.c | 2 +- README.md | 13 +++++ chaien.PNG | Bin 0 -> 28981 bytes 7 files changed, 149 insertions(+), 30 deletions(-) create mode 100644 README.md create mode 100644 chaien.PNG diff --git a/Code-C/average.c b/Code-C/average.c index 82c72c4..e913de7 100644 --- a/Code-C/average.c +++ b/Code-C/average.c @@ -11,7 +11,7 @@ */ void averageCalculation(long **p, double averageArray[]) { - printArrayData(p, nRowRawData, nCol); + // printArrayData(p, nRowRawData, nCol); printf("\n"); for (int i = 1; i < nCol; i++) { @@ -19,9 +19,7 @@ void averageCalculation(long **p, double averageArray[]) averageArray[i] = 0; while (j < nRowRawData) { - printf("pij = %ld\n", p[i][j]); averageArray[i - 1] += (double)p[i][j]; - // printf("%f , %ld\n", averageArray[i], p[i][j]); j++; } averageArray[i] /= nRowRawData; diff --git a/Code-C/fileGestion.c b/Code-C/fileGestion.c index 7749080..544d311 100644 --- a/Code-C/fileGestion.c +++ b/Code-C/fileGestion.c @@ -1,37 +1,47 @@ #include "fileGestion.h" - /** * @brief function that delete nRow lign in the beginning of the file rawData.csv . This function is necessary to not deal with the same ligns over and over - * + * * @param nRow number of lign in the beginning of the file rawData.csv that has to be delete */ -void clearRawData(int nRow){ +void clearRawData(int nRow) +{ char buffer[256]; - FILE *f = fopen("newFile.csv","w+"); - FILE *g = fopen("rawData.csv","r"); - for(int i = 0; i < nRow; i++){ //first the program read the first nRow ligns of the csv file but do nothing - fgets(buffer , sizeof buffer , g); + FILE *f = fopen("newFile.csv", "w+"); + FILE *g = fopen("rawData.csv", "r"); + for (int i = 0; i < nRow; i++) + { // first the program read the first nRow ligns of the csv file but do nothing + fgets(buffer, sizeof buffer, g); } - while(1){ //then, till the end of the csv file it copy the lign to a new csv : newFile.csv - if(!fgets(buffer,sizeof buffer , g)) break; - fprintf(f,"%s",buffer); + while (1) + { // then, till the end of the csv file it copy the lign to a new csv : newFile.csv + if (!fgets(buffer, sizeof buffer, g)) + break; + fprintf(f, "%s", buffer); } - remove("rawData.csv"); rename("newFile.csv", "rawData.csv"); //finally we remove the original file and rename the new one to replace rawData.csv - fclose(f); fclose(g); + remove("rawData.csv"); + rename("newFile.csv", "rawData.csv"); // finally we remove the original file and rename the new one to replace rawData.csv + fclose(f); + fclose(g); } /** * @brief use to write one lign in the file "fileName" - * + * * @param array array that contaign all the values to write in the file * @param nCol size of the array (correspond to the number of captor used) */ -void appendDataInFile(char* fileName , double array[], int nCol){ - FILE *f = fopen(fileName,"a+"); - for(int i = 0 ; i < nCol ; i++){ - if( i < nCol-1){ +void appendDataInFile(char *fileName, double array[], int nCol) +{ + FILE *f = fopen(fileName, "a+"); + for (int i = 0; i < nCol; i++) + { + if (i < nCol - 1) + { fprintf(f, "%f , ", array[i]); - } else { + } + else + { fprintf(f, "%f\n", array[i]); } } diff --git a/Code-C/getArray.c b/Code-C/getArray.c index f276180..1fe1691 100644 --- a/Code-C/getArray.c +++ b/Code-C/getArray.c @@ -27,7 +27,7 @@ double **getDoubleArray(int N, int M) /* Allocate the array */ void fillArrayWithRawData(char *rawDataFileName, long **p, int N, int M) { - int i, j; + int i = 0, j; char *buffer; size_t bufsize = 200; buffer = (char *)malloc(bufsize * sizeof(char)); @@ -35,20 +35,118 @@ void fillArrayWithRawData(char *rawDataFileName, long **p, int N, int M) FILE *f = fopen(rawDataFileName, "r"); - for (i = 0; i < N; i++) + long t, c1, c2, c3, c4, c5, c6, c7, c8; + switch (M) { - long t, c1, c2, c3; - while (fscanf(f, "%ld,%ld,%ld,%ld\n", &t, &c1, &c2, &c3) != EOF) - { // séparation valeur par virgule initiale : csv - // printf("%ld,%ld,%ld,%ld\n", t, c1, c2, c3); + case 2: + while (fscanf(f, "%ld,%ld[^\n] ", &t, &c1) != EOF) + { + p[i][0] = t; + p[i][1] = c1; + i++; + } + break; + case 3: + while (fscanf(f, "%ld,%ld,%ld[^\n] ", &t, &c1, &c2) != EOF) + { + p[i][0] = t; + p[i][1] = c1; + p[i][2] = c2; + i++; + } + break; + case 4: + while (fscanf(f, "%ld,%ld,%ld,%ld[^\n] ", &t, &c1, &c2, &c3) != EOF) + { p[i][0] = t; p[i][1] = c1; p[i][2] = c2; p[i][3] = c3; + i++; } + break; + case 5: + while (fscanf(f, "%ld,%ld,%ld,%ld,%ld[^\n] ", &t, &c1, &c2, &c3, &c4) != EOF) + { + p[i][0] = t; + p[i][1] = c1; + p[i][2] = c2; + p[i][3] = c3; + p[i][4] = c4; + i++; + } + break; + case 6: + while (fscanf(f, "%ld,%ld,%ld,%ld,%ld,%ld[^\n] ", &t, &c1, &c2, &c3, &c4, &c5) != EOF) + { + p[i][0] = t; + p[i][1] = c1; + p[i][2] = c2; + p[i][3] = c3; + p[i][4] = c4; + p[i][5] = c5; + i++; + } + break; + case 7: + while (fscanf(f, "%ld,%ld,%ld,%ld,%ld,%ld,%ld[^\n] ", &t, &c1, &c2, &c3, &c4, &c5, &c6) != EOF) + { + p[i][0] = t; + p[i][1] = c1; + p[i][2] = c2; + p[i][3] = c3; + p[i][4] = c4; + p[i][5] = c5; + p[i][6] = c6; + i++; + } + break; + case 8: + while (fscanf(f, "%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld[^\n] ", &t, &c1, &c2, &c3, &c4, &c5, &c6, &c7) != EOF) + { + p[i][0] = t; + p[i][1] = c1; + p[i][2] = c2; + p[i][3] = c3; + p[i][4] = c4; + p[i][5] = c5; + p[i][6] = c6; + p[i][7] = c7; + i++; + } + break; + case 9: + while (fscanf(f, "%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld[^\n] ", &t, &c1, &c2, &c3, &c4, &c5, &c6, &c7, &c8) != EOF) + { + p[i][0] = t; + p[i][1] = c1; + p[i][2] = c2; + p[i][3] = c3; + p[i][4] = c4; + p[i][5] = c5; + p[i][6] = c6; + p[i][7] = c7; + p[i][8] = c8; + i++; + } + break; + default: + printf("bad column size -> time + nbr captor\n"); } + + /************** Debug part **************/ + // for (int ii = 0; ii < nRowRawData; ii++) + // { + // for (int y = 0; y < nCol; y++) + // { + // printf("%ld,", p[ii][y]); + // if (y == nCol - 1) + // printf("lol\n"); + // } + // } fclose(f); } + /** * @brief print all the element of a bidimensionnal array p of shape : N x M */ diff --git a/Code-C/main.c b/Code-C/main.c index 3b90d1a..ec59c73 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -104,7 +104,7 @@ void *threadCalculGrowthRate(void *vargp) powerFunction(fileName, dataLignPw); averageFunction(fileName, dataLignAv); growthRateFunction(dataLignPw, "growthRatePw.csv"); - growthRateFunction(dataLignPw, "growthRateAv.csv"); + growthRateFunction(dataLignAv, "growthRateAv.csv"); } else @@ -126,7 +126,7 @@ void *threadCalculGrowthRate(void *vargp) growthRateFunction(dataLignPw, "growthRatePw.csv"); growthRateFunction(dataLignPw, "growthRateAv.csv"); } - // remove(fileName); + remove(fileName); } } return NULL; diff --git a/Code-C/simulateFlux.c b/Code-C/simulateFlux.c index 14b5e2e..fb93392 100644 --- a/Code-C/simulateFlux.c +++ b/Code-C/simulateFlux.c @@ -176,7 +176,7 @@ bool writeOneRawData(FILE *rawDataFile) } cptData++; - // simul freq here + /************** simul freq here **************/ // struct timespec ts; // ts.tv_sec = 0; // ts.tv_nsec = 4 * 1000000; diff --git a/README.md b/README.md new file mode 100644 index 0000000..d2cd6a1 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# [Robot Go West](https://projets.cohabit.fr/redmine/projects/communication-racinaire/wiki/Robot_Go-West) + +### Introduction +This projet is a part of larger projet [_Communication Racinaire_](https://projets.cohabit.fr/redmine/projects/communication-racinaire/wiki/Wiki#section-8) which aims to drive plante into the direction of the sun. + +When a plant received the solar radiation, a **difference of potential** will be created inside the plant. This physical reaction interest us to **measure** it and **interpret** the signal to drive the robot. + + + +## Embedded C sources + +## Graphic visualization Python script + diff --git a/chaien.PNG b/chaien.PNG new file mode 100644 index 0000000000000000000000000000000000000000..afd17da66948ab309b1ccfda88b7af1e54e6ffe0 GIT binary patch literal 28981 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

@f|vx0+dhDT|8)ZE3BT1`yvT@Q0H@zi$o25wj?< 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 Bj&uM3 literal 0 HcmV?d00001