hack gt final code

Dependencies:   4DGL-uLCD-SE BMP085 PinDetect SDFileSystem mbed wave_player

Files at this revision

API Documentation at this revision

Comitter:
otis22894
Date:
Wed Sep 28 00:16:16 2016 +0000
Parent:
13:735e81c0f6a9
Commit message:
initial commit;

Changed in this revision

Heart.cpp Show annotated file Show diff for this revision Revisions of this file
main.cpp Show diff for this revision Revisions of this file
main_old.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/Heart.cpp	Sun Sep 21 11:15:41 2014 +0000
+++ b/Heart.cpp	Wed Sep 28 00:16:16 2016 +0000
@@ -19,7 +19,7 @@
 volatile int beatCount = 0;
 volatile int PulseLength = 0;
 
-AnalogIn ain(p17);
+AnalogIn ain(p16);
 DigitalOut myLED(LED1);
 Ticker pulseReader;
 
--- a/main.cpp	Sun Sep 21 11:15:41 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,392 +0,0 @@
-
-#include "mbed.h"
-#include "SDFileSystem.h"
-#include "wave_player.h"
-#include "uLCD_4DGL.h"
-#include "PinDetect.h"
-#include "Heart.h"
-#include "statistics.h"
-#include "spikes.h"
-#include "BMP085.h"
-#include <string>
-#include <sstream>
-
-using namespace std;
-
-#define SHORT_SAMPLE 5
-#define LONG_SAMPLE 20
-
-#define BEGIN_COMPRESSIONS "begin30ChestCompressions"
-#define BREATH_TONE "breathTone"
-#define CLIP_SENSOR "clipPulseSensorToEar"
-#define CONTINUE_COMPRESSIONS "continueChestCompressions"
-#define PLACE_MASK "placeMaskOverVictimsMouthWithTheSharpestCornerOverTheNose"
-#define PREPARE_BREATH "prepareToBreatheIntoMask"
-#define ROLL_VICTIM "rollVictimOntoSide"
-#define START_BREATHING "startBreathing"
-#define STOP_COMPRESSIONS "stopChestCompressions"
-#define TILT_HEAD "tiltHeadBackFor10Seconds"
-#define MONITOR_CONDITION "monitorVictimConditionAndReturnMaskToFaceIfBreathingStops"
-#define RETILT_HEAD "retiltHeadByPushingChinAwayFromChest"
-#define NEXT_KEY "pressNextKeyWhenReady"
-#define NEXT_REMINDER "pleasePressNextKeyToContinueOrPressRepeatToHearTheLastCommand"
-#define CHEST_COMPRESSIONS "prepareForChestCompressions"
-#define REMOVE_MASK "removeTheMaskAndCheckTheAirway"
-#define REMOVE_OBJECT "removeObject"
-#define REPLACE_MASK "replaceMaskOnVictimsFace"
-#define COUNT "count"
-string lastMessage;
-
-SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
-AnalogOut DACout(p18);
-wave_player waver(&DACout);
-uLCD_4DGL uLCD(p28, p27, p29);
-I2C i2c(p9, p10);
-AnalogIn windSensor(p17);
-PinDetect repeatButton(p14);
-PinDetect nextButton(p13);
-Timer timer;
-Heart heart = Heart();
-BMP085 barometer(p9, p10);
-Ticker ticker;
-SpikeFinder s = SpikeFinder(4, 4, 3.0);
-DigitalOut GLED1(p26);
-DigitalOut GLED2(p25);
-DigitalOut GLED3(p24);
-DigitalOut RLED1(p23);
-DigitalOut RLED2(p22);
-DigitalOut RLED3(p21);
-float windSensorVoltage;
-//const int address = 0x77 << 1;
-bool breathing; 
-bool pulse;
-bool breath_success = true; 
-ostringstream stream;
-Timer breathTimer;
-bool next = false;
-bool adult = true;
-int cycleCount = 0;
-Ticker LEDTicker;
-
-void playMessage(string messageName);
-void getBreathing();
-void getPulse();
-void getVitals();
-bool checkBreath();
-void promptBreaths(int amt,bool check);
-void chestCompressions();
-void CPR();
-void rescueBreathing();
-void auditVitals();
-void unconsciousChocking();
-void repeat_callback_function (void);
-void next_callback_function (void);
-void waitForNext();
-void tick();
-void welcomeLED();
-void cycleLEDs();
-
-int main(){
-    repeatButton.mode(PullUp);
-    nextButton.mode(PullUp);
-    wait(0.1);
-    repeatButton.attach_deasserted(&repeat_callback_function);
-    nextButton.attach_deasserted(&next_callback_function);
-    repeatButton.setSampleFrequency();
-    nextButton.setSampleFrequency();
-    
-    /*while(1){
-        uLCD.printf("HERE");
-        waitForNext();
-        chestCompressions();
-        wait(0.5);
-    }*/
-    
-    welcomeLED();
-    playMessage(PLACE_MASK);
-    waitForNext();
-    playMessage(CLIP_SENSOR); 
-    waitForNext();
-    playMessage(TILT_HEAD);
-    waitForNext();
-    getVitals();
-    
-    if(pulse&&breathing){
-        playMessage(ROLL_VICTIM);
-        while(1){
-            playMessage(MONITOR_CONDITION);
-            wait(5);
-        }
-    }
-    
-    promptBreaths(2,true);
-    if(breath_success){
-        auditVitals();
-    }else{
-        playMessage(RETILT_HEAD);
-        waitForNext();
-        promptBreaths(1,true);
-        if(breath_success){
-            auditVitals();
-        }else{
-            unconsciousChocking();
-        }
-    }
-}
-
-void repeat_callback_function (void){
-    playMessage(lastMessage);
-}
-
-void next_callback_function (void){
-    next = true;
-}
-
-void tick() {
-    __disable_irq();
-    barometer.update();
-    s.addSample(barometer.get_pressure());
-    __enable_irq();
-}
-
-void waitForNext(){
-    playMessage(NEXT_KEY);
-    timer.start();
-    while(!next){
-        if(timer.read()>3){
-            playMessage(NEXT_REMINDER);
-            timer.reset();
-        }
-    }
-    timer.stop();
-    timer.reset();
-    next = false;
-}
-
-void playMessage(string messageName){
-    string pathName = "/sd/" + messageName + ".wav";
-    char * cstrName = new char[pathName.length() + 1];
-    cstrName[pathName.length()]=0;
-    memcpy(cstrName,pathName.c_str(),pathName.size());
-    FILE *wave_file;
-    wave_file=fopen(cstrName,"r");
-    waver.play(wave_file);
-    fclose(wave_file);
-    wait(1);
-    if(messageName.compare(NEXT_REMINDER) != 0
-            && messageName.compare(NEXT_KEY) != 0){
-        lastMessage = messageName;
-    }
-}
-
-void getBreathing(){
-    //SENSOR DATA
-    breathing = false;
-}
-
-void getPulse(){
-    pulse = heart.beatDetected(); 
-}
-
-void getVitals(){
-    timer.start();
-    heart.startReading();
-    while(timer.read()<10){}
-    heart.stopReading();
-    
-    getBreathing();
-    getPulse();
-    
-    timer.stop();
-    timer.reset();
-    heart.reset();
-}
-
-bool checkBreath(){
-    windSensorVoltage = 0;
-    ticker.attach(&tick, .1);
-    while(windSensorVoltage<6.15){
-        while(windSensorVoltage<6.15){
-            wait(0.1);
-            windSensorVoltage = windSensor*10;
-            //THINK OF ANOTHER WAY THAT DOESN'T INVOLVE A SECOND WHILE LOOP
-        }
-        windSensorVoltage = windSensor*10;
-        wait(0.5);
-    }
-    uLCD.printf("BREATH DETECTED");
-    cycleLEDs();
-    LEDTicker.attach(&cycleLEDs,0.116);
-    //cycleLEDs();
-    playMessage(BREATH_TONE);
-    LEDTicker.detach();
-    ticker.detach();
-    while(windSensorVoltage>6.15){
-        windSensorVoltage = windSensor*10;
-    }
-    if(s.highSpikeFound()){
-        s.reset();
-        return false;
-    }else{
-        s.reset();
-        return true;
-    }   
-}
-
-void promptBreaths(int amt,bool check){
-    bool local_check;;
-    for(int i = 0;i<amt;i++){
-        playMessage(PREPARE_BREATH);
-        if(check){
-            waitForNext();
-        }
-        playMessage(START_BREATHING);
-        local_check = checkBreath();
-        breath_success = breath_success & local_check;
-    }
-}
-
-void chestCompressions(){
-    playMessage(CHEST_COMPRESSIONS);
-    waitForNext();
-    playMessage(BEGIN_COMPRESSIONS);
-    wait(1);
-    playMessage(COUNT);
-    playMessage(STOP_COMPRESSIONS); 
-}
-
-void CPR(){
-    while(1){
-        chestCompressions();
-    }
-}
-
-void rescueBreathing(){
-    while(pulse){
-        timer.start();
-        while(timer.read()<120){
-            promptBreaths(1,false);
-            if(adult){
-                wait(3); //Need 5s total loop time if adult
-            }else{
-                wait(1); //Need 3s total loop time if child
-            }
-        }
-        timer.stop();
-        timer.reset();
-        playMessage(TILT_HEAD);
-        waitForNext();
-        getVitals();
-    }
-    CPR();
-}
-
-void auditVitals(){
-    if(pulse && !breathing){
-        rescueBreathing();
-    }else if(!pulse && !breathing){
-        CPR();
-    }else{//ERROR}
-    }
-}
-
-void unconsciousChocking(){
-    bool stillChocking = true;
-    while(stillChocking){
-        chestCompressions(); 
-        playMessage(REMOVE_MASK);
-        playMessage(REMOVE_OBJECT);
-        waitForNext();
-        playMessage(REPLACE_MASK);
-        promptBreaths(2,true);
-        if(breath_success){
-            stillChocking = false;
-        }  
-    }
-    playMessage(TILT_HEAD);
-    waitForNext();
-    getVitals();
-    auditVitals();
-}
-
-void cycleLEDs(){
-    cycleCount++;
-    if(cycleCount==1){
-        GLED1 = 1;
-    }
-    if(cycleCount==2){
-        GLED2 = 1;
-    }
-    if(cycleCount==3){
-        GLED3 = 1;
-    }
-    if(cycleCount==4){
-        RLED1 = 1;
-    }
-    if(cycleCount==5){
-        RLED2 = 1;
-    }
-    if(cycleCount==6){
-        RLED3 = 1;
-    }
-    if(cycleCount==7){
-        GLED1 = 0;
-        GLED2 = 0;
-        GLED3 = 0;
-        RLED1 = 0;
-        RLED2 = 0;
-        RLED3 = 0;
-        cycleCount = 0;
-    }
-}
-
-void welcomeLED(){
-    for(int i =0;i<5;i++){
-        GLED1 = 1;
-        GLED2 = 1;
-        GLED3 = 1;
-        RLED1 = 1;
-        RLED2 = 1; 
-        RLED3 = 1;
-        wait (0.5);
-        GLED1 = 0;
-        GLED2 = 0;
-        GLED3 = 0;
-        RLED1 = 0;
-        RLED2 = 0;
-        RLED3 = 0; 
-    }
-    GLED1 = 1;
-    wait(0.1);
-    GLED1 = 0;
-    GLED2 = 1;
-    wait(0.1);
-    GLED2 = 0;
-    GLED3 = 1;
-    wait(0.1);
-    GLED3 = 0;
-    RLED1 = 1;
-    wait(0.1);
-    RLED1 = 0;
-    RLED2 = 1;
-    wait(0.1);
-    RLED2 = 0;
-    RLED3 = 1;
-    wait(0.2);
-    RLED3 = 0;
-    RLED2 = 1;
-    wait(0.1);
-    RLED2 = 0;
-    RLED1 = 1;
-    wait(0.1);
-    RLED1 = 0;
-    GLED3 = 1;
-    wait(0.1);
-    GLED3 = 0;
-    GLED2 = 1;
-    wait(0.1);
-    GLED2 = 0;
-    GLED1 = 1;
-    wait(0.1);
-    GLED1 = 0;
-}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main_old.cpp	Wed Sep 28 00:16:16 2016 +0000
@@ -0,0 +1,396 @@
+#include "mbed.h"
+#include "SDFileSystem.h"
+#include "wave_player.h"
+//#include "uLCD_4DGL.h"
+#include "PinDetect.h"
+#include "Heart.h"
+#include "statistics.h"
+#include "spikes.h"
+#include "BMP085.h"
+#include <string>
+#include <sstream>
+
+using namespace std;
+
+#define SHORT_SAMPLE 5
+#define LONG_SAMPLE 20
+
+#define BEGIN_COMPRESSIONS "begin30ChestCompressions"
+#define BREATH_TONE "breathTone"
+#define CLIP_SENSOR "clipPulseSensorToEar"
+#define CONTINUE_COMPRESSIONS "continueChestCompressions"
+#define PLACE_MASK "placeMaskOverVictimsMouthWithTheSharpestCornerOverTheNose"
+#define PREPARE_BREATH "prepareToBreatheIntoMask"
+#define ROLL_VICTIM "rollVictimOntoSide"
+#define START_BREATHING "startBreathing"
+#define STOP_COMPRESSIONS "stopChestCompressions"
+#define TILT_HEAD "tiltHeadBackFor10Seconds"
+#define MONITOR_CONDITION "monitorVictimConditionAndReturnMaskToFaceIfBreathingStops"
+#define RETILT_HEAD "retiltHeadByPushingChinAwayFromChest"
+#define NEXT_KEY "pressNextKeyWhenReady"
+#define NEXT_REMINDER "pleasePressNextKeyToContinueOrPressRepeatToHearTheLastCommand"
+#define CHEST_COMPRESSIONS "prepareForChestCompressions"
+#define REMOVE_MASK "removeTheMaskAndCheckTheAirway"
+#define REMOVE_OBJECT "removeObject"
+#define REPLACE_MASK "replaceMaskOnVictimsFace"
+#define COUNT "count"
+string lastMessage;
+
+SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
+AnalogOut DACout(p18);
+wave_player waver(&DACout);
+AnalogIn windSensor(p17);
+PinDetect repeatButton(p14);
+PinDetect nextButton(p13);
+Timer timer;
+Heart heart = Heart();
+BMP085 barometer(p9, p10);
+Ticker ticker;
+SpikeFinder s = SpikeFinder(4, 4, 4.0);
+DigitalOut GLED1(p26);
+DigitalOut GLED2(p25);
+DigitalOut GLED3(p24);
+DigitalOut RLED1(p23);
+DigitalOut RLED2(p22);
+DigitalOut RLED3(p21);
+DigitalOut testLED(LED1);
+float windSensorVoltage;
+bool breathing; 
+bool pulse;
+bool breath_success = true; 
+ostringstream stream;
+Timer breathTimer;
+bool next = false;
+bool adult = true;
+int cycleCount = 0;
+Ticker LEDTicker;
+
+void playMessage(string messageName);
+void getBreathing();
+void getPulse();
+void getVitals();
+bool checkBreath();
+void promptBreaths(int amt,bool check);
+void chestCompressions();
+void CPR();
+void rescueBreathing();
+void auditVitals();
+void unconsciousChocking();
+void repeat_callback_function (void);
+void next_callback_function (void);
+void waitForNext();
+void tick();
+void welcomeLED();
+void cycleLEDs();
+
+int main(){
+    repeatButton.mode(PullUp);
+    nextButton.mode(PullUp);
+    wait(1);
+    repeatButton.attach_deasserted(&repeat_callback_function);
+    nextButton.attach_deasserted(&next_callback_function);
+    repeatButton.setSampleFrequency();
+    nextButton.setSampleFrequency();
+    wait(1);
+    
+    /*while(1){
+        printf("HERE");
+        waitForNext();
+        checkBreath();
+        wait(0.5);
+    }*/
+    
+    welcomeLED();
+    testLED = 1;
+    wait(3);
+    playMessage(PLACE_MASK);
+    testLED = 0;
+    wait(3);
+    waitForNext();
+    playMessage(CLIP_SENSOR); 
+    waitForNext();
+    playMessage(TILT_HEAD);
+    waitForNext();
+    getVitals();
+    
+    if(pulse){
+        playMessage(ROLL_VICTIM);
+        while(1){
+            playMessage(MONITOR_CONDITION);
+            wait(5);
+        }
+    }
+    
+    promptBreaths(2,true);
+    if(breath_success){
+        auditVitals();
+    }else{
+        playMessage(RETILT_HEAD);
+        waitForNext();
+        promptBreaths(1,true);
+        if(breath_success){
+            auditVitals();
+        }else{
+            unconsciousChocking();
+        }
+    }
+}
+
+void repeat_callback_function (void){
+    playMessage(lastMessage);
+}
+
+void next_callback_function (void){
+    next = true;
+}
+
+void tick() {
+    __disable_irq();
+    barometer.update();
+    s.addSample(barometer.get_pressure());
+    __enable_irq();
+}
+
+void waitForNext(){
+    playMessage(NEXT_KEY);
+    timer.start();
+    while(!next){
+        if(timer.read()>3){
+            playMessage(NEXT_REMINDER);
+            timer.reset();
+        }
+    }
+    timer.stop();
+    timer.reset();
+    next = false;
+}
+
+void playMessage(string messageName){
+    string pathName = "/sd/" + messageName + ".wav";
+    char * cstrName = new char[pathName.length() + 1];
+    cstrName[pathName.length()]=0;
+    memcpy(cstrName,pathName.c_str(),pathName.size());
+    FILE *wave_file;
+    wave_file=fopen(cstrName,"r");
+    waver.play(wave_file);
+    fclose(wave_file);
+    wait(1);
+    if(messageName.compare(NEXT_REMINDER) != 0
+            && messageName.compare(NEXT_KEY) != 0){
+        lastMessage = messageName;
+    }
+}
+
+void getBreathing(){
+    //SENSOR DATA
+    breathing = false;
+}
+
+void getPulse(){
+    pulse = heart.beatDetected(); 
+}
+
+void getVitals(){
+    timer.start();
+    heart.startReading();
+    while(timer.read()<10){}
+    heart.stopReading();
+    
+    getBreathing();
+    getPulse();
+    
+    timer.stop();
+    timer.reset();
+    heart.reset();
+}
+
+bool checkBreath(){
+    windSensorVoltage = 0;
+    ticker.attach(&tick, .1);
+    while(windSensorVoltage<6.15){
+        while(windSensorVoltage<6.15){
+            wait(0.1);
+            windSensorVoltage = windSensor*10;
+            printf("%f",windSensorVoltage);
+            //THINK OF ANOTHER WAY THAT DOESN'T INVOLVE A SECOND WHILE LOOP
+        }
+        windSensorVoltage = windSensor*10;
+        wait(0.5);
+    }
+    //uLCD.printf("BREATH DETECTED");
+    cycleLEDs();
+    LEDTicker.attach(&cycleLEDs,0.116);
+    cycleLEDs();
+    playMessage(BREATH_TONE);
+    LEDTicker.detach();
+    ticker.detach();
+    while(windSensorVoltage>6.15){
+        windSensorVoltage = windSensor*10;
+    }
+    if(s.highSpikeFound()){
+        s.reset();
+        return false;
+    }else{
+        s.reset();
+        return true;
+    }   
+}
+
+void promptBreaths(int amt,bool check){
+    bool local_check;;
+    for(int i = 0;i<amt;i++){
+        playMessage(PREPARE_BREATH);
+        if(check){
+            waitForNext();
+        }
+        playMessage(START_BREATHING);
+        local_check = checkBreath();
+        breath_success = breath_success & local_check;
+    }
+}
+
+void chestCompressions(){
+    playMessage(CHEST_COMPRESSIONS);
+    waitForNext();
+    playMessage(BEGIN_COMPRESSIONS);
+    wait(1);
+    playMessage(COUNT);
+    playMessage(STOP_COMPRESSIONS); 
+}
+
+void CPR(){
+    while(1){
+        promptBreaths(2,true);
+        chestCompressions();
+    }
+}
+
+void rescueBreathing(){
+    while(pulse){
+        timer.start();
+        while(timer.read()<120){
+            promptBreaths(1,false);
+            if(adult){
+                wait(3); //Need 5s total loop time if adult
+            }else{
+                wait(1); //Need 3s total loop time if child
+            }
+        }
+        timer.stop();
+        timer.reset();
+        playMessage(TILT_HEAD);
+        waitForNext();
+        getVitals();
+    }
+    CPR();
+}
+
+void auditVitals(){
+    if(pulse && !breathing){
+        rescueBreathing();
+    }else if(!pulse && !breathing){
+        CPR();
+    }else{//ERROR}
+    }
+}
+
+void unconsciousChocking(){
+    bool stillChocking = true;
+    while(stillChocking){
+        chestCompressions(); 
+        playMessage(REMOVE_MASK);
+        playMessage(REMOVE_OBJECT);
+        waitForNext();
+        playMessage(REPLACE_MASK);
+        promptBreaths(2,true);
+        if(breath_success){
+            stillChocking = false;
+        }  
+    }
+    playMessage(TILT_HEAD);
+    waitForNext();
+    getVitals();
+    auditVitals();
+}
+
+void cycleLEDs(){
+    cycleCount++;
+    if(cycleCount==1){
+        RLED1 = 1;
+    }
+    if(cycleCount==2){
+        RLED2 = 1;
+    }
+    if(cycleCount==3){
+        RLED3 = 1;
+    }
+    if(cycleCount==4){
+        GLED1 = 1;
+    }
+    if(cycleCount==5){
+        GLED2 = 1;
+    }
+    if(cycleCount==6){
+        GLED3 = 1;
+    }
+    if(cycleCount==7){
+        GLED1 = 0;
+        GLED2 = 0;
+        GLED3 = 0;
+        RLED1 = 0;
+        RLED2 = 0;
+        RLED3 = 0;
+        cycleCount = 0;
+    }
+}
+
+void welcomeLED(){
+    for(int i =0;i<5;i++){
+        GLED1 = 1;
+        GLED2 = 1;
+        GLED3 = 1;
+        RLED1 = 1;
+        RLED2 = 1; 
+        RLED3 = 1;
+        wait (0.5);
+        GLED1 = 0;
+        GLED2 = 0;
+        GLED3 = 0;
+        RLED1 = 0;
+        RLED2 = 0;
+        RLED3 = 0; 
+    }
+    RLED1 = 1;
+    wait(0.1);
+    RLED1 = 0;
+    RLED2 = 1;
+    wait(0.1);
+    RLED2 = 0;
+    RLED3 = 1;
+    wait(0.1);
+    RLED3 = 0;
+    GLED1 = 1;
+    wait(0.1);
+    GLED1 = 0;
+    GLED2 = 1;
+    wait(0.1);
+    GLED2 = 0;
+    GLED3 = 1;
+    wait(0.2);
+    GLED3 = 0;
+    GLED2 = 1;
+    wait(0.1);
+    GLED2 = 0;
+    GLED1 = 1;
+    wait(0.1);
+    GLED1 = 0;
+    RLED3 = 1;
+    wait(0.1);
+    RLED3 = 0;
+    RLED2 = 1;
+    wait(0.1);
+    RLED2 = 0;
+    RLED1 = 1;
+    wait(0.1);
+    RLED1 = 0;
+}
\ No newline at end of file