#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; }