Version beta

Dependencies:   BLE_API Definiciones Funciones HeartRate_ Hotboards_rtcc LM_35 MAX_30100 MMA8451Q Pines SDFileSystem mbed nRF51822

Fork of MAX30100_oxullo by Eduardo Avelar

Revision:
0:80ecccd27646
Child:
1:5ecac6e368d2
diff -r 000000000000 -r 80ecccd27646 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Nov 25 00:54:29 2016 +0000
@@ -0,0 +1,127 @@
+/*
+Arduino-MAX30100 oximetry / heart rate integrated sensor library
+Copyright (C) 2016  OXullo Intersecans <x@brainrapers.org>
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "MAX30100_PulseOximeter.h"
+
+//#define REPORTING_PERIOD_MS     1000
+
+Serial pc(USBTX, USBRX);
+Timer t;
+
+// PulseOximeter is the higher level interface to the sensor
+// it offers:
+//  * beat detection reporting
+//  * heart rate calculation
+//  * SpO2 (oxidation level) calculation
+PulseOximeter pox;
+
+uint32_t tsLastReport = 0;
+
+// Callback (registered below) fired when a pulse is detected
+
+void onBeatDetected()
+{
+ //   pc.printf("Beat!\r\n");
+}
+
+bool setup()
+{
+    pc.baud(115200);
+    pc.printf("Start program!\r\n");
+    //pox = new PulseOximeter (&pc);
+    
+    // Initialize the PulseOximeter instance and register a beat-detected callback
+    if(!pox.begin())
+        return false;
+    pox.setOnBeatDetectedCallback(onBeatDetected);
+    return true;
+}
+
+bool newValueMAX30100 = 0;
+float heartRate;
+float finalHeartRate;
+uint8_t sp02;
+uint16_t finalSp02;
+uint32_t REPORTING_PERIOD_MS = 1000;
+std::vector<float> valuesHeartRate;
+std::vector<uint8_t> valuesSp02;
+uint8_t samplesMAX30100 = 10;
+uint8_t counterMAX30100 = 0;;
+
+void updateMAX30100 (){
+    // Make sure to call update as fast as possible
+    pox.update();
+    
+    if (t.read_ms() > REPORTING_PERIOD_MS) {
+        heartRate = pox.getHeartRate();
+        sp02 = pox.getSpO2();
+        
+        if(heartRate != 0 && sp02 != 0) {
+            pc.printf("Heart rate: %f",heartRate);
+            pc.printf("   bpm / SpO2: %d%\r\n",sp02);
+            valuesHeartRate.push_back(heartRate);
+            valuesSp02.push_back(sp02);
+            counterMAX30100 ++;
+        }else{
+            pc.printf("No finger\r\n");
+        }
+        
+        if(samplesMAX30100 == counterMAX30100) {
+            
+            finalHeartRate = 0;
+            finalSp02 = 0;
+            for(int i=0; i<samplesMAX30100; i++){
+                finalHeartRate += valuesHeartRate[i];
+                finalSp02 += valuesSp02[i];        
+            }
+            
+            finalHeartRate /= samplesMAX30100;
+            finalSp02 /= samplesMAX30100;
+            
+            counterMAX30100 = 0;
+            valuesHeartRate.clear();
+            valuesSp02.clear();
+            newValueMAX30100 = true;
+        }
+        
+        t.reset();
+    }         
+}
+
+void loop()
+{
+    updateMAX30100();
+    
+    if(newValueMAX30100){
+        pc.printf("--->New Value\r\n");
+        pc.printf("Heart rate: %f",finalHeartRate);
+        pc.printf("   bpm / SpO2: %d%\r\n",finalSp02);
+        pc.printf("*************************\r\n");
+        newValueMAX30100 = false;  
+    }
+       
+}
+
+int main()
+{
+    if(setup())
+        pc.printf("MAX30100 beginning\r\n");
+    else
+        return 0;
+    
+    t.start();    
+    while(1)
+        loop();   
+}
\ No newline at end of file