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"
}
}
}