reeeeeeeeeeeeeee

Dependencies:   MotionSensor mbed

Fork of Assignment2_ver3 by weeb grammers

Revision:
7:6dc42e1a2a81
Parent:
4:f0a11480f39f
Child:
8:45befd2bb1e5
--- a/Hardware.cpp	Mon Nov 14 22:47:00 2016 +0000
+++ b/Hardware.cpp	Tue Nov 29 20:21:45 2016 +0000
@@ -1,5 +1,196 @@
 #include "Hardware.h"
 #include "mbed.h"
 
+#define LOW  0
+#define HIGH 1
 DigitalOut output_pin_A(LED3);
-DigitalOut output_pin_V(LED2);
\ No newline at end of file
+DigitalOut output_pin_V(LED2);
+/*=== Analog In ===*/
+AnalogIn atrialIn           (A0);      // Pin A0
+AnalogIn ventricleIn        (A1);      // Pin A1
+AnalogIn leadImpedence      (A2);      // Pin A2
+AnalogIn atr_rect_signal    (A3);      // Pin A3
+AnalogIn vent_rect_signal   (A4);      // Pin A4
+
+/*=== Digital In ===*/
+DigitalIn atria_cmp_detect  (PTC16);   // Pin D0
+DigitalIn vent_cmp_detect   (PTC17);   // Pin D1
+
+/*=== PWM Out ===*/
+/* DigitalOut is used for the REF Signal
+ * due to absence of PWM capabilities of Pins D2 and D4
+ * on the FRDM-K64F Board
+ */
+DigitalOut pacing_ref_pwm   (PTB9);    // Pin D2 (PTB9)
+PwmOut vent_ref_pwm         (PTA1);    // Pin D3
+DigitalOut atria_ref_pwm    (PTB23);   // Pin D4
+
+
+/*=== Digital Out ===*/
+DigitalOut pace_charge_ctrl (PTA2);    // Pin D5
+DigitalOut z_atria_ctrl     (PTC2);    // Pin D6
+DigitalOut z_vent_ctrl      (PTC3);    // Pin D7
+
+DigitalOut atr_pace_ctrl    (PTC12);   // Pin D8
+DigitalOut vent_pace_ctrl   (PTC4);    // Pin D9
+DigitalOut pace_grnd_ctrl   (PTD0);    // Pin D10
+DigitalOut atr_grnd_ctrl    (PTD2);    // Pin D11
+DigitalOut vent_grnd_ctrl   (PTD3);    // Pin D12
+DigitalOut frontend_ctrl    (PTD1);    // Pin D13
+
+/*=== On-Board Tri-LED ===*/
+DigitalOut rled (LED_RED);
+DigitalOut gled (LED_GREEN);
+DigitalOut bled (LED_BLUE);
+
+
+void send_data(Serial &pc,PaceHeart &Pacer){
+    
+             pc.printf ("%c",(char)Pacer.get_p_pacingState());
+             pc.printf ("%c",(char)Pacer.get_p_pacingMode());
+             pc.printf ("%c",(char)Pacer.get_p_hysteresis());
+             pc.printf ("%c%c",(char)((int)(Pacer.get_p_hysteresisInterval()/128)),(char)(Pacer.get_p_hysteresisInterval()%128));
+             pc.printf ("%c%c",(char)((int)(Pacer.get_p_lowrateInterval()/128)),(char)((int)(Pacer.get_p_lowrateInterval())%128));
+             pc.printf ("%c%c",(char)((int)(Pacer.get_p_vPaceAmp())/128),(char)((int)(Pacer.get_p_vPaceAmp())%128));
+             pc.printf ("%c%c",(char)((int)(10.0*Pacer.get_p_vPaceWidth())/128),(char)((int)(10.0*Pacer.get_p_vPaceWidth())%128));//10*pace width
+             pc.printf ("%c%c\n",(char)((int)(Pacer.get_p_VRP()/128)),(char)(Pacer.get_p_VRP()%128));
+             return;
+}
+void request_data(Serial &pc,PaceHeart &Pacer){ //implement limit later
+            char d[14];
+            int e = 0;
+            pc.scanf("%s",&d);
+            pc.printf("%c",'e');//end
+            e = (int)d[0];
+            //Pacer.set_p_pacingState(e);
+            e = (int)d[1];
+           // Pacer.set_p_pacingMode(e);
+            e = (int)d[2];
+            Pacer.set_p_hysteresis(e);
+            e = (int)d[3]*128+(int)d[4];
+            Pacer.set_p_hysteresisInterval(e);
+            e = (int)d[5]*128+(int)d[6];
+            Pacer.set_p_lowrateInterval(e);
+            e = (int)d[7]*128+(int)d[8];
+            Pacer.set_p_vPaceAmp((double)e);
+            e = (int)d[9]*128+(int)d[10];
+            Pacer.set_p_vPaceWidth((double)e/10.0);
+            e = (int)d[11]*128+(int)d[12];
+            Pacer.set_p_VRP(e);
+}
+
+
+void stream_A(Serial &pc){
+    int amp = (int)(3450*vent_rect_signal);
+    pc.printf("%c%c\n",(char)(amp/128),(char)(amp%128));
+}
+
+void stream_V(Serial &pc){
+    int amp = (int)(3450*ventricleIn);
+    pc.printf("%c%c\n",(char)(amp/128),(char)(amp%128));
+}
+
+void stream(Serial &pc, char mode){
+        char c;
+    while(1){
+        if(pc.readable()!=0){
+                c = pc.getc();
+                if(c=='q'){
+                    stream_A(pc);
+                    output_pin_V=!output_pin_V;
+                }
+                else if(c=='w'){
+                return;
+                }
+            } 
+        }
+}
+
+void Check_serial(Serial &pc,PaceHeart &Pacer){
+            char c = pc.getc();
+            if(c=='r'){//send params
+                send_data(pc,Pacer);
+                }
+            else if(c=='s') {//set params
+                request_data(pc,Pacer);
+            }
+            else if(c=='q'){ //stream egram
+                stream(pc,c);
+            }
+}
+
+
+void Output_A(double amp, double wid){
+    vent_ref_pwm = 0.5f;
+    vent_ref_pwm.pulsewidth(2);
+    /*AnalogOut aout(p18);  //sets up pin 18 as an analogue output
+        AnalogueIn ain(p15);  //sets up pin 15 and an analogue input
+ 
+        int main(){
+             aout=0.5;  //sets output to 0.5*VCC
+            while(1){    //sets up a loop
+             if (ain>0.3){   //tests whether the input is above 0.3
+            aout=0;  //sets the output to 0
+      }
+      aout = 0.5;
+      wait(1);
+      aout = 0;*/
+      // test the voltage on the initialized analog pin
+        //  and if greater than 0.3 * VCC set the digital pin
+        //  to a logic 1 otherwise a logic 0
+}
+void Output_V(double amp,double wid){
+    //vent_ref_pwm = 0.5f;
+    //vent_ref_pwm.pulsewidth(2);
+    atr_grnd_ctrl  = LOW;
+    vent_grnd_ctrl = LOW;
+    
+    /* Stage 1: Ref PWM On */
+    pacing_ref_pwm = HIGH;
+    wait_ms(10);
+
+    /* Stage 2: Charge CTRL on */
+    pace_charge_ctrl = HIGH;
+    wait_ms(10);
+    
+    vent_pace_ctrl = HIGH;
+    
+    // Pace Duration
+    wait_us(wid/10);
+    
+    // Shut off Pace
+    vent_pace_ctrl = LOW;
+    
+    atr_pace_ctrl =  LOW;
+    vent_pace_ctrl = LOW;
+    atr_grnd_ctrl  = HIGH;
+    vent_grnd_ctrl = HIGH;
+    wait_ms(50);
+    
+
+    /* Stage 2: Ref PWM LOW */
+    pacing_ref_pwm = LOW;
+    wait_ms(100);
+
+    /* Stage 3: Charge CTRL off */
+    pace_charge_ctrl = LOW;
+    wait_ms(10);
+    
+    /* Stage 4: Ground OFF */
+    atr_grnd_ctrl  = LOW;
+    vent_grnd_ctrl = LOW;
+    
+    output_pin_V=!output_pin_V;
+    /*AnalogOut aout(p18);  //sets up pin 18 as an analogue output
+        AnalogueIn ain(p15);  //sets up pin 15 and an analogue input
+ 
+        int main(){
+             aout=0.5;  //sets output to 0.5*VCC
+            while(1){    //sets up a loop
+             if (ain>0.3){   //tests whether the input is above 0.3
+            aout=0;  //sets the output to 0
+      }
+      aout = 0.5;
+      wait(1);
+      aout = 0;*/
+}
\ No newline at end of file