Bonjour à tous,
Je suis sur un projet qui permet de mesurer la température et l'humidité dans une pièce, je dois enregistrer toutes les 30 secondes pendant 24h donc 2880 fois par jour.
J'utilise donc une carte sd pour pouvoir enregistrer les valeurs.
J'arrive à enregistrer les valeurs les unes à la suite des autres et de choisir à l'endroit où j'écris.
J'aimerais enregistrer dans la carte sd toutes les 10 valeurs et que la dernière valeur enregistré soit à la première ligne donc inverser l'ordre.
Je n'arrive pas à décaler les valeurs de 10 lignes, soit je n'ai pas de décalage soit j'ai un décalage mais pas de 10 lignes et j'ai des valeurs qui sont supprimés ou toutes les valeurs ont été supprimés.
float tab[60][3]; //tableau pour enregistrer les valeurs []liges []colonnes
int n = 0;
int m = 0;
int o = 0;
int A = 1;
int taille_tab = 10;
int humidite = 0;
float temperature = 0;
int pos1;
int pos2;
int pos3;
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include "SparkFun_SCD30_Arduino_Library.h" //Click here to get the library: http://librarymanager/All#SparkFun_SCD30
SCD30 airSensor;
File tab_SD;
void setup()
{
delay(100);
Serial.begin(115200);
Wire.begin();
while (airSensor.begin() == false)
{
Serial.println("Air sensor not detected. Please check wiring. Freezing...");
delay(200);
}
airSensor.setMeasurementInterval(3);
//The SCD30 has data ready every two seconds
if (!SD.begin(6)) {
Serial.println("initialization failed!");
delay(10);
//return;
}
Serial.println("initialization done.");
if (SD.exists("tab.csv")) {
Serial.println("tab.csv exists.");
SD.remove("tab.csv");
if (!SD.exists("tab.csv"))
{
Serial.println("fichier supprimé");
}
} else {
Serial.println("tab.csv doesn't exist.");
}
tab_SD = SD.open("tab.csv", FILE_WRITE);
if (tab_SD) {
tab_SD.print("temperature");
tab_SD.print(";");
tab_SD.print("humidite");
tab_SD.print(";");
tab_SD.println("n");
pos1 = tab_SD.position();
Serial.print("position 1: ");
Serial.println(pos1);
Serial.println("début écriture des 0");
for (int j = 0; j < 2880; j++)
{
tab_SD.print("00.00");
tab_SD.write(0x3B);
tab_SD.print("00.00");
tab_SD.write(0x3B);
tab_SD.println("00.00");
// tab_SD.println(n);
}
Serial.println("fin écriture des 0");
Serial.println("");
delay(1000);
// close the file:
tab_SD.close();
}
}
void loop()
{
if (airSensor.dataAvailable()) {
temperature = airSensor.getTemperature();
humidite = airSensor.getHumidity();
for (int i = taille_tab; i >= 1; i--)
{
tab[i][1] = tab[i - 1][1] ;
tab[i][2] = tab[i - 1][2];
tab[i][3] = tab[i - 1][3];
}
n++;
m++;
o = m;
Serial.println("SCD30");
Serial.print(temperature);
Serial.println(" C");
tab[0][1] = temperature;
Serial.print(humidite);
Serial.println("%");
//Serial.println(airSensor.getCO2());
Serial.println(n);
Serial.println();
tab[0][2] = humidite;
tab[0][3] = n;
Serial.println(tab[0] [1]);
Serial.println(tab[1] [1]);
Serial.println(tab[2] [1]);
Serial.println(tab[3] [1]);
Serial.println(tab[4] [1]);
Serial.println();
Serial.println(tab[0][2]);
Serial.println(tab[1][2]);
Serial.println(tab[2][2]);
Serial.println(tab[3][2]);
Serial.println(tab[4][2]);
Serial.println();
Serial.println("-------------------");
if (m >= taille_tab)
{
tab_SD = SD.open("tab.csv", O_READ | O_WRITE);
tab_SD.seek(24);
Serial.println(tab_SD);
if (tab_SD) {
Serial.println("écrit dans tab.CSV...");
Serial.println("ecriture dans la carte sd");
//tab_SD.print(0);
tab_SD.seek(24);
for (int k = 0; k < taille_tab; k++)
{
pos2 = tab_SD.position();
Serial.print("position 2: ");
Serial.println(pos2);
tab_SD.print(tab[k][1]);
tab_SD.write(0x3B);
tab_SD.print(tab[k][2]);
tab_SD.write(0x3B);
tab_SD.print(tab[k][3]);
tab_SD.write(13);
}
// close the file:
tab_SD.close();
Serial.println("fait.");
}
else {
// if the file didn't open, print an error:
Serial.println("erreur d'ouverture tab.CSV");
}
Serial.println("pause");
delay(2000);
Serial.println("fin pause");
Serial.println("décallage");
m = 0;
}
if (o >= taille_tab)
{
tab_SD = SD.open("tab.csv", O_READ | O_WRITE);
if (tab_SD) {
tab_SD.seek(24);
for (int p = 0; p < 2 ; p++)
{
// tab_SD.print(00.00);
// tab_SD.write(0x3B);
// tab_SD.print(00.00);
// tab_SD.write(0x3B);
// tab_SD.print(00.00);
tab_SD.print("a");
tab_SD.print(";");
tab_SD.print("b");
tab_SD.print(";");
tab_SD.println("c");
pos3 = tab_SD.position();
Serial.print("position 3: ");
Serial.println(pos3);
}
A++;
Serial.println("fin decallage");
delay(2000);
Serial.println("reprise");
tab_SD.close();
}
o = 0;
}
}
}
Ici j'ai essayé avec un décalage de 2 lignes.
Si quelqu'un à une idée pour régler mon problème ça m'aiderais beaucoup.