96 lines
3.1 KiB
C++
96 lines
3.1 KiB
C++
#include <iostream>
|
|
#include <vector>
|
|
#include <chrono>
|
|
#include <cstdlib> // rand()
|
|
#include <ctime> // time()
|
|
#include <windows.h>
|
|
|
|
// === Parameters ===
|
|
//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 ===// === 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 ===
|
|
void activerBuzzer() {
|
|
std::cout << " Buzzer active (ALERTE CARDIAQUE)!" << std::endl;
|
|
}
|
|
|
|
// === Simulate vibration motor activation ===
|
|
void activerVibreur() {
|
|
std::cout << " Vibreur active (ALERTE CARDIAQUE)!" << std::endl;
|
|
}
|
|
|
|
// === Simulate Bluetooth transmission ===
|
|
void envoyerMessageBluetooth(bool urgence) {
|
|
std::cout << " Message Bluetooth envoye: " << (urgence ? "TRUE (urgence)" : "FALSE (normal)") << std::endl;
|
|
}
|
|
|
|
// === Main program ===
|
|
int main() {
|
|
|
|
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();
|
|
//std::cout << "Signal: " << signal << std::endl; // verify the signal detected
|
|
|
|
// Détection de battement
|
|
if (!battementDetecte) { //signal > THRESHOLD &&
|
|
auto maintenant = std::chrono::steady_clock::now();
|
|
auto intervalle = std::chrono::duration_cast<std::chrono::milliseconds>(maintenant - dernierBattement).count();
|
|
|
|
int bpm = generateRandomHeartRate();
|
|
std::cout << " BPM mesure : " << bpm;
|
|
|
|
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{
|
|
i+=1;
|
|
}
|
|
}
|
|
std::cout << std::endl;
|
|
|
|
dernierBattement = maintenant;
|
|
battementDetecte = true;
|
|
lastBPM =bpm;
|
|
std::cout << lastBPM << std::endl;
|
|
|
|
}else {
|
|
battementDetecte = false;// Prêt pour détecter le prochain battement
|
|
}
|
|
|
|
Sleep(SAMPLE_INTERVAL_MS); // expects milliseconds
|
|
}
|
|
|
|
return 0;
|
|
}
|