Hassan Elahi
/
DFEB_New_Sync
HFAC
Functions.cpp@0:6ec9b61d5bb5, 2020-07-02 (annotated)
- Committer:
- hassan_elahi
- Date:
- Thu Jul 02 17:55:54 2020 +0000
- Revision:
- 0:6ec9b61d5bb5
HFAC
Who changed what in which revision?
User | Revision | Line number | New 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 | } |