HFAC

Dependencies:   mbed

Committer:
hassan_elahi
Date:
Thu Jul 02 17:55:54 2020 +0000
Revision:
0:6ec9b61d5bb5
HFAC

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hassan_elahi 0:6ec9b61d5bb5 1 #include "Functions.h"
hassan_elahi 0:6ec9b61d5bb5 2
hassan_elahi 0:6ec9b61d5bb5 3
hassan_elahi 0:6ec9b61d5bb5 4 bool syncShockReady = false;
hassan_elahi 0:6ec9b61d5bb5 5
hassan_elahi 0:6ec9b61d5bb5 6 //Delivering the HFAC and Dfeb Shock
hassan_elahi 0:6ec9b61d5bb5 7 void Delivering (int amplitude, int duration)
hassan_elahi 0:6ec9b61d5bb5 8 {
hassan_elahi 0:6ec9b61d5bb5 9
hassan_elahi 0:6ec9b61d5bb5 10 uint16_t sample = 0;
hassan_elahi 0:6ec9b61d5bb5 11 double step= (amplitude*220)/duration;
hassan_elahi 0:6ec9b61d5bb5 12
hassan_elahi 0:6ec9b61d5bb5 13 for(int HFAC_Count=1; HFAC_Count<= duration; ++HFAC_Count)
hassan_elahi 0:6ec9b61d5bb5 14 {
hassan_elahi 0:6ec9b61d5bb5 15 sample = (uint16_t)(offset + (step*HFAC_Count));
hassan_elahi 0:6ec9b61d5bb5 16 HFAC.write_u16(sample);
hassan_elahi 0:6ec9b61d5bb5 17 wait_us(500);
hassan_elahi 0:6ec9b61d5bb5 18
hassan_elahi 0:6ec9b61d5bb5 19 //pc.printf("%d\r\n",duration - HFAC_Count);
hassan_elahi 0:6ec9b61d5bb5 20 if((duration - HFAC_Count) == 11){
hassan_elahi 0:6ec9b61d5bb5 21 led1 = 0;
hassan_elahi 0:6ec9b61d5bb5 22 SyncOut = 1;
hassan_elahi 0:6ec9b61d5bb5 23 }
hassan_elahi 0:6ec9b61d5bb5 24
hassan_elahi 0:6ec9b61d5bb5 25 sample = (uint16_t)(offset - (step*HFAC_Count));
hassan_elahi 0:6ec9b61d5bb5 26 HFAC.write_u16(sample);
hassan_elahi 0:6ec9b61d5bb5 27 wait_us(500);
hassan_elahi 0:6ec9b61d5bb5 28 }
hassan_elahi 0:6ec9b61d5bb5 29
hassan_elahi 0:6ec9b61d5bb5 30 HFAC_Relay = 0;
hassan_elahi 0:6ec9b61d5bb5 31 M_Relay = 1;
hassan_elahi 0:6ec9b61d5bb5 32 R_Relay = 0;
hassan_elahi 0:6ec9b61d5bb5 33 wait_ms(1);
hassan_elahi 0:6ec9b61d5bb5 34 M_Relay = 0;
hassan_elahi 0:6ec9b61d5bb5 35 SyncOut =0;
hassan_elahi 0:6ec9b61d5bb5 36 shock = 0;
hassan_elahi 0:6ec9b61d5bb5 37 HFAC.write_u16(offset);
hassan_elahi 0:6ec9b61d5bb5 38 buttonLEDs(shockButtonRedLED, Disable);
hassan_elahi 0:6ec9b61d5bb5 39
hassan_elahi 0:6ec9b61d5bb5 40 }
hassan_elahi 0:6ec9b61d5bb5 41
hassan_elahi 0:6ec9b61d5bb5 42 //Delivering the HFAC and Dfeb Shock in the sync mode
hassan_elahi 0:6ec9b61d5bb5 43 void SyncDelivering()
hassan_elahi 0:6ec9b61d5bb5 44 {
hassan_elahi 0:6ec9b61d5bb5 45 if (byPassStatus)
hassan_elahi 0:6ec9b61d5bb5 46 Delivering (HFAC_Amplitude, HFAC_Duration);
hassan_elahi 0:6ec9b61d5bb5 47 else
hassan_elahi 0:6ec9b61d5bb5 48 Delivering (10, 100);
hassan_elahi 0:6ec9b61d5bb5 49
hassan_elahi 0:6ec9b61d5bb5 50 wait_ms(1000);
hassan_elahi 0:6ec9b61d5bb5 51 }
hassan_elahi 0:6ec9b61d5bb5 52
hassan_elahi 0:6ec9b61d5bb5 53 //Check the by Pass mode "HFAC ON or OFF"
hassan_elahi 0:6ec9b61d5bb5 54 void checkByPass()
hassan_elahi 0:6ec9b61d5bb5 55 {
hassan_elahi 0:6ec9b61d5bb5 56 wait_ms(100);
hassan_elahi 0:6ec9b61d5bb5 57 if (byPassButton){
hassan_elahi 0:6ec9b61d5bb5 58 LCD.putc('A');
hassan_elahi 0:6ec9b61d5bb5 59 byPassStatus = false;
hassan_elahi 0:6ec9b61d5bb5 60 }
hassan_elahi 0:6ec9b61d5bb5 61 else{
hassan_elahi 0:6ec9b61d5bb5 62 LCD.putc('B');
hassan_elahi 0:6ec9b61d5bb5 63 byPassStatus = true;
hassan_elahi 0:6ec9b61d5bb5 64 }
hassan_elahi 0:6ec9b61d5bb5 65 led4 = !led4;
hassan_elahi 0:6ec9b61d5bb5 66 }
hassan_elahi 0:6ec9b61d5bb5 67
hassan_elahi 0:6ec9b61d5bb5 68 //Interrupt function for R wave fall time
hassan_elahi 0:6ec9b61d5bb5 69 void syncInFuncFall()
hassan_elahi 0:6ec9b61d5bb5 70 {
hassan_elahi 0:6ec9b61d5bb5 71 wait_ms(100);
hassan_elahi 0:6ec9b61d5bb5 72 if (syncShock){
hassan_elahi 0:6ec9b61d5bb5 73 buttonLEDs(shockButtonGreenLED, Disable);
hassan_elahi 0:6ec9b61d5bb5 74 }
hassan_elahi 0:6ec9b61d5bb5 75 }
hassan_elahi 0:6ec9b61d5bb5 76 //Interrupt function for R wave raise time (Also calculating the average of
hassan_elahi 0:6ec9b61d5bb5 77 // HeartRateAvg samples of R wave signals
hassan_elahi 0:6ec9b61d5bb5 78 void syncInFunc()
hassan_elahi 0:6ec9b61d5bb5 79 {
hassan_elahi 0:6ec9b61d5bb5 80 if (syncShock)
hassan_elahi 0:6ec9b61d5bb5 81 if(heartRateTimerStart){
hassan_elahi 0:6ec9b61d5bb5 82 if (heartMeanCounter < HeartRateAvg){
hassan_elahi 0:6ec9b61d5bb5 83 buttonLEDs(shockButtonGreenLED, Enable);
hassan_elahi 0:6ec9b61d5bb5 84 heartRateTemp += heartRateTimer.read_us();
hassan_elahi 0:6ec9b61d5bb5 85 //pc.printf("%d ", heartMeanCounter);
hassan_elahi 0:6ec9b61d5bb5 86 heartMeanCounter ++;
hassan_elahi 0:6ec9b61d5bb5 87 }
hassan_elahi 0:6ec9b61d5bb5 88 else{
hassan_elahi 0:6ec9b61d5bb5 89 syncShock = false;
hassan_elahi 0:6ec9b61d5bb5 90 buttonLEDs(shockButtonRedLED, Enable);
hassan_elahi 0:6ec9b61d5bb5 91
hassan_elahi 0:6ec9b61d5bb5 92 heartRate = heartRateTemp / HeartRateAvg;
hassan_elahi 0:6ec9b61d5bb5 93 heartMeanCounter = 0;
hassan_elahi 0:6ec9b61d5bb5 94 heartRateTemp = 0;
hassan_elahi 0:6ec9b61d5bb5 95 int fireTime = heartRate - ((HFAC_Duration*1000) % heartRate)- 013.8* HFAC_Duration - 23625;//- ( -0.011*HFAC_Duration + 45.278)-10;
hassan_elahi 0:6ec9b61d5bb5 96 //pc.printf("%d ", heartRate);
hassan_elahi 0:6ec9b61d5bb5 97 //pc.printf("%d ", HFAC_Duration);
hassan_elahi 0:6ec9b61d5bb5 98 //pc.printf("%d ", fireTime);
hassan_elahi 0:6ec9b61d5bb5 99 deliverTimeout.attach_us(&SyncDelivering, fireTime);
hassan_elahi 0:6ec9b61d5bb5 100
hassan_elahi 0:6ec9b61d5bb5 101 }
hassan_elahi 0:6ec9b61d5bb5 102 heartRateTimer.reset();
hassan_elahi 0:6ec9b61d5bb5 103 }
hassan_elahi 0:6ec9b61d5bb5 104 else{
hassan_elahi 0:6ec9b61d5bb5 105 heartRateTimerStart = true;
hassan_elahi 0:6ec9b61d5bb5 106 heartRateTimer.start();
hassan_elahi 0:6ec9b61d5bb5 107 heartMeanCounter = 0;
hassan_elahi 0:6ec9b61d5bb5 108 }
hassan_elahi 0:6ec9b61d5bb5 109
hassan_elahi 0:6ec9b61d5bb5 110
hassan_elahi 0:6ec9b61d5bb5 111 }
hassan_elahi 0:6ec9b61d5bb5 112
hassan_elahi 0:6ec9b61d5bb5 113 //Shock and Charge button LEDS
hassan_elahi 0:6ec9b61d5bb5 114 void buttonLEDs(int led, bool enable)
hassan_elahi 0:6ec9b61d5bb5 115 {
hassan_elahi 0:6ec9b61d5bb5 116 switch (led) {
hassan_elahi 0:6ec9b61d5bb5 117 case 0:
hassan_elahi 0:6ec9b61d5bb5 118 if(enable) {
hassan_elahi 0:6ec9b61d5bb5 119 shockRedLED = 1;
hassan_elahi 0:6ec9b61d5bb5 120 shockGreenLED = 0;
hassan_elahi 0:6ec9b61d5bb5 121 } else {
hassan_elahi 0:6ec9b61d5bb5 122 shockRedLED = 0;
hassan_elahi 0:6ec9b61d5bb5 123 shockGreenLED = 0;
hassan_elahi 0:6ec9b61d5bb5 124 }
hassan_elahi 0:6ec9b61d5bb5 125 break;
hassan_elahi 0:6ec9b61d5bb5 126 case 1:
hassan_elahi 0:6ec9b61d5bb5 127 if(enable) {
hassan_elahi 0:6ec9b61d5bb5 128 shockRedLED = 0;
hassan_elahi 0:6ec9b61d5bb5 129 shockGreenLED = 1;
hassan_elahi 0:6ec9b61d5bb5 130 } else {
hassan_elahi 0:6ec9b61d5bb5 131 shockRedLED = 0;
hassan_elahi 0:6ec9b61d5bb5 132 shockGreenLED = 0;
hassan_elahi 0:6ec9b61d5bb5 133 }
hassan_elahi 0:6ec9b61d5bb5 134 break;
hassan_elahi 0:6ec9b61d5bb5 135 case 2:
hassan_elahi 0:6ec9b61d5bb5 136 if(enable) {
hassan_elahi 0:6ec9b61d5bb5 137 chargeRedLED = 1;
hassan_elahi 0:6ec9b61d5bb5 138 chargeGreenLED = 0;
hassan_elahi 0:6ec9b61d5bb5 139 } else {
hassan_elahi 0:6ec9b61d5bb5 140 chargeRedLED = 0;
hassan_elahi 0:6ec9b61d5bb5 141 chargeGreenLED = 0;
hassan_elahi 0:6ec9b61d5bb5 142 }
hassan_elahi 0:6ec9b61d5bb5 143 break;
hassan_elahi 0:6ec9b61d5bb5 144 case 3:
hassan_elahi 0:6ec9b61d5bb5 145 if(enable) {
hassan_elahi 0:6ec9b61d5bb5 146 chargeRedLED = 0;
hassan_elahi 0:6ec9b61d5bb5 147 chargeGreenLED = 1;
hassan_elahi 0:6ec9b61d5bb5 148 } else {
hassan_elahi 0:6ec9b61d5bb5 149 chargeRedLED = 0;
hassan_elahi 0:6ec9b61d5bb5 150 chargeGreenLED = 1;
hassan_elahi 0:6ec9b61d5bb5 151 }
hassan_elahi 0:6ec9b61d5bb5 152 break;
hassan_elahi 0:6ec9b61d5bb5 153 }
hassan_elahi 0:6ec9b61d5bb5 154 }