class using the modern device windsensor rev. c to detect faint breathing above a user programed threshold using non-blocking interrupt service routines.
victimBreath.cpp
- Committer:
- dehrlich
- Date:
- 2016-11-24
- Revision:
- 0:031f7beccd55
File content as of revision 0:031f7beccd55:
#include "victimBreath.h" #include "mbed.h" AnalogIn windSensor(p17); DigitalOut myLED(LED1); Ticker breathReader; volatile float thresh = windSensor*1.4; //volatile bool Breath = false; // set on each visit to interrupt routine volatile bool isBreathing = false; volatile int breathCount = 0; //increment if breath is above thresh on each visit to interrupt routine victimBreath :: victimBreath(){ } void victimBreath :: startReading(){ breathReader.attach(this, &victimBreath::sample, .002f); //volatile float a = windSensor; //printf("\nwindsensor reads: %f", a); //printf("\nthresh is: %f", thresh); } void victimBreath :: stopReading(){ breathReader.detach(); __enable_irq(); } void victimBreath :: reset() { //thresh = windSensor*1.2; //set thresh to an appropraite percent above the baseline reading //Breath = false; // true victims breath crosses thresh isBreathing = false; //true if we get 3 'Breaths' in the calling programs time window-->means victim is breathing breathCount = 0; } //call this member function to see if victim is breathing bool victimBreath :: breathDetected() { return isBreathing; //only return positive if we get the critical number of Breaths in the given time window } // THIS IS THE TIMER 2 INTERRUPT SERVICE ROUTINE. // Timer 2 makes sure that we take a reading every 2 miliseconds void victimBreath :: sample() { // triggered when Timer2 counts to 124 __disable_irq(); float readVal = windSensor; // sample //check to see if victim is breathing at all above natural variation in sensor noise if(readVal >= thresh){ breathCount++; //increment global counter } if(breathCount >= 3){ //should set this higher if want more certainty in victim breathing isBreathing = true; } __enable_irq(); // enable interrupts again //return; }