Problème code données parasites sur la carte SD

Salut à tous, je vous explique j'ai un problème mon code est censé récupérer sur une carte SD la mise sous tension et aussi le changement d'état de la broche Rx. Quand je fais seulement la mise sous tension mon code fonctione tres bien et j'ai bien la donnée qui rentre sous cette forme :

    Capteur ICP-10111   Mise sous tension      

Date: 2023/9/27
Heure: 11:54:1

Pression : 1.0068 bar
Température : 26.16 °C


cependant des que je verifie l'état de ma boucle Rx dans la boucle while j'obtiens des données "parasites" comme ceci : (PS les print BOUCLE SOUS tension et BOUCLE REVEIL sont pour vérifier si le code parasites v=rpovenait d'en haut ou de la boucle)


    Capteur ICP-10111   Mise sous tension      

BOUCLE SOUS TENSIONDate: 2023/9/27
Heure: 11:54:1

Pression : 1.0068 bar
Température : 26.16 °C


BOUCLE REVEIL __________________________________________________
Capteur ICP-10111 Reveil de l'outil


BONJOURDate: 2023/9/27
Heure: 11:54:1

Pression : 1.0068 bar
Température : 26.19 °C



BOUCLE SOUS TENSIONDate: 2023/9/27
Heure: 11:54:20

Pression : 1.0068 bar
Température : 26.19 °C



BOUCLE SOUS TENSIONDate: 2023/9/27
Heure: 11:54:23

Pression : 1.0068 bar
Température : 26.19 °C


BOUCLE REVEIL __________________________________________________
Capteur ICP-10111 Reveil de l'outil


BONJOURDate: 2023/9/27
Heure: 11:54:23

Pression : 1.0068 bar
Température : 26.18 °C


Voici un exemple de donnée, les donnes parasites sont visibles car il n'y a aucun marquage du type CAPTEUR ICP-10111 REVEIL OUTIL ou CAPTEUR ICP-10111 MISE SOUS TENSION

voici mon code :

#include <DFRobot_ICP10111.h>
#include <SD.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <RTClib.h> 

//def des pins 
const int chipSelect = 4;
const int rxPin = 0; 

RTC_DS3231 rtc; 
DFRobot_ICP10111 icp;

bool miseSousTensionEnregistree = false; // Variable pour suivre si les données "mise sous tension" ont été enregistrées 

void setup(void)
{
  
    Serial.begin(115200);
    pinMode(rxPin, INPUT);

    while(icp.begin() != 0){
      Serial.println("Failed to initialize the sensor");
    }
    Serial.println("Success to initialize the sensor");

    icp.setWorkPattern(icp.eNormal);
// permet d'établir la connexion avec carte SD
    if (!SD.begin(chipSelect)) {
        Serial.println("Erreur lors de l'initialisation de la carte SD");
        return;
    }

    rtc.begin();
}

void loop(void)
{
    DateTime now = rtc.now();
    int etatBrocheRx = digitalRead(rxPin);
// OUVERTURE d'un FICHIER donnees.txt avec toutes les données 
    File dataFile = SD.open("donnees.txt", FILE_WRITE);

    if (dataFile) {
        dataFile.print("\n");
        dataFile.print(" __________________________________________________");
        dataFile.print("\n");

        // Vérifiez si les données "mise sous tension" ont déjà été enregistrées
        if (!miseSousTensionEnregistree) {
            dataFile.print("        Capteur ICP-10111   Mise sous tension      ");
            dataFile.print("\n");
            dataFile.print(" __________________________________________________");
            dataFile.print("\n");
            miseSousTensionEnregistree = true; // Marquez que les données "mise sous tension" ont été enregistrées
        }

        dataFile.print("\n");
        dataFile.print("BOUCLE SOUS TENSION");
        
        dataFile.print("Date: ");
        dataFile.print(now.year(), DEC);
        dataFile.print('/');
        dataFile.print(now.month(), DEC);
        dataFile.print('/');
        dataFile.print(now.day(), DEC);
        dataFile.print(' ');
        dataFile.print("\n");
        dataFile.print("Heure: ");
        dataFile.print(now.hour(), DEC);
        dataFile.print(':');
        dataFile.print(now.minute(), DEC);
        dataFile.print(':');
        dataFile.print(now.second(), DEC);
        dataFile.println();

        dataFile.print("\n");
        dataFile.print("Pression : ");
        dataFile.print(icp.getAirPressure()* 0.00001,4);
        dataFile.print(" bar");

        dataFile.print("\n");
        dataFile.print("Température : ");
        dataFile.print(icp.getTemperature());
        dataFile.println(" °C");

        dataFile.print("\n" );
        dataFile.print("-------------------------------------------------------------" );
        dataFile.print("\n" );

        dataFile.close();
    }
    else{
        Serial.print("erreur");
    }
//delay(1000);
//boucle infinie permettant de détecter la mise sous tension 
    while (true) {
        int oldEtat = etatBrocheRx;
       
        int etatBrocheRx = digitalRead(rxPin);
        
        // Comparez l'état actuel avec l'ancien état pour détecter les transitions
        if (etatBrocheRx != oldEtat) {
            if (etatBrocheRx == HIGH) {
                Serial.println("État de la broche Rx : HAUT");

                // Enregistrement des données lorsque l'état est "HAUT"
                File dataFile = SD.open("donnees.txt", FILE_WRITE);
                if (dataFile) {
                     //delay(1000);
                    dataFile.print("\n");
                     dataFile.print("BOUCLE REVEIL");
                    dataFile.print(" __________________________________________________");
                    dataFile.print("\n");
                    dataFile.print("        Capteur ICP-10111  Reveil de l'outil    ");
                    dataFile.print("\n");
                    dataFile.print(" __________________________________________________");
                    dataFile.print("\n");
                    dataFile.print("\n");
                    dataFile.print("BONJOUR");
                    dataFile.print("Date: ");
                    dataFile.print(now.year(), DEC);
                    dataFile.print('/');
                    dataFile.print(now.month(), DEC);
                    dataFile.print('/');
                    dataFile.print(now.day(), DEC);
                    dataFile.print(' ');
                    dataFile.print("\n");
                    dataFile.print("Heure: ");
                    dataFile.print(now.hour(), DEC);
                    dataFile.print(':');
                    dataFile.print(now.minute(), DEC);
                    dataFile.print(':');
                    dataFile.print(now.second(), DEC);
                    dataFile.println();
                    dataFile.print("\n");
                    dataFile.print("Pression : ");
                    dataFile.print(icp.getAirPressure()* 0.00001,4);
                    dataFile.print(" bar");
                    dataFile.print("\n");
                    dataFile.print("Température : ");
                    dataFile.print(icp.getTemperature());
                    dataFile.println(" °C");

                    dataFile.print("\n" );
                    dataFile.print("-------------------------------------------------------------");
                    dataFile.print("\n" );
                    dataFile.close();
                    //delay(1000);
                } else {
                    Serial.println("Erreur lors de l'ouverture du fichier pour l'état HAUT");
                }
            } else {
                Serial.println("État de la broche Rx : BAS");
            }
            break; // Sortez de la boucle while une fois que vous avez enregistré les données pour l'état "HAUT"
        }
    }
}

pourquoi ne pas laisser la loop faire cela?

sinon le

      break; // Sortez de la boucle while une fois que vous avez enregistré les données pour l'état "HAUT"

n'est pas au niveau d'indentation d'enregistrement des données, il se fait à chaque changement d'état (et s'il y a du rebond...)

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.