breath sensor library
Diff: windSensor.cpp
- Revision:
- 1:d07f80ef7abc
- Parent:
- 0:397523d4133e
--- a/windSensor.cpp Thu Dec 01 00:42:08 2016 +0000 +++ b/windSensor.cpp Sun Dec 11 21:12:18 2016 +0000 @@ -1,17 +1,31 @@ #include "windSensor.h" -windSensor :: windSensor(PinName p, NeoStrip *_strip) - : sensor(p), strip(_strip) +windSensor :: windSensor(PinName p, NeoStrip *_strip, PinName p2, PinName p3) + : sensor(p), strip(_strip), barometer(p2, p3, (0x60<<1)) { - thresh = sensor.read()*1.4; + //thresh = sensor.read()*1.4; + thresh = 0.63; isBreathing = false; breathCount = 0; strip->setBrightness(0.1); + strip->clear(); + spike = false; + barometer.config(); + wait(0.1); + int i; + float base = 0.0; + for(i = 0; i<10; i++) { + float tempPress = barometer.getPressure(); + base = base + tempPress; + //printf("%12.5f\n",val); + } + base = base/10.0; //get first pressure baseline reading + pressure_threshold = 0.96*base; } void windSensor::startReading() { - breathReader.attach(this, &windSensor::sample, .002f); + breathReader.attach(this, &windSensor::sample, .02f); //volatile float a = sensor; //printf("\nwindsensor reads: %f", a); //printf("\nthresh is: %f", thresh); @@ -44,11 +58,11 @@ { __disable_irq(); float readVal = sensor.read(); // sample - - + //printf("%f\n",readVal); //check to see if victim is breathing at all above natural variation in sensor noise if(readVal >= thresh) { breathCount++; //increment global counter + printf("Found breath"); } if(breathCount >= 3) { //should set this higher if want more certainty in victim breathing isBreathing = true; @@ -66,11 +80,13 @@ float windSensor::give_breath(void) { + spike = false; strip->initialize(); c.clear(); t.reset(); q.reset(); //float a = 0.0; + float d = 0.0; //return time for fractional breathes float e = 0.0; int i; @@ -100,7 +116,7 @@ e = e + c[i]; } e = e/10.0; //provides slope of 10 most recent samples - float oldTimerVal = 0; + float oldTimerVal = 0, pressure; float timerVal = q.read(); while( (e > thresh) && (timerVal < 1.0)) { @@ -115,6 +131,14 @@ strip->progress(timerVal); oldTimerVal = timerVal; } + + pressure = barometer.getPressure(); + //printf("Pressure: %f\n", pressure); + if(pressure < pressure_threshold){ + spike = true; + //printf("SPIKE"); + } + } d = q.read(); if(q.read() > 1.0) { //breathe was greater than thresh and lasted more than 1 sec @@ -131,7 +155,12 @@ return 0.0; //no breath in 3 seconds } } +} +//call this member function to see if there is a pressure spike +bool windSensor::pressureSpikeDetected() +{ + return spike; //return true if spike occured during give_breath. }