75 lines
1.9 KiB
C++
75 lines
1.9 KiB
C++
#include <iostream>
|
||
#include <vector>
|
||
#include <chrono>
|
||
#include <thread>
|
||
|
||
// Seuils de BPM
|
||
const int BPM_MIN = 50;
|
||
const int BPM_MAX = 120;
|
||
|
||
// === Simule la récupération de données du capteur ===
|
||
int acquerirDonnees() {
|
||
// Ici tu brancherais ton ADC ou capteur réel
|
||
// Simulation d'une fréquence cardiaque variable
|
||
static int fakeBPM = 70 + rand() % 60 - 30;
|
||
return fakeBPM;
|
||
}
|
||
|
||
// === Calcule le BPM à partir d'une série de battements ===
|
||
int calculerBPM(const std::vector<int>& battements) {
|
||
// Moyenne simple des valeurs simulées
|
||
if (battements.empty()) return 0;
|
||
|
||
int somme = 0;
|
||
for (int bpm : battements) {
|
||
somme += bpm;
|
||
}
|
||
return somme / battements.size();
|
||
}
|
||
|
||
// === Vérifie si le BPM est dans la plage normale ===
|
||
bool verifierAnomalie(int bpm) {
|
||
return bpm < BPM_MIN || bpm > BPM_MAX;
|
||
}
|
||
|
||
// === Déclenche une alerte ===
|
||
void alerter(int bpm) {
|
||
std::cout << "⚠ Alerte : rythme cardiaque anormal (" << bpm << " BPM) !" << std::endl;
|
||
// Tu peux ici allumer une LED, déclencher un buzzer, etc.
|
||
}
|
||
|
||
// === Affiche les données sur un terminal ou un écran ===
|
||
void afficher(int bpm, bool anomalie) {
|
||
std::cout << "BPM actuel : " << bpm;
|
||
if (anomalie) {
|
||
std::cout << " [ANOMALIE]";
|
||
}
|
||
std::cout << std::endl;
|
||
}
|
||
|
||
// === Fonction principale ===
|
||
int main() {
|
||
std::vector<int> bufferBPM;
|
||
const int tailleBuffer = 5;
|
||
|
||
while (true) {
|
||
int mesure = acquerirDonnees();
|
||
bufferBPM.push_back(mesure);
|
||
|
||
if (bufferBPM.size() > tailleBuffer) {
|
||
bufferBPM.erase(bufferBPM.begin()); // Supprimer l’ancienne
|
||
}
|
||
|
||
int bpm = calculerBPM(bufferBPM);
|
||
bool anomalie = verifierAnomalie(bpm);
|
||
afficher(bpm, anomalie);
|
||
|
||
if (anomalie) {
|
||
alerter(bpm);
|
||
}
|
||
|
||
std::this_thread::sleep_for(std::chrono::seconds(1)); // simulation de délai entre mesures
|
||
}
|
||
|
||
return 0;
|
||
} |