IP_HeartBand/main.cpp

99 lines
2.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <iostream>
#include <vector>
#include <chrono>
#include <thread>
#include <windows.h>
#include <cstdlib>
#include <unistd.h>
// Seuils de BPM
const int BPM_MIN = 50;
const int BPM_MAX = 120;
int fakeBPM = 60;
const int secondsBetweenMeasures = 10;
const int bufferSize = 60480; // une semaine à 1 mesure/10s
int historique[bufferSize];
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 ===
int acquerirDonnees() {
// Ici tu brancherais ton ADC ou capteur réel
// Simulation d'une fréquence cardiaque variable
fakeBPM = fakeBPM - 5 + rand() % 11 ;
std::cout << "Le random BPM est "<<fakeBPM << std::endl;
historique[index % bufferSize] = fakeBPM;
index++;
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 ===
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;
std::srand(std::time(0));
while (true) {
int mesure = acquerirDonnees();
bufferBPM.push_back(mesure);
if (bufferBPM.size() > tailleBuffer) {
bufferBPM.erase(bufferBPM.begin()); // Supprimer lancienne
}
int bpm = calculerBPM(bufferBPM);
bool anomalie = verifierAnomalie(bpm);
afficher(bpm, anomalie);
if (anomalie) {
alerter(bpm);
}
usleep(2); // simulation de délai entre mesures: 500 mesures par seconde
}
return 0;
}