Hassan Elahi
/
DFEB_New_Sync
HFAC
main.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 | DigitalIn shockButton(p16); |
hassan_elahi | 0:6ec9b61d5bb5 | 5 | DigitalIn chargeButton(p17); |
hassan_elahi | 0:6ec9b61d5bb5 | 6 | DigitalIn byPassButton(p32); |
hassan_elahi | 0:6ec9b61d5bb5 | 7 | |
hassan_elahi | 0:6ec9b61d5bb5 | 8 | //sync IN, ECG R wave In pin |
hassan_elahi | 0:6ec9b61d5bb5 | 9 | InterruptIn SyncIn(p14); |
hassan_elahi | 0:6ec9b61d5bb5 | 10 | //InterruptIn byPassButton(p15); |
hassan_elahi | 0:6ec9b61d5bb5 | 11 | |
hassan_elahi | 0:6ec9b61d5bb5 | 12 | //shock signal to defeb |
hassan_elahi | 0:6ec9b61d5bb5 | 13 | DigitalOut shock(p26); |
hassan_elahi | 0:6ec9b61d5bb5 | 14 | //charge signal to defeb |
hassan_elahi | 0:6ec9b61d5bb5 | 15 | DigitalOut charge(p25); |
hassan_elahi | 0:6ec9b61d5bb5 | 16 | |
hassan_elahi | 0:6ec9b61d5bb5 | 17 | //charge signal from defeb |
hassan_elahi | 0:6ec9b61d5bb5 | 18 | DigitalIn chargeLEDCheck(p30); |
hassan_elahi | 0:6ec9b61d5bb5 | 19 | |
hassan_elahi | 0:6ec9b61d5bb5 | 20 | // Relay to power Amplifier |
hassan_elahi | 0:6ec9b61d5bb5 | 21 | DigitalOut HFAC_Relay(p5); |
hassan_elahi | 0:6ec9b61d5bb5 | 22 | //Middle Relay off |
hassan_elahi | 0:6ec9b61d5bb5 | 23 | DigitalOut M_Relay_B(p6); |
hassan_elahi | 0:6ec9b61d5bb5 | 24 | //Middle Relay On |
hassan_elahi | 0:6ec9b61d5bb5 | 25 | DigitalOut M_Relay(p7); |
hassan_elahi | 0:6ec9b61d5bb5 | 26 | // Resistor Relay : No need any more |
hassan_elahi | 0:6ec9b61d5bb5 | 27 | DigitalOut R_Relay(p8); |
hassan_elahi | 0:6ec9b61d5bb5 | 28 | |
hassan_elahi | 0:6ec9b61d5bb5 | 29 | //Sync out to dfeb to deliver the shock |
hassan_elahi | 0:6ec9b61d5bb5 | 30 | DigitalOut SyncOut(p20); |
hassan_elahi | 0:6ec9b61d5bb5 | 31 | |
hassan_elahi | 0:6ec9b61d5bb5 | 32 | //HFAC Analog out put |
hassan_elahi | 0:6ec9b61d5bb5 | 33 | AnalogOut HFAC(p18); |
hassan_elahi | 0:6ec9b61d5bb5 | 34 | |
hassan_elahi | 0:6ec9b61d5bb5 | 35 | //Test leds |
hassan_elahi | 0:6ec9b61d5bb5 | 36 | DigitalOut led1(LED1); |
hassan_elahi | 0:6ec9b61d5bb5 | 37 | DigitalOut led2(LED2); |
hassan_elahi | 0:6ec9b61d5bb5 | 38 | DigitalOut led3(LED3); |
hassan_elahi | 0:6ec9b61d5bb5 | 39 | DigitalOut led4(LED4); |
hassan_elahi | 0:6ec9b61d5bb5 | 40 | |
hassan_elahi | 0:6ec9b61d5bb5 | 41 | //Shock button Leds |
hassan_elahi | 0:6ec9b61d5bb5 | 42 | DigitalOut shockRedLED(p34); |
hassan_elahi | 0:6ec9b61d5bb5 | 43 | DigitalOut shockGreenLED(p33); |
hassan_elahi | 0:6ec9b61d5bb5 | 44 | |
hassan_elahi | 0:6ec9b61d5bb5 | 45 | //Charge button Leds |
hassan_elahi | 0:6ec9b61d5bb5 | 46 | DigitalOut chargeRedLED(p39); |
hassan_elahi | 0:6ec9b61d5bb5 | 47 | DigitalOut chargeGreenLED(p38); |
hassan_elahi | 0:6ec9b61d5bb5 | 48 | |
hassan_elahi | 0:6ec9b61d5bb5 | 49 | // serial link for LCD |
hassan_elahi | 0:6ec9b61d5bb5 | 50 | Serial LCD(p9, p10); |
hassan_elahi | 0:6ec9b61d5bb5 | 51 | |
hassan_elahi | 0:6ec9b61d5bb5 | 52 | // serial link for PC |
hassan_elahi | 0:6ec9b61d5bb5 | 53 | Serial pc(USBTX, USBRX); |
hassan_elahi | 0:6ec9b61d5bb5 | 54 | |
hassan_elahi | 0:6ec9b61d5bb5 | 55 | uint16_t sample = 0; |
hassan_elahi | 0:6ec9b61d5bb5 | 56 | |
hassan_elahi | 0:6ec9b61d5bb5 | 57 | char temp; |
hassan_elahi | 0:6ec9b61d5bb5 | 58 | int HFAC_Duration = 1300; |
hassan_elahi | 0:6ec9b61d5bb5 | 59 | int HFAC_Amplitude = 100; |
hassan_elahi | 0:6ec9b61d5bb5 | 60 | int LCD_Counter = 0; |
hassan_elahi | 0:6ec9b61d5bb5 | 61 | int LCD_Message = 0; |
hassan_elahi | 0:6ec9b61d5bb5 | 62 | int LCD_Source = 0; |
hassan_elahi | 0:6ec9b61d5bb5 | 63 | |
hassan_elahi | 0:6ec9b61d5bb5 | 64 | bool byPassOldStatus = false; |
hassan_elahi | 0:6ec9b61d5bb5 | 65 | bool byPassStatus = false; |
hassan_elahi | 0:6ec9b61d5bb5 | 66 | |
hassan_elahi | 0:6ec9b61d5bb5 | 67 | //Timer for calculating the time bewteen each R wave signal |
hassan_elahi | 0:6ec9b61d5bb5 | 68 | Timer heartRateTimer; |
hassan_elahi | 0:6ec9b61d5bb5 | 69 | //TimeOut Timer for deleviring shock after detecting "HeartRateAvg + 1" R wave signal |
hassan_elahi | 0:6ec9b61d5bb5 | 70 | Timeout deliverTimeout; |
hassan_elahi | 0:6ec9b61d5bb5 | 71 | |
hassan_elahi | 0:6ec9b61d5bb5 | 72 | bool heartRateTimerStart = false; |
hassan_elahi | 0:6ec9b61d5bb5 | 73 | int heartRate = 0; |
hassan_elahi | 0:6ec9b61d5bb5 | 74 | int heartMeanCounter = 0; |
hassan_elahi | 0:6ec9b61d5bb5 | 75 | int heartRateTemp = 0; |
hassan_elahi | 0:6ec9b61d5bb5 | 76 | |
hassan_elahi | 0:6ec9b61d5bb5 | 77 | bool syncActivate = false; |
hassan_elahi | 0:6ec9b61d5bb5 | 78 | bool syncShock = false; |
hassan_elahi | 0:6ec9b61d5bb5 | 79 | |
hassan_elahi | 0:6ec9b61d5bb5 | 80 | bool DfebCharged = false; |
hassan_elahi | 0:6ec9b61d5bb5 | 81 | |
hassan_elahi | 0:6ec9b61d5bb5 | 82 | int main() |
hassan_elahi | 0:6ec9b61d5bb5 | 83 | { |
hassan_elahi | 0:6ec9b61d5bb5 | 84 | |
hassan_elahi | 0:6ec9b61d5bb5 | 85 | ////////init////////////// |
hassan_elahi | 0:6ec9b61d5bb5 | 86 | LCD.baud(115200); |
hassan_elahi | 0:6ec9b61d5bb5 | 87 | shockButton.mode(PullUp); |
hassan_elahi | 0:6ec9b61d5bb5 | 88 | chargeButton.mode(PullUp); |
hassan_elahi | 0:6ec9b61d5bb5 | 89 | byPassButton.mode(PullUp); |
hassan_elahi | 0:6ec9b61d5bb5 | 90 | chargeLEDCheck.mode(PullDown); |
hassan_elahi | 0:6ec9b61d5bb5 | 91 | |
hassan_elahi | 0:6ec9b61d5bb5 | 92 | SyncIn.mode(PullDown); |
hassan_elahi | 0:6ec9b61d5bb5 | 93 | |
hassan_elahi | 0:6ec9b61d5bb5 | 94 | // byPassButton.rise(&checkByPass); |
hassan_elahi | 0:6ec9b61d5bb5 | 95 | // byPassButton.fall(&checkByPass); |
hassan_elahi | 0:6ec9b61d5bb5 | 96 | |
hassan_elahi | 0:6ec9b61d5bb5 | 97 | M_Relay = 1; |
hassan_elahi | 0:6ec9b61d5bb5 | 98 | wait_ms(1); |
hassan_elahi | 0:6ec9b61d5bb5 | 99 | M_Relay = 0; |
hassan_elahi | 0:6ec9b61d5bb5 | 100 | HFAC_Relay = 0; |
hassan_elahi | 0:6ec9b61d5bb5 | 101 | R_Relay = 0; |
hassan_elahi | 0:6ec9b61d5bb5 | 102 | // Make the HFAC analog to VDD/2 |
hassan_elahi | 0:6ec9b61d5bb5 | 103 | HFAC.write_u16(offset); |
hassan_elahi | 0:6ec9b61d5bb5 | 104 | |
hassan_elahi | 0:6ec9b61d5bb5 | 105 | led1 = 1; |
hassan_elahi | 0:6ec9b61d5bb5 | 106 | SyncOut =0; |
hassan_elahi | 0:6ec9b61d5bb5 | 107 | wait_ms(200); |
hassan_elahi | 0:6ec9b61d5bb5 | 108 | |
hassan_elahi | 0:6ec9b61d5bb5 | 109 | checkByPass(); |
hassan_elahi | 0:6ec9b61d5bb5 | 110 | |
hassan_elahi | 0:6ec9b61d5bb5 | 111 | SyncIn.rise(&syncInFunc); |
hassan_elahi | 0:6ec9b61d5bb5 | 112 | SyncIn.fall(&syncInFuncFall); |
hassan_elahi | 0:6ec9b61d5bb5 | 113 | |
hassan_elahi | 0:6ec9b61d5bb5 | 114 | |
hassan_elahi | 0:6ec9b61d5bb5 | 115 | while(1) { |
hassan_elahi | 0:6ec9b61d5bb5 | 116 | //Check if the bypass status has changed |
hassan_elahi | 0:6ec9b61d5bb5 | 117 | if (byPassOldStatus != byPassButton){ |
hassan_elahi | 0:6ec9b61d5bb5 | 118 | wait_ms(200); |
hassan_elahi | 0:6ec9b61d5bb5 | 119 | checkByPass(); |
hassan_elahi | 0:6ec9b61d5bb5 | 120 | } |
hassan_elahi | 0:6ec9b61d5bb5 | 121 | |
hassan_elahi | 0:6ec9b61d5bb5 | 122 | byPassOldStatus = byPassButton; |
hassan_elahi | 0:6ec9b61d5bb5 | 123 | |
hassan_elahi | 0:6ec9b61d5bb5 | 124 | //Check Charge button status |
hassan_elahi | 0:6ec9b61d5bb5 | 125 | if (!chargeButton){ |
hassan_elahi | 0:6ec9b61d5bb5 | 126 | charge =1; |
hassan_elahi | 0:6ec9b61d5bb5 | 127 | led3 = 1; |
hassan_elahi | 0:6ec9b61d5bb5 | 128 | led4 = 0; |
hassan_elahi | 0:6ec9b61d5bb5 | 129 | |
hassan_elahi | 0:6ec9b61d5bb5 | 130 | //R_Relay = 1; |
hassan_elahi | 0:6ec9b61d5bb5 | 131 | |
hassan_elahi | 0:6ec9b61d5bb5 | 132 | //M_Relay_B = 1; |
hassan_elahi | 0:6ec9b61d5bb5 | 133 | //wait_ms(1); |
hassan_elahi | 0:6ec9b61d5bb5 | 134 | //M_Relay_B = 0; |
hassan_elahi | 0:6ec9b61d5bb5 | 135 | |
hassan_elahi | 0:6ec9b61d5bb5 | 136 | //HFAC_Relay = 1; |
hassan_elahi | 0:6ec9b61d5bb5 | 137 | wait_ms(100); |
hassan_elahi | 0:6ec9b61d5bb5 | 138 | charge=0; |
hassan_elahi | 0:6ec9b61d5bb5 | 139 | } |
hassan_elahi | 0:6ec9b61d5bb5 | 140 | if (chargeLEDCheck){ |
hassan_elahi | 0:6ec9b61d5bb5 | 141 | DfebCharged = true; |
hassan_elahi | 0:6ec9b61d5bb5 | 142 | } |
hassan_elahi | 0:6ec9b61d5bb5 | 143 | //Check Shock button status |
hassan_elahi | 0:6ec9b61d5bb5 | 144 | if (!shockButton) { |
hassan_elahi | 0:6ec9b61d5bb5 | 145 | //pc.printf("shock"); |
hassan_elahi | 0:6ec9b61d5bb5 | 146 | wait_ms(50); |
hassan_elahi | 0:6ec9b61d5bb5 | 147 | if (!shockButton){ |
hassan_elahi | 0:6ec9b61d5bb5 | 148 | led4 = 1; |
hassan_elahi | 0:6ec9b61d5bb5 | 149 | led3 = 0; |
hassan_elahi | 0:6ec9b61d5bb5 | 150 | shock = 1; |
hassan_elahi | 0:6ec9b61d5bb5 | 151 | wait_ms(300); |
hassan_elahi | 0:6ec9b61d5bb5 | 152 | |
hassan_elahi | 0:6ec9b61d5bb5 | 153 | M_Relay_B = 1; |
hassan_elahi | 0:6ec9b61d5bb5 | 154 | wait_ms(1); |
hassan_elahi | 0:6ec9b61d5bb5 | 155 | M_Relay_B = 0; |
hassan_elahi | 0:6ec9b61d5bb5 | 156 | |
hassan_elahi | 0:6ec9b61d5bb5 | 157 | HFAC_Relay = 1; |
hassan_elahi | 0:6ec9b61d5bb5 | 158 | if (syncActivate){ |
hassan_elahi | 0:6ec9b61d5bb5 | 159 | heartRateTimer.stop(); |
hassan_elahi | 0:6ec9b61d5bb5 | 160 | heartRateTimer.reset(); |
hassan_elahi | 0:6ec9b61d5bb5 | 161 | heartRateTimerStart = false; |
hassan_elahi | 0:6ec9b61d5bb5 | 162 | heartRate = 0; |
hassan_elahi | 0:6ec9b61d5bb5 | 163 | heartMeanCounter = 0; |
hassan_elahi | 0:6ec9b61d5bb5 | 164 | heartRateTemp = 0; |
hassan_elahi | 0:6ec9b61d5bb5 | 165 | syncShock = true; |
hassan_elahi | 0:6ec9b61d5bb5 | 166 | } |
hassan_elahi | 0:6ec9b61d5bb5 | 167 | else{ |
hassan_elahi | 0:6ec9b61d5bb5 | 168 | if (byPassStatus) |
hassan_elahi | 0:6ec9b61d5bb5 | 169 | Delivering (HFAC_Amplitude, HFAC_Duration); |
hassan_elahi | 0:6ec9b61d5bb5 | 170 | else |
hassan_elahi | 0:6ec9b61d5bb5 | 171 | Delivering (10, 100); |
hassan_elahi | 0:6ec9b61d5bb5 | 172 | |
hassan_elahi | 0:6ec9b61d5bb5 | 173 | wait_ms(1000); |
hassan_elahi | 0:6ec9b61d5bb5 | 174 | } |
hassan_elahi | 0:6ec9b61d5bb5 | 175 | } |
hassan_elahi | 0:6ec9b61d5bb5 | 176 | } |
hassan_elahi | 0:6ec9b61d5bb5 | 177 | //Check if there is a message from LCD |
hassan_elahi | 0:6ec9b61d5bb5 | 178 | // The LCD message is in format of: 'A' + 2 bytes or 'B' + 2 bytes |
hassan_elahi | 0:6ec9b61d5bb5 | 179 | // 'C' and 'D' for Activiate or Deactivate the sync mode ( Shock on R wave) |
hassan_elahi | 0:6ec9b61d5bb5 | 180 | if(LCD.readable()) { |
hassan_elahi | 0:6ec9b61d5bb5 | 181 | |
hassan_elahi | 0:6ec9b61d5bb5 | 182 | temp = LCD.getc(); |
hassan_elahi | 0:6ec9b61d5bb5 | 183 | led2 = !led2; |
hassan_elahi | 0:6ec9b61d5bb5 | 184 | if (temp == 0x43) |
hassan_elahi | 0:6ec9b61d5bb5 | 185 | syncActivate = true; |
hassan_elahi | 0:6ec9b61d5bb5 | 186 | else if (temp == 0x44) |
hassan_elahi | 0:6ec9b61d5bb5 | 187 | syncActivate = false; |
hassan_elahi | 0:6ec9b61d5bb5 | 188 | |
hassan_elahi | 0:6ec9b61d5bb5 | 189 | |
hassan_elahi | 0:6ec9b61d5bb5 | 190 | if ((temp == 0x41 || temp == 0x42)&& !LCD_Counter){ |
hassan_elahi | 0:6ec9b61d5bb5 | 191 | LCD_Source = temp; |
hassan_elahi | 0:6ec9b61d5bb5 | 192 | LCD_Counter ++; |
hassan_elahi | 0:6ec9b61d5bb5 | 193 | } |
hassan_elahi | 0:6ec9b61d5bb5 | 194 | else if (LCD_Counter == 1){ |
hassan_elahi | 0:6ec9b61d5bb5 | 195 | LCD_Counter ++; |
hassan_elahi | 0:6ec9b61d5bb5 | 196 | LCD_Message = temp; |
hassan_elahi | 0:6ec9b61d5bb5 | 197 | } |
hassan_elahi | 0:6ec9b61d5bb5 | 198 | else if (LCD_Counter == 2){ |
hassan_elahi | 0:6ec9b61d5bb5 | 199 | LCD_Counter ++; |
hassan_elahi | 0:6ec9b61d5bb5 | 200 | LCD_Message = LCD_Message + (temp << 8); |
hassan_elahi | 0:6ec9b61d5bb5 | 201 | LCD_Counter = 0; |
hassan_elahi | 0:6ec9b61d5bb5 | 202 | if (LCD_Source == 0x41){ |
hassan_elahi | 0:6ec9b61d5bb5 | 203 | HFAC_Duration = LCD_Message; |
hassan_elahi | 0:6ec9b61d5bb5 | 204 | pc.printf("HF %d\n", HFAC_Duration); |
hassan_elahi | 0:6ec9b61d5bb5 | 205 | } |
hassan_elahi | 0:6ec9b61d5bb5 | 206 | else if (LCD_Source == 0x42){ |
hassan_elahi | 0:6ec9b61d5bb5 | 207 | HFAC_Amplitude = LCD_Message ; |
hassan_elahi | 0:6ec9b61d5bb5 | 208 | pc.printf("AM %d\n", HFAC_Amplitude); |
hassan_elahi | 0:6ec9b61d5bb5 | 209 | } |
hassan_elahi | 0:6ec9b61d5bb5 | 210 | } |
hassan_elahi | 0:6ec9b61d5bb5 | 211 | |
hassan_elahi | 0:6ec9b61d5bb5 | 212 | } |
hassan_elahi | 0:6ec9b61d5bb5 | 213 | } |
hassan_elahi | 0:6ec9b61d5bb5 | 214 | |
hassan_elahi | 0:6ec9b61d5bb5 | 215 | } |