Hassan Elahi
/
DFEB_New_Sync
HFAC
Diff: main.cpp
- Revision:
- 0:6ec9b61d5bb5
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Jul 02 17:55:54 2020 +0000 @@ -0,0 +1,215 @@ +#include "Functions.h" + + +DigitalIn shockButton(p16); +DigitalIn chargeButton(p17); +DigitalIn byPassButton(p32); + +//sync IN, ECG R wave In pin +InterruptIn SyncIn(p14); +//InterruptIn byPassButton(p15); + +//shock signal to defeb +DigitalOut shock(p26); +//charge signal to defeb +DigitalOut charge(p25); + +//charge signal from defeb +DigitalIn chargeLEDCheck(p30); + +// Relay to power Amplifier +DigitalOut HFAC_Relay(p5); +//Middle Relay off +DigitalOut M_Relay_B(p6); +//Middle Relay On +DigitalOut M_Relay(p7); +// Resistor Relay : No need any more +DigitalOut R_Relay(p8); + +//Sync out to dfeb to deliver the shock +DigitalOut SyncOut(p20); + +//HFAC Analog out put +AnalogOut HFAC(p18); + +//Test leds +DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); +DigitalOut led4(LED4); + +//Shock button Leds +DigitalOut shockRedLED(p34); +DigitalOut shockGreenLED(p33); + +//Charge button Leds +DigitalOut chargeRedLED(p39); +DigitalOut chargeGreenLED(p38); + +// serial link for LCD +Serial LCD(p9, p10); + +// serial link for PC +Serial pc(USBTX, USBRX); + +uint16_t sample = 0; + +char temp; +int HFAC_Duration = 1300; +int HFAC_Amplitude = 100; +int LCD_Counter = 0; +int LCD_Message = 0; +int LCD_Source = 0; + +bool byPassOldStatus = false; +bool byPassStatus = false; + +//Timer for calculating the time bewteen each R wave signal +Timer heartRateTimer; +//TimeOut Timer for deleviring shock after detecting "HeartRateAvg + 1" R wave signal +Timeout deliverTimeout; + +bool heartRateTimerStart = false; +int heartRate = 0; +int heartMeanCounter = 0; +int heartRateTemp = 0; + +bool syncActivate = false; +bool syncShock = false; + +bool DfebCharged = false; + +int main() +{ + + ////////init////////////// + LCD.baud(115200); + shockButton.mode(PullUp); + chargeButton.mode(PullUp); + byPassButton.mode(PullUp); + chargeLEDCheck.mode(PullDown); + + SyncIn.mode(PullDown); + + // byPassButton.rise(&checkByPass); + // byPassButton.fall(&checkByPass); + + M_Relay = 1; + wait_ms(1); + M_Relay = 0; + HFAC_Relay = 0; + R_Relay = 0; + // Make the HFAC analog to VDD/2 + HFAC.write_u16(offset); + + led1 = 1; + SyncOut =0; + wait_ms(200); + + checkByPass(); + + SyncIn.rise(&syncInFunc); + SyncIn.fall(&syncInFuncFall); + + + while(1) { + //Check if the bypass status has changed + if (byPassOldStatus != byPassButton){ + wait_ms(200); + checkByPass(); + } + + byPassOldStatus = byPassButton; + + //Check Charge button status + if (!chargeButton){ + charge =1; + led3 = 1; + led4 = 0; + + //R_Relay = 1; + + //M_Relay_B = 1; + //wait_ms(1); + //M_Relay_B = 0; + + //HFAC_Relay = 1; + wait_ms(100); + charge=0; + } + if (chargeLEDCheck){ + DfebCharged = true; + } + //Check Shock button status + if (!shockButton) { + //pc.printf("shock"); + wait_ms(50); + if (!shockButton){ + led4 = 1; + led3 = 0; + shock = 1; + wait_ms(300); + + M_Relay_B = 1; + wait_ms(1); + M_Relay_B = 0; + + HFAC_Relay = 1; + if (syncActivate){ + heartRateTimer.stop(); + heartRateTimer.reset(); + heartRateTimerStart = false; + heartRate = 0; + heartMeanCounter = 0; + heartRateTemp = 0; + syncShock = true; + } + else{ + if (byPassStatus) + Delivering (HFAC_Amplitude, HFAC_Duration); + else + Delivering (10, 100); + + wait_ms(1000); + } + } + } + //Check if there is a message from LCD + // The LCD message is in format of: 'A' + 2 bytes or 'B' + 2 bytes + // 'C' and 'D' for Activiate or Deactivate the sync mode ( Shock on R wave) + if(LCD.readable()) { + + temp = LCD.getc(); + led2 = !led2; + if (temp == 0x43) + syncActivate = true; + else if (temp == 0x44) + syncActivate = false; + + + if ((temp == 0x41 || temp == 0x42)&& !LCD_Counter){ + LCD_Source = temp; + LCD_Counter ++; + } + else if (LCD_Counter == 1){ + LCD_Counter ++; + LCD_Message = temp; + } + else if (LCD_Counter == 2){ + LCD_Counter ++; + LCD_Message = LCD_Message + (temp << 8); + LCD_Counter = 0; + if (LCD_Source == 0x41){ + HFAC_Duration = LCD_Message; + pc.printf("HF %d\n", HFAC_Duration); + } + else if (LCD_Source == 0x42){ + HFAC_Amplitude = LCD_Message ; + pc.printf("AM %d\n", HFAC_Amplitude); + } + } + + } + } + +}