Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
breath_test.cpp@0:dd2e484220ac, 2016-11-02 (annotated)
- Committer:
- dehrlich
- Date:
- Wed Nov 02 02:11:24 2016 +0000
- Revision:
- 0:dd2e484220ac
test for a 1 second rescue breath using modern device windsensor rev. c
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dehrlich | 0:dd2e484220ac | 1 | #include "mbed.h" |
dehrlich | 0:dd2e484220ac | 2 | #include <vector> //added for Lab1 part 3 |
dehrlich | 0:dd2e484220ac | 3 | #include <algorithm> //added for Lab1 part 3 |
dehrlich | 0:dd2e484220ac | 4 | #include <assert.h> /* assert */ |
dehrlich | 0:dd2e484220ac | 5 | AnalogIn windSensor(p17); |
dehrlich | 0:dd2e484220ac | 6 | DigitalOut myled(LED1); |
dehrlich | 0:dd2e484220ac | 7 | Timer t, q; |
dehrlich | 0:dd2e484220ac | 8 | vector<float> b; |
dehrlich | 0:dd2e484220ac | 9 | vector<float> c; |
dehrlich | 0:dd2e484220ac | 10 | template<typename T> |
dehrlich | 0:dd2e484220ac | 11 | |
dehrlich | 0:dd2e484220ac | 12 | void pop_front(std::vector<T>& vec) |
dehrlich | 0:dd2e484220ac | 13 | { |
dehrlich | 0:dd2e484220ac | 14 | assert(!vec.empty()); |
dehrlich | 0:dd2e484220ac | 15 | vec.erase(vec.begin()); |
dehrlich | 0:dd2e484220ac | 16 | } |
dehrlich | 0:dd2e484220ac | 17 | |
dehrlich | 0:dd2e484220ac | 18 | float give_breath(void) { |
dehrlich | 0:dd2e484220ac | 19 | float a = 0.0; |
dehrlich | 0:dd2e484220ac | 20 | float d = 0.0; //return time for fractional breathes |
dehrlich | 0:dd2e484220ac | 21 | float e = 0.0; |
dehrlich | 0:dd2e484220ac | 22 | int i; |
dehrlich | 0:dd2e484220ac | 23 | float thresh; |
dehrlich | 0:dd2e484220ac | 24 | for(i = 0; i<20; i++){ |
dehrlich | 0:dd2e484220ac | 25 | a = a + windSensor; |
dehrlich | 0:dd2e484220ac | 26 | } |
dehrlich | 0:dd2e484220ac | 27 | a = a/20.0; //get first baseline reading |
dehrlich | 0:dd2e484220ac | 28 | thresh = a*3.0; //theshold to start breathe timer (ideal multiplier is between 2-3) |
dehrlich | 0:dd2e484220ac | 29 | t.start(); |
dehrlich | 0:dd2e484220ac | 30 | while(1){ |
dehrlich | 0:dd2e484220ac | 31 | if(t.read() <= 3.0){ |
dehrlich | 0:dd2e484220ac | 32 | wait(0.1); //necessary to give sensor time to be polled |
dehrlich | 0:dd2e484220ac | 33 | if(windSensor > thresh){ |
dehrlich | 0:dd2e484220ac | 34 | q.start(); |
dehrlich | 0:dd2e484220ac | 35 | myled = 1; |
dehrlich | 0:dd2e484220ac | 36 | for(i = 0; i<10; i++){ |
dehrlich | 0:dd2e484220ac | 37 | c.push_back(windSensor); |
dehrlich | 0:dd2e484220ac | 38 | } |
dehrlich | 0:dd2e484220ac | 39 | for(i=0; i<10; i++){ |
dehrlich | 0:dd2e484220ac | 40 | e = e + c[i]; |
dehrlich | 0:dd2e484220ac | 41 | } |
dehrlich | 0:dd2e484220ac | 42 | e = e/10.0; //provides slope of 10 most recent samples |
dehrlich | 0:dd2e484220ac | 43 | while( (e > thresh) && (q.read() < 1.0)){ |
dehrlich | 0:dd2e484220ac | 44 | |
dehrlich | 0:dd2e484220ac | 45 | pop_front(c);//remove the oldest element |
dehrlich | 0:dd2e484220ac | 46 | c.push_back(windSensor); |
dehrlich | 0:dd2e484220ac | 47 | for(i=0; i<10; i++){ |
dehrlich | 0:dd2e484220ac | 48 | e = e + c[i]; |
dehrlich | 0:dd2e484220ac | 49 | } |
dehrlich | 0:dd2e484220ac | 50 | e = e/10.0; //provides slope of 10 most recent samples |
dehrlich | 0:dd2e484220ac | 51 | |
dehrlich | 0:dd2e484220ac | 52 | } |
dehrlich | 0:dd2e484220ac | 53 | d = q.read(); |
dehrlich | 0:dd2e484220ac | 54 | if(q.read() > 1.0){ //breathe was greater than thresh and lasted more than 1 sec |
dehrlich | 0:dd2e484220ac | 55 | return 1.0; //full breath |
dehrlich | 0:dd2e484220ac | 56 | } |
dehrlich | 0:dd2e484220ac | 57 | else{ |
dehrlich | 0:dd2e484220ac | 58 | return d; //partial breath |
dehrlich | 0:dd2e484220ac | 59 | } |
dehrlich | 0:dd2e484220ac | 60 | } |
dehrlich | 0:dd2e484220ac | 61 | } |
dehrlich | 0:dd2e484220ac | 62 | else{ |
dehrlich | 0:dd2e484220ac | 63 | return 0.0; //no breath in 3 seconds |
dehrlich | 0:dd2e484220ac | 64 | } |
dehrlich | 0:dd2e484220ac | 65 | } |
dehrlich | 0:dd2e484220ac | 66 | |
dehrlich | 0:dd2e484220ac | 67 | } |