Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

Clignotement de led et faire une moyenne ( fréquence cardiaque et arduino )



  1. #1
    Shantorian

    Question Clignotement de led et faire une moyenne ( fréquence cardiaque et arduino )

    Bonjour à tous !

    Je suis en train de faire un petit projet arduino, je tiens à préciser que je suis débutant.

    J'ai deux cartes qui communiquent sans fils via des shields XBee (car les modules bluetooth que j'utilisais étaient défectueux, pour ceux qui m'avaient répondu sur un autre fil ). Sur l'émettrice il y a un capteur qui renvoi un valeur décimale, la fréquence cardiaque en bpm. Il envoie cette valeur à une carte réceptrice.

    Je viens demander de l'aide pour deux choses :

    - Comment puis-je faire clignoter une led ( ou un chenillard, mais une led c'est déjà bien ) en fonction de la valeur du pouls ? Par exemple si le bpm est de 65, la led devrait clignoter 65 fois par minutes... Je ne vois pas vraiment comme le coder proprement.

    - Je dois faire une moyenne du bpm pris sur 12h ou 24h, comment coder cela, afin de définir une certaine valeur comme moyenne ? J'ai pensé à faire un sous-programme qui relèverai une valeur du bmp toutes les secondes sur disons 12h, puis fais le calcul de la moyenne. Cependant l'addition de toutes ces valeur peut-elle directement être stockées dans une variable ?
    Si par exemple je prends une valeur de bpm de 100 pendant 24h ( pour me donner de la marge ) alors j'additionne toutes ces valeurs dans une variable de type "long" et puis je divise par le nombre de mesures ( cela fait 86 400 mesures ). Ceci est la bonne méthode ?


    J'ai essayé un code de ce type pour la moyenne, est-il correct ? Comment sortir de la boucle "while (Wire.available...)" ?
    Code:
    #include <Wire.h>
    long sommevaleurs = 0;
    int moyenne = 0;
    int nbmesures = 0;
    
    void setup() {
      Serial.begin(9600);
      Serial.println("heart rate sensor:");
      Wire.begin();
      rodage();
      setDestination();
    
    // void loop etc
    
    void rodage() {
        
      Wire.requestFrom(0xA0 >> 1, 1);    // request 1 bytes from slave device 
      while(Wire.available()) {          // slave may send less than requested
         while (nbmesures <= 760){
         unsigned char valeur = Wire.read();   // receive heart rate value (a byte)
         sommevaleurs = sommevaleurs + valeur;
         nbmesures ++;
         delay(60000);
      }
      moyenne = sommevaleurs / nbmesures;
    }
    }







    Merci d'avance pour vos réponses !


    PS : Voici les codes que j'utilise :
    Emetteur :

    Code:
    #include <Wire.h>
    void setup() {
      Serial.begin(9600);
      Serial.println("heart rate sensor:");
      Wire.begin();
      setDestination();
    }
    void loop() {
      Wire.requestFrom(0xA0 >> 1, 1);    // request 1 bytes from slave device 
      while(Wire.available()) {          // slave may send less than requested
        unsigned char c = Wire.read();   // receive heart rate value (a byte)
        Serial.println(c, DEC);         // print heart rate value
      }
      delay(500);
    }
    
    
    
    // Xbee configuration
    void setDestination() {
      Serial.print("ATRE\r");
      Serial.print("ATDL0\r"); 
      Serial.print("ATMY1\r"); 
      Serial.print("ATID1111\r");
      Serial.print("ATCN\r");
    }

    Recepteur :

    Code:
    void setup() {
      Serial.begin(9600);       //initialize serial
      setDestination();
    }
     
    void loop() {
      while(Serial.available()){  //is there anything to read?
        char getData = Serial.read();  //if yes, read it
        Serial.write( getData );
        }
      }
      
    
    // Xbee configuration
    void setDestination() {
      Serial.print("ATRE\r");
      Serial.print("ATMY0\r"); 
      Serial.print("ATID1111\r");
      Serial.print("ATCN\r");
    }

    -----


  2. #2
    Shantorian

    Re : Clignotement de led et faire une moyenne ( fréquence cardiaque et arduino )

    Je viens d'essayer un autre programme, ici la led sert de témoin :

    D'après ces valeurs, le programme fait 2 mesures, une par secondes. Cependant je n'ai jamais un moyenne correcte, que j'initialise "nbmesures" à 1 ou 0, pourquoi ?
    Code:
    #include <Wire.h>
    long sommevaleurs = 0;
    int moyenne = 0;
    int nbmesures = 0;
    long temps;
    
    void setup() {
      temps = millis();
      pinMode(5, OUTPUT);
      Serial.begin(9600);
      Wire.begin();
      rodage();
    }
    
    
    void rodage() {
        
      Wire.requestFrom(0xA0 >> 1, 1);    // request 1 bytes from slave device 
      while(Wire.available()) {          // slave may send less than requested
         while (nbmesures < 2){
         if((millis() - temps) > 1000)
            {
         unsigned char valeur = Wire.read();   // receive heart rate value (a byte)
         sommevaleurs = sommevaleurs + valeur;
         nbmesures++;
         temps = millis(); //on stocke la nouvelle heure
            }
      digitalWrite(5, HIGH);     
      delay(10);  
         }
      moyenne = sommevaleurs / nbmesures;
      Serial.println("moyenne");
      Serial.println(moyenne);
      digitalWrite(5, LOW); 
     }
    }

Sur le même thème :

Discussions similaires

  1. [Autre] Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)
    Par Teknic dans le forum Électronique
    Réponses: 27
    Dernier message: 24/02/2016, 20h48
  2. Fréquence cardiaque
    Par liberty1 dans le forum Biologie
    Réponses: 4
    Dernier message: 02/06/2013, 18h51
  3. [Physiologie] fréquence cardiaque
    Par mcombe dans le forum Biologie
    Réponses: 4
    Dernier message: 17/05/2011, 15h40
  4. fréquence cardiaque
    Par qubits dans le forum Santé et médecine générale
    Réponses: 0
    Dernier message: 22/05/2010, 06h52
  5. fréquence cardiaque
    Par scholasticus dans le forum Biologie
    Réponses: 12
    Dernier message: 22/04/2007, 13h38