nouveau fichier main2 qui simule le cardiac sensor avec des centaines de mesures par seconde
This commit is contained in:
parent
33c9789fb2
commit
3e0937c6d0
|
|
@ -2,17 +2,16 @@
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"configurations": [
|
"configurations": [
|
||||||
{
|
{
|
||||||
"name": "Debug C++",
|
"name": "Debug main2.cpp",
|
||||||
"type": "cppdbg",
|
"type": "cppdbg",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"program": "${workspaceFolder}/main",
|
"program": "${workspaceFolder}/main2.exe",
|
||||||
"args": [],
|
"args": [],
|
||||||
"stopAtEntry": false,
|
"stopAtEntry": false,
|
||||||
"cwd": "${workspaceFolder}",
|
"cwd": "${workspaceFolder}",
|
||||||
"environment": [],
|
"environment": [],
|
||||||
"externalConsole": true,
|
"externalConsole": true,
|
||||||
"MIMode": "gdb",
|
"MIMode": "gdb",
|
||||||
"miDebuggerPath": "C:/MinGW/bin/gdb.exe", // <- adjust this path to your Windows gdb
|
|
||||||
"setupCommands": [
|
"setupCommands": [
|
||||||
{
|
{
|
||||||
"description": "Enable pretty-printing for gdb",
|
"description": "Enable pretty-printing for gdb",
|
||||||
|
|
@ -20,7 +19,8 @@
|
||||||
"ignoreFailures": true
|
"ignoreFailures": true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"preLaunchTask": "C/C++: g++.exe build active file"
|
"preLaunchTask": "build-main2",
|
||||||
|
"miDebuggerPath": "C:/MinGW/bin/gdb.exe"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
14
main.cpp
14
main.cpp
|
|
@ -15,6 +15,9 @@ const int bufferSize = 60480; // une semaine à 1 mesure/10s
|
||||||
int historique[bufferSize];
|
int historique[bufferSize];
|
||||||
int index = 0;
|
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 ===
|
// === Simule la récupération de données du capteur ===
|
||||||
int acquerirDonnees() {
|
int acquerirDonnees() {
|
||||||
// Ici tu brancherais ton ADC ou capteur réel
|
// Ici tu brancherais ton ADC ou capteur réel
|
||||||
|
|
@ -26,6 +29,15 @@ int acquerirDonnees() {
|
||||||
return fakeBPM;
|
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 ===
|
// === Calcule le BPM à partir d'une série de battements ===
|
||||||
int calculerBPM(const std::vector<int>& battements) {
|
int calculerBPM(const std::vector<int>& battements) {
|
||||||
// Moyenne simple des valeurs simulées
|
// Moyenne simple des valeurs simulées
|
||||||
|
|
@ -80,7 +92,7 @@ int main() {
|
||||||
alerter(bpm);
|
alerter(bpm);
|
||||||
}
|
}
|
||||||
|
|
||||||
sleep(1); // simulation de délai entre mesures
|
usleep(2); // simulation de délai entre mesures: 500 mesures par seconde
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,80 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
#include <chrono>
|
||||||
|
#include <thread>
|
||||||
|
#include <cstdlib> // Pour rand()
|
||||||
|
#include <ctime> // Pour srand()
|
||||||
|
#include <unistd.h> // 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<unsigned int>(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<std::chrono::milliseconds>(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;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue