From 3e0937c6d0eb5b3690614d4defa734afe271cd34 Mon Sep 17 00:00:00 2001 From: Gaetan Bruyant Date: Tue, 29 Apr 2025 10:58:37 +0200 Subject: [PATCH] nouveau fichier main2 qui simule le cardiac sensor avec des centaines de mesures par seconde --- .vscode/launch.json | 8 ++--- main.cpp | 14 +++++++- main2.cpp | 80 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 97 insertions(+), 5 deletions(-) create mode 100644 main2.cpp diff --git a/.vscode/launch.json b/.vscode/launch.json index 781cecf..9be484f 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -2,17 +2,16 @@ "version": "0.2.0", "configurations": [ { - "name": "Debug C++", + "name": "Debug main2.cpp", "type": "cppdbg", "request": "launch", - "program": "${workspaceFolder}/main", + "program": "${workspaceFolder}/main2.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "MIMode": "gdb", - "miDebuggerPath": "C:/MinGW/bin/gdb.exe", // <- adjust this path to your Windows gdb "setupCommands": [ { "description": "Enable pretty-printing for gdb", @@ -20,7 +19,8 @@ "ignoreFailures": true } ], - "preLaunchTask": "C/C++: g++.exe build active file" + "preLaunchTask": "build-main2", + "miDebuggerPath": "C:/MinGW/bin/gdb.exe" } ] } diff --git a/main.cpp b/main.cpp index e6a34ae..d5a1c83 100644 --- a/main.cpp +++ b/main.cpp @@ -15,6 +15,9 @@ const int bufferSize = 60480; // une semaine à 1 mesure/10s int historique[bufferSize]; int index = 0; +const int SAMPLE_RATE_MS = 10; // 100 Hz -> une mesure chaque 10 ms +const int THRESHOLD = 500; // seuil pour détecter un battement (à ajuster selon notre capteur) + // === Simule la récupération de données du capteur === int acquerirDonnees() { // Ici tu brancherais ton ADC ou capteur réel @@ -26,6 +29,15 @@ int acquerirDonnees() { return fakeBPM; } +// Vrai fonction qui marcherait avec le capteur +int acquerirSignal() { + // Simulation d'un signal : bruit + pics + static int t = 0; + t++; + if (t % 100 == 0) return 700; // simulate un pic toutes les 1 seconde + return 300 + rand() % 100; // bruit autour de 300-400 +} + // === Calcule le BPM à partir d'une série de battements === int calculerBPM(const std::vector& battements) { // Moyenne simple des valeurs simulées @@ -80,7 +92,7 @@ int main() { alerter(bpm); } - sleep(1); // simulation de délai entre mesures + usleep(2); // simulation de délai entre mesures: 500 mesures par seconde } return 0; diff --git a/main2.cpp b/main2.cpp new file mode 100644 index 0000000..b0137fb --- /dev/null +++ b/main2.cpp @@ -0,0 +1,80 @@ +#include +#include +#include +#include +#include // Pour rand() +#include // Pour srand() +#include // pour usleep() + +// === Paramètres === +const int BPM_MIN = 50; +const int BPM_MAX = 120; +const int SAMPLE_INTERVAL_MS = 10; // Prendre une mesure toutes les 10 ms +const int THRESHOLD = 550; // Seuil pour détecter un battement +const int NOISE_LEVEL = 100; // Niveau de bruit du signal + +// === Initialiser le générateur de nombres aléatoires === +void initialiserRandom() { + srand(static_cast(time(0))); +} + +// === Simule les données reçues du capteur cardiaque === +int simulerSignalCardiaque() { + static int t = 0; + t++; + + // Créer un pic toutes les 800 ms environ (~75 BPM) + if (t % 80 == 0) { + return 700 + rand() % 50; // Pic entre 700-750 + } + else { + return 300 + rand() % NOISE_LEVEL; // Bruit entre 300 et 400 + } +} + +// === Fonction principale === +int main() { + initialiserRandom(); + + bool battementDetecte = false; + auto dernierBattement = std::chrono::steady_clock::now(); + + std::cout << "Démarrage de la simulation du capteur cardiaque...\n"; + + while (true) { + int signal = simulerSignalCardiaque(); + + // Afficher la valeur brute du signal simulé (optionnel pour debug) + // std::cout << "Signal: " << signal << std::endl; + + // Détection de battement + if (signal > THRESHOLD && !battementDetecte) { + auto maintenant = std::chrono::steady_clock::now(); + auto intervalle = std::chrono::duration_cast(maintenant - dernierBattement).count(); + + if (intervalle > 300) { // Filtrer les battements trop proches (<300 ms = >200 BPM) + int bpm = 60000 / intervalle; + std::cout << " BPM mesuré : " << bpm; + + if (bpm < BPM_MIN || bpm > BPM_MAX) { + std::cout << " [Anomalie]"; + } + std::cout << std::endl; + + dernierBattement = maintenant; + } + + battementDetecte = true; + } + + // Prêt pour détecter un prochain battement + if (signal < THRESHOLD) { + battementDetecte = false; + } + + // Pause entre deux lectures du capteur + usleep(SAMPLE_INTERVAL_MS); + } + + return 0; +}