diff --git a/main4.cpp b/main4.cpp index 558b2f3..e322fd8 100644 --- a/main4.cpp +++ b/main4.cpp @@ -6,28 +6,18 @@ #include // === Parameters === -const int BPM_MIN = 50; -const int BPM_MAX = 120; -const int SAMPLE_INTERVAL_MS = 100; // Sampling every 10 ms -const int THRESHOLD = 550; // Threshold for heartbeat detection -const int NOISE_LEVEL = 100; // Simulated noise level +//const int BPM_MIN = 50; +//const int BPM_MAX = 120; +const int SAMPLE_INTERVAL_MS = 1000; // Sampling every 10 ms +const int THRESHOLD_CARDIAC_ARREST = 2; +//const int NOISE_LEVEL = 100; // Simulated noise level -// === Initialize random generator === -void initialiserRandom() { - srand(static_cast(time(0))); -} -// === Simulate heart signal from sensor === -int simulerSignalCardiaque() { - static int t = 0; - t++; - - // Simulate a peak every ~800 ms (≈75 BPM) - if (t % 80 == 0) { - return 700 + rand() % 50; // Simulated peak - } else if (t % 10==0){ - return 300 + rand() % NOISE_LEVEL; // Background noise - } +// === Initialize random generator ===// === Simulate heart signal from sensor === +int generateRandomHeartRate() { + //int bpm = 30 + rand() % 111; // génère un BPM entre 30 et 140 + int bpm = rand() % 141; // génère un BPM entre 0 et 140 + return bpm; } // === Simulate buzzer activation === @@ -47,46 +37,55 @@ void envoyerMessageBluetooth(bool urgence) { // === Main program === int main() { - initialiserRandom(); bool battementDetecte = false; auto dernierBattement = std::chrono::steady_clock::now(); std::cout << " Demarrage de la simulation du capteur cardiaque...\n"; + int i=0; + int lastBPM; while (true) { - int signal = simulerSignalCardiaque(); + //int signal = simulerSignalCardiaque(); //std::cout << "Signal: " << signal << std::endl; // verify the signal detected // Détection de battement - if (signal > THRESHOLD && !battementDetecte) { + if (!battementDetecte) { //signal > THRESHOLD && auto maintenant = std::chrono::steady_clock::now(); auto intervalle = std::chrono::duration_cast(maintenant - dernierBattement).count(); + + int bpm = generateRandomHeartRate(); + std::cout << " BPM mesure : " << bpm; - if (intervalle > 300) { // BPM > 200 => ignore - int bpm = 60000 / intervalle; - std::cout << " BPM mesure : " << bpm; - - bool anomalie = (bpm < BPM_MIN || bpm > BPM_MAX); - if (anomalie) { - std::cout << " [ANOMALIE]"; + if (bpm < 55 && bpm > 40){ + std::cout << " [BRADYCARDIA]" << std::endl; + activerVibreur(); + } else if(bpm < 140 && bpm > 110) { + std::cout << " [TACHYCARDIA]" << std::endl; + activerVibreur(); + }else if(bpm < 110 && bpm > 55){ + std::cout << " [NORMAL]" << std::endl; + envoyerMessageBluetooth(false); + } else if (bpm < 40){ + if (i>THRESHOLD_CARDIAC_ARREST && lastBPM < 40){ + i=0; + std::cout << " [CARDIAC ARREST]" << std::endl; activerBuzzer(); activerVibreur(); envoyerMessageBluetooth(true); - } else { - envoyerMessageBluetooth(false); - } - std::cout << std::endl; - - dernierBattement = maintenant; - } + }else{ + i+=1; + } + } + std::cout << std::endl; + dernierBattement = maintenant; battementDetecte = true; - } + lastBPM =bpm; + std::cout << lastBPM << std::endl; - // Prêt pour détecter le prochain battement - if (signal < THRESHOLD) { - battementDetecte = false; + }else { + battementDetecte = false;// Prêt pour détecter le prochain battement } Sleep(SAMPLE_INTERVAL_MS); // expects milliseconds diff --git a/test.cpp b/test.cpp index da9602f..b6eb9c5 100644 --- a/test.cpp +++ b/test.cpp @@ -1,9 +1,70 @@ #include -#include +#include #include +#include -int main() { - std::cout << "Sleeping..." << std::endl; - std::this_thread::sleep_for(std::chrono::seconds(1)); - std::cout << "Awake!" << std::endl; +// État du rythme cardiaque +enum class HeartRateState { + NORMAL, + BRADYCARDIA, + TACHYCARDIA +}; + +// Fonction pour générer un signal de battement cardiaque +std::vector generateHeartbeatSignal(HeartRateState state, int durationSeconds = 10, int sampleRate = 1000) { + int bpm; + switch (state) { + case HeartRateState::BRADYCARDIA: + bpm = 40 + rand() % 15; // 40-55 BPM + break; + case HeartRateState::TACHYCARDIA: + bpm = 110 + rand() % 30; // 110-140 BPM + break; + default: + bpm = 60 + rand() % 40; // 60-100 BPM + break; + } + + int totalSamples = durationSeconds * sampleRate; + int samplesPerBeat = (60.0 / bpm) * sampleRate; + + std::vector signal(totalSamples, 0.0f); + + for (int i = 0; i < totalSamples; i += samplesPerBeat) { + if (i < totalSamples) signal[i] = 1.0f; // Pic R + if (i + 1 < totalSamples) signal[i + 1] = 0.5f; + if (i + 2 < totalSamples) signal[i + 2] = 0.2f; + } + + return signal; } + +// Pause active sans utiliser thread +void waitMilliseconds(int ms) { + auto start = std::chrono::high_resolution_clock::now(); + while (std::chrono::duration_cast( + std::chrono::high_resolution_clock::now() - start).count() < ms) { + // boucle vide + } +} + +// Affichage du signal +void printSignal(const std::vector& signal, int sampleRate) { + for (size_t i = 0; i < signal.size(); ++i) { + std::cout << signal[i] << "\n"; + waitMilliseconds(1000 / sampleRate); + } +} + +// ----------- FONCTION PRINCIPALE ------------ +int main() { + std::cout << "Simulation d’un signal de battement cardiaque\n"; + + // Tu peux changer ici : NORMAL / BRADYCARDIA / TACHYCARDIA + HeartRateState state = HeartRateState::TACHYCARDIA; + + std::vector signal = generateHeartbeatSignal(state, 5, 100); // 5 secondes, 100 Hz + printSignal(signal, 100); + + return 0; +} \ No newline at end of file