Nucleo-transfer

Dependencies:   ADS1015 MPU6050 PixelArray-Nucleo mbed

Fork of Momo_Pilot_1 by Momo Medical

Revision:
21:13e4824bc364
Parent:
19:3b5999fa7b7e
Child:
22:a09775c25890
--- a/Sensorplate/main.cpp	Thu Sep 28 20:45:47 2017 +0000
+++ b/Sensorplate/main.cpp	Mon Oct 02 15:53:29 2017 +0000
@@ -1,4 +1,4 @@
-/*
+/********************* CODE INFORMATIE ******************************
 Author          :   Danny Eldering & Ricardo Molenaar
 Company         :   Momo Medical
 Source          :   developer.mbed.org
@@ -6,6 +6,8 @@
 Version | -date :   1.0 | 28-9-2017
 */
 
+/************************ CONFIG ***********************************/
+
 #include "mbed.h"
 #include "Adafruit_ADS1015.h"
 #include "MPU6050.h"
@@ -16,11 +18,10 @@
 InterruptIn lock(p16);                                                      // Interrupts for buttons.
 InterruptIn reposition(p17);
 InterruptIn mute(p15);
-InterruptIn new_patient(p14);
-// Analog input between 0 and 1 (0 and 100 %) for reading batteryvoltage from accupack.
+InterruptIn new_patient(p18);
 DigitalIn   supplyvoltage(p20);                                             // Analog input between 0 and 1 for reading supplyvoltage from measuringpoint before power supply.
 
-PwmOut      LED_intern1(LED1);
+DigitalOut  LED_intern1(LED1);
 DigitalOut  LED_intern2(LED2);
 DigitalOut  LED_intern3(LED3);
 neopixel::PixelArray array(p11);
@@ -29,25 +30,24 @@
 Timer calibration_hold_timer;
 Timer delay;
 Timer speaker_timer;
-Timer led_timer;
+//Timer led_timer;
 
 DigitalOut speaker1(p21);
 DigitalOut speaker2(p22);
-DigitalOut lock_LED(p23);
-DigitalOut reposition_LED(p24);
-DigitalOut mute_LED(p25);
-DigitalOut new_patient_LED(p26);
-
+PwmOut lock_LED(p23);
+PwmOut reposition_LED(p24);
+PwmOut mute_LED(p25);
+PwmOut new_patient_LED(p26);
 
 I2C i2c(p28, p27);                  // I2C
-I2C i2cAccu(p7, p6);
+I2C i2cAccu(p9, p10);               // I2C for accupack
 MPU6050 agu(p28,p27);               // Accelerometer/Gyroscope Unit
 Adafruit_ADS1115 pr1(&i2c, 0x48);   // first PiëzoResistive ADC
 Adafruit_ADS1115 pr2(&i2c, 0x49);   // second PiëzoResistive ADC
 Adafruit_ADS1115 pel(&i2c, 0x4B);   // PiëzoElectric ADC
-Adafruit_ADS1015 adsAccu(&i2cAccu, 0x48);
+Adafruit_ADS1115 adsAccu(&i2cAccu, 0x48);
 Serial pc(USBTX, USBRX); // tx, rx  // Serial USB connection
-Serial pi(p9, p10);      // tx, rx  // Setup serial communication for pi.
+Serial pi(p13, p14);     // tx, rx  // Setup serial communication for pi.
 Timer t;                            // Timer for equally time-spaced samples
 Ticker sample_cycle;                // Polling cycle
 
@@ -62,10 +62,10 @@
 float acce[3];                      // Raw accelerometer data
 float gyro[3];                      // Raw gyroscope data
 char LED_colour;                                                            // Variable to set LED colour.
-bool lock_state, lock_flag, mute_state, alarm, calibration_flag, intensity_select;            // Boolean variables for states logging.
-bool mute_flag, new_patient_flag, reposition_flag;
-bool speaker_state, LED_red_state, LED_yellow_state, LED_green_state, power_plug_state;
-bool speaker_logged, LED_red_logged, LED_yellow_logged, LED_green_logged, power_plug_logged;
+bool lock_state = 0, lock_flag = 0, mute_state = 0, alarm = 0, calibration_flag = 0, intensity_select = 0;            // Boolean variables for states logging.
+bool mute_flag = 0, new_patient_flag = 0, reposition_flag = 0, sensorplate_connect = 0;
+bool speaker_state = 0, LED_red_state = 0, LED_yellow_state = 0, LED_green_state = 0, power_plug_state = 0;
+bool speaker_logged = 0, LED_red_logged = 0, LED_yellow_logged = 0, LED_green_logged = 0, power_plug_logged = 0;
 int locktime_ms = 2000;                                                     // Waittime for lock user interface in ms.
 int calibrationtime_ms = 5000;                                              // Time to press new_patient button for calibration system.
 int calibration_flash;                                                      // Variable for flash LED's to indicate calibration.
@@ -74,8 +74,11 @@
 int speaker_active_ms = 750;                                                // Time to iterate speaker on and off when alarm occurs.
 int alarm_voltage = 5867;                                                   // Needed voltage for alarm expressed as a digital 15 bit value (=20% of max battery voltage)
 int red_var, green_var, blue_var, intensity;                                // Variables to set LED intensity.
-uint16_t batteryvoltage_current = 0, batteryvoltage_last = 0;
+short batteryvoltage_current = 0, batteryvoltage_last = 0, powervoltage_current, powervoltage_last;                  // Variables to manage batteryvoltage.
 int intensity_day = 50, intensity_night = 25;                               // Intensity settings for LED's to wall.
+double control_LED_intensity = 0;                                           // Variable between 0 and 1 to set the intensity of the LED's above the buttons.
+
+/*************************** CODE ********************************/
 
 void set_intensity()                                                        // Function to set the intensity for the LED's.
 {
@@ -84,14 +87,13 @@
     } else {
         intensity = intensity_night;
     }
+    control_LED_intensity = (intensity/100);
 }
 
 void serial_read()                                                          // Serial read for select LED intensity and colour.
 {
     if (pi.readable()) {
         char message[10];
-        pi.scanf("%s",message);
-        pc.printf("%s", message);
 
         if (message[0] == '0') {
             intensity_select = 0;
@@ -115,258 +117,8 @@
     }
 }
 
-void colour_select(char LED_colour)                                         // Function to select the colour.
-{
-    set_intensity();                                                        // Call function set_intensity
-
-    if (LED_colour == 'r') {
-        red_var = (2.55*intensity);
-        green_var = 0;
-        blue_var = 0;
-        LED_red_state = 1;
-    } else {
-        LED_red_state = 0;
-    }
-
-    if (LED_colour == 'y') {
-        red_var = (2.55*intensity);
-        green_var = (2.55*intensity);
-        blue_var = 0;
-        LED_yellow_state = 1;
-    } else {
-        LED_green_state = 0;
-    }
-
-    if (LED_colour == 'g') {
-        red_var = 0;
-        green_var = (2.55*intensity);
-        blue_var = 0;
-        LED_green_state = 1;
-    } else {
-        LED_green_state = 0;
-    }
-
-    if (calibration_flash >= 1) {
-        if ((calibration_flash % 2) == 0) {
-            red_var = 255;
-            green_var = 255;
-            blue_var = 255;
-        } else {
-            red_var = 0;
-            green_var = 0;
-            blue_var = 0;
-        }
-        calibration_flash--;
-    }
-}
-
-void trigger_lock()                                                         // If rising edge lock button is detected start locktimer.
-{
-    lock_hold_timer.start();
-    delay.reset();
-    delay.start();
-}
-
-void timer_lock()                                                           // End timer lock.
-{
-    lock_flag = 0;                                                          // Set lock_flag off.
-    lock_hold_timer.stop();                                                 // Stop and reset holdtimer
-    lock_hold_timer.reset();
-}
-
-void trigger_reposition()
-{
-    if (lock_state == 1 | (delay.read_ms() < buttondelay_ms)) {             // Control statement for lock interface and delay for non using buttons at the same time.
-    } else {
-        delay.reset();
-        delay.start();
-
-        if (LED_intern1 == 0) {
-            LED_intern1 = 1.0;
-        } else {
-            LED_intern1 = 0.0;
-        }
-
-        reposition_flag = 1;
-
-        reposition_LED = 1;
-    }
-}
-
-void trigger_mute()
-{
-    pc.printf("Mute_triggered.\n");
-    if (lock_state == 1 | (delay.read_ms() < buttondelay_ms)) {             // Control statement for lock interface and delay for non using buttons at the same time.
-        mute_state = 0;
-    } else {
-        delay.reset();
-        delay.start();
-        mute_state = !mute_state;
-
-        if (LED_intern1 == 0) {
-            LED_intern1 = 1.0;
-        } else {
-            LED_intern1 = 0.0;
-        }
-
-        mute_flag = 1;
-
-        mute_LED = 1;
-    }
-}
-
-void trigger_new_patient()                                                  // Function to trigger hold timer for new patient calibration function.
-{
-    if (lock_state == 1) {
-    } else {
-        calibration_hold_timer.start();
-        new_patient_LED = 1;
-    }
-}
-
-void timer_calibration()                                                    // Timer calibration function.
+void serial_log()
 {
-    new_patient_LED = 0;
-    
-    if (calibration_hold_timer.read_ms()<calibrationtime_ms) {
-        new_patient_flag = 1;
-    }
-    
-    calibration_hold_timer.stop();
-    calibration_hold_timer.reset();
-
-    if (lock_state == 1 | (delay.read_ms() < buttondelay_ms)) {             // Control statement for lock interface and delay for non using buttons at the same time.
-    } else {
-        if (calibration_flag == 0) {
-
-            if (LED_intern1 == 0) {
-                LED_intern1 = 1.0;
-            } else {
-                LED_intern1 = 0.0;
-            }
-
-        } else {
-            calibration_flag = 0;
-        }
-    }
-}
-
-void generate(neopixel::Pixel * out, uint32_t index, uintptr_t val)         // Generate LED colour.
-{
-    out->red   = red_var;
-    out->green = green_var;
-    out->blue  = blue_var;
-}
-
-void read_voltage()
-{
-    LED_intern3 = 0;
-
-    if (batteryvoltage_current > alarm_voltage) {                    // If supplyvoltage (readed from input) is greater then the setted alarmvoltage.
-        alarm = 0;                                                          // Alarm is off.
-        speaker_state = 0;
-    } else {
-        alarm = 1;                                                          // Else alarm is on.
-        speaker_state = 1;
-    }
-
-    if (alarm == 1 && mute_state == 0 && (speaker_timer.read_ms() < speaker_active_ms)) { // Set speaker on for 750 ms.
-        speaker1 = 1;                                                       // Set speaker.
-        speaker2 = 1;
-        speaker_timer.start();                                              // Set timer for speaker to iterate on and off.
-        LED_intern3 = !LED_intern3;
-    }
-
-    if (alarm == 1 && mute_state == 1 && (speaker_timer.read_ms() < speaker_active_ms)) { // Set speaker on for 750 ms.
-        speaker1 = 0;                                                       // Set speaker.
-        speaker2 = 0;
-        speaker_timer.start();                                              // Set timer for speaker to iterate on and off.
-        LED_intern3 = !LED_intern3;
-    }
-
-    if ((speaker_timer.read_ms() > speaker_active_ms) && (speaker_timer.read_ms() < (speaker_active_ms*2))) {
-        speaker1 = 0;                                                       // Turn off speaker (use two outputs because of currentlimiting of one).
-        speaker2 = 0;
-    }
-
-    if (speaker_timer.read_ms() > (speaker_active_ms*2)) {
-        speaker_timer.stop();                                               // Stop speaker timer.
-        speaker_timer.reset();
-    }
-
-    batteryvoltage_current = adsAccu.readADC_SingleEnded(0);                // Read channel 0
-
-    if (supplyvoltage.read() == 0) {
-        power_plug_state = 1;
-    } else {
-        power_plug_state = 0;
-    }
-}
-
-void read_adc()
-{
-    pc.printf("Read_adc\n");
-    t.reset();
-    t.start();
-
-    elec[0] = pel.readADC_SingleEnded(0);       //First PE readout
-
-    for (k = 0; k < 4; k = k + 1) {
-        res[k] =    pr1.readADC_SingleEnded(k); //First 4 PR readout
-    }
-    while(t.read_us()<(1*(cycle_time/5))) {}    //Wait untill 20% of cycle
-
-    elec[1] = pel.readADC_SingleEnded(0);       //Second PE readout
-
-    for (k = 0; k < 4; k = k + 1) {
-        res[k+4] =  pr2.readADC_SingleEnded(k); //Last 4 PR readout
-    }
-    while(t.read_us()<(2*(cycle_time/5))) {}    //Wait untill 40% of cycle
-
-    elec[2] = pel.readADC_SingleEnded(0);       //Third PE readout
-
-    agu.getAccelero(acce);                      //Get accelerometer data
-    angle = acce[2]*10;
-    agu.getGyro(gyro);                          //Get gyroscope data
-
-    while(t.read_us()<(3*(cycle_time/5))) {}    //Wait untill 60% of cycle
-
-    elec[3] = pel.readADC_SingleEnded(0);       //Fourth PE readout
-
-    if ((lock_hold_timer.read_ms() > locktime_ms) && lock_flag == 0 && lock == 1) { // If statement for lock function.
-        lock_flag = 1;
-        LED_intern2 = !LED_intern2;
-        lock_state = !lock_state;
-    }
-
-    if ((calibration_hold_timer.read_ms() > calibrationtime_ms) && calibration_flag == 0 && new_patient == 1) { // If statement for calibration system.
-        calibration_flag = 1;
-        calibration_flash = 11;
-        pi.printf(">30\n");                    // Print statement for serial communication to inform algorithm to calibrate.
-    }
-
-    if (delay.read_ms() > delay_lock_interface) {                       // If buttons are not pressed for 3 minutes, set lock active.
-        lock_state = 1;
-        LED_intern2 = 1;
-    }
-
-    batteryvoltage_current = batteryvoltage_current*100;
-    batteryvoltage_current = batteryvoltage_last;
-    read_voltage();                                                     // Supplyvoltage control for alarm.
-
-    uint32_t val = 0;
-    colour_select(LED_colour);
-    array.update(generate, NLED, val);
-
-    while(t.read_us()<(4*(cycle_time/5))) {}    //Wait untill 80% of cycle
-
-    elec[4] = pel.readADC_SingleEnded(0);       //Fifth PE readout
-
-    while(t.read_us()<(4.25*(cycle_time/5))) {}  //Wait untill 85% of cycle
-    pi.printf("!,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%f,%f,%f,%f,%f,%f,\n", res[4], res[7], res[6], res[5], res[1], res[0], res[2], res[3], elec[0], elec[1], elec[2], elec[3], elec[4], acce[0]*100, acce[1]*100, acce[2]*100, gyro[0]*100, gyro[1]*100, gyro[2]*100); // print all to serial port
-    //receiving order: 8 resistive sensors, 5 electric readings, 3 accelerometer axes, 3 gyroscope axes
-
-    serial_read();
     if (mute_flag == 1) {
         pi.printf(">01\n");
         pc.printf(">01\n");
@@ -437,19 +189,321 @@
     if (power_plug_logged != power_plug_state) {
         if (power_plug_state == 1) {
             pi.printf("#08\n");
+            pc.printf("#08 power on\n");
             power_plug_logged = power_plug_state;
         }
         if (power_plug_state == 0) {
             pi.printf("#80\n");
+            pc.printf("#08 power off\n");
             power_plug_logged = power_plug_state;
         }
     }
 }
 
+void colour_select(char LED_colour)                                         // Function to select the colour.
+{
+    set_intensity();                                                        // Call function set_intensity
+
+    if (LED_colour == 'r') {
+        red_var = (2.55*intensity);
+        green_var = 0;
+        blue_var = 0;
+        LED_red_state = 1;
+    } else {
+        LED_red_state = 0;
+    }
+
+    if (LED_colour == 'y') {
+        red_var = (2.55*intensity);
+        green_var = (2.55*intensity);
+        blue_var = 0;
+        LED_yellow_state = 1;
+    } else {
+        LED_green_state = 0;
+    }
+
+    if (LED_colour == 'g') {
+        red_var = 0;
+        green_var = (2.55*intensity);
+        blue_var = 0;
+        LED_green_state = 1;
+    } else {
+        LED_green_state = 0;
+    }
+
+    if (calibration_flash >= 1) {
+        if ((calibration_flash % 2) == 0) {
+            red_var = 255;
+            green_var = 255;
+            blue_var = 255;
+        } else {
+            red_var = 0;
+            green_var = 0;
+            blue_var = 0;
+        }
+        calibration_flash--;
+    }
+}
+
+void trigger_lock()                                                         // If rising edge lock button is detected start locktimer.
+{
+    pc.printf("Lock triggered.\n");
+    lock_hold_timer.reset();
+    lock_hold_timer.start();
+    delay.reset();
+    delay.start();
+}
+
+void timer_lock()                                                           // End timer lock.
+{
+    lock_flag = 0;                                                          // Set lock_flag off.
+    lock_hold_timer.stop();                                                 // Stop and reset holdtimer
+    lock_hold_timer.reset();
+}
+
+void trigger_reposition()
+{
+    if (lock_state == 1 | (delay.read_ms() < buttondelay_ms)) {             // Control statement for lock interface and delay for non using buttons at the same time.
+    } else {
+        delay.reset();
+        delay.start();
+        pc.printf("Reposition triggered.\n");
+        if (LED_intern1 == 0) {
+            LED_intern1 = 1;
+        } else {
+            LED_intern1 = 0;
+        }
+
+        reposition_flag = 1;
+
+        reposition_LED = control_LED_intensity;
+    }
+}
+
+void rise_reposition()
+{
+    reposition_LED = 0;
+}
+
+void trigger_mute()
+{
+
+    if (lock_state == 1 | (delay.read_ms() < buttondelay_ms)) {             // Control statement for lock interface and delay for non using buttons at the same time.
+    } else {
+        delay.reset();
+        delay.start();
+        mute_state = !mute_state;
+        if (mute_state == 1) {
+            mute_LED = control_LED_intensity;
+        } else {
+            mute_LED = 0;
+        }
+        pc.printf("Mute triggered %d.\n",mute_state);
+        if (LED_intern1 == 0) {
+            LED_intern1 = 1;
+        } else {
+            LED_intern1 = 0;
+        }
+
+        mute_flag = 1;
+    }
+}
+
+void trigger_new_patient()                                                  // Function to trigger hold timer for new patient calibration function.
+{
+
+    if (lock_state == 1) {
+    } else {
+        calibration_hold_timer.reset();
+        calibration_hold_timer.start();
+        new_patient_LED = control_LED_intensity;;
+        pc.printf("New patient triggered.\n");
+    }
+}
+
+void timer_calibration()                                                    // Timer calibration function.
+{
+    new_patient_LED = 0;
+
+    if (0 < calibration_hold_timer.read_ms() < calibrationtime_ms) {
+        new_patient_flag = 1;
+    }
+
+    calibration_hold_timer.stop();
+    calibration_hold_timer.reset();
+
+    if (lock_state == 1 | (delay.read_ms() < buttondelay_ms)) {             // Control statement for lock interface and delay for non using buttons at the same time.
+    } else {
+        if (calibration_flag == 0) {
+
+            if (LED_intern1 == 0) {
+                LED_intern1 = 1;
+            } else {
+                LED_intern1 = 0;
+            }
+
+        } else {
+            calibration_flag = 0;
+        }
+    }
+}
+
+void timer_functions()
+{
+    if ((lock_hold_timer.read_ms() > locktime_ms) && lock_flag == 0 && lock == 0) { // If statement for lock function.
+        lock_flag = 1;
+        LED_intern2 = !LED_intern2;
+        lock_state = !lock_state;
+        if (lock_state == 0) {
+            lock_LED = control_LED_intensity;
+        } else {
+            lock_LED = 0;
+        }
+    }
+
+    if ((calibration_hold_timer.read_ms() > calibrationtime_ms) && calibration_flag == 0 && new_patient == 0) { // If statement for calibration system.
+        calibration_flag = 1;
+        calibration_flash = 11;
+        pc.printf("Calibrate triggered.\n");
+        pi.printf(">30\n");                                                 // Print statement for serial communication to inform algorithm to calibrate.
+    }
+
+    if (delay.read_ms() > delay_lock_interface) {                           // If buttons are not pressed for 3 minutes, set lock active.
+        lock_state = 1;
+        LED_intern2 = 1;
+        lock_LED = 0;
+    }
+}
+
+void generate(neopixel::Pixel * out, uint32_t index, uintptr_t val)         // Generate LED colour.
+{
+    out->red   = red_var;
+    out->green = green_var;
+    out->blue  = blue_var;
+}
+
+void set_ui_LED()                                                           // Control functions for LED above buttons (added because of failures).
+{
+    if (lock_state == 1) {
+    } else {
+        if (reposition == 0) {
+            reposition_LED = 1;
+        } else {
+            reposition_LED = 0;
+        }
+
+        if (new_patient == 0) {
+            new_patient_LED = 1;
+        } else {
+            new_patient_LED = 0;
+        }
+    }
+}
+
+void read_voltage()
+{
+    if (power_plug_state == 1) {                           // If supplyvoltage (readed from input) is greater then the setted alarmvoltage.
+        alarm = 0;                                                          // Alarm is off.
+        speaker_state = 0;
+    } else {
+        alarm = 1;                                                          // Else alarm is on.
+        speaker_state = 1;
+    }
+    
+    
+    if (alarm == 1 && mute_state == 1 && (batteryvoltage_current > alarm_voltage)) {                                  // Set speaker on for 750 ms.
+        speaker1 = 0;                                                       // Set speaker.
+        speaker2 = 0;
+    }
+
+    if ((alarm == 1 && mute_state == 0 && (speaker_timer.read_ms() < speaker_active_ms)) || ((batteryvoltage_current < alarm_voltage) && (speaker_timer.read_ms() < speaker_active_ms))) { // Set speaker on for 750 ms.
+        speaker1 = 1;                                                       // Set speaker.
+        speaker2 = 1;
+        speaker_timer.reset();
+        speaker_timer.start();                                              // Set timer for speaker to iterate on and off.
+    }
+
+    if ((speaker_timer.read_ms() > speaker_active_ms) && (speaker_timer.read_ms() < (speaker_active_ms*2))) {
+        speaker1 = 0;                                                       // Turn off speaker (use two outputs because of currentlimiting of one).
+        speaker2 = 0;
+    }
+
+    if (speaker_timer.read_ms() > (speaker_active_ms*2)) {
+        speaker_timer.stop();                                               // Stop speaker timer.
+        speaker_timer.reset();
+    }
+
+    batteryvoltage_current = adsAccu.readADC_SingleEnded(0);                // Read channel 0 from external ADC.
+    powervoltage_current = adsAccu.readADC_SingleEnded(1);                 // Read channel 1 from external ADC.
+    
+    if (powervoltage_current < 20000) {
+        power_plug_state = 0;
+    } else {
+        power_plug_state = 1;
+    }
+}
+
+void read_adc()
+{
+    t.reset();
+    t.start();
+
+    if (sensorplate_connect == 1) {
+        elec[0] = pel.readADC_SingleEnded(0);                               // First PE readout
+
+        for (k = 0; k < 4; k = k + 1) {
+            res[k] =    pr1.readADC_SingleEnded(k);                         // First 4 PR readout
+        }
+        while(t.read_us()<(1*(cycle_time/5))) {}                            // Wait untill 20% of cycle
+
+        elec[1] = pel.readADC_SingleEnded(0);                               // Second PE readout
+
+        for (k = 0; k < 4; k = k + 1) {
+            res[k+4] =  pr2.readADC_SingleEnded(k);                         // Last 4 PR readout
+        }
+        while(t.read_us()<(2*(cycle_time/5))) {}                            // Wait untill 40% of cycle
+
+        elec[2] = pel.readADC_SingleEnded(0);                               // Third PE readout
+
+        agu.getAccelero(acce);                                              // Get accelerometer data
+        angle = acce[2]*10;
+        agu.getGyro(gyro);                                                  // Get gyroscope data
+
+        while(t.read_us()<(3*(cycle_time/5))) {}                            // Wait untill 60% of cycle
+
+        elec[3] = pel.readADC_SingleEnded(0);                               // Fourth PE readout
+    }
+
+    timer_functions();
+
+    batteryvoltage_current = batteryvoltage_last;
+    powervoltage_current = powervoltage_last;
+    read_voltage();                                                         // Supplyvoltage control for alarm.
+    pc.printf("Voltage = %d   ,   %d\n", batteryvoltage_current, powervoltage_current);
+
+    uint32_t val = 0;
+    colour_select(LED_colour);
+    array.update(generate, NLED, val);
+    set_ui_LED();
+
+    while(t.read_us()<(4*(cycle_time/5))) {}                                // Wait untill 80% of cycle
+
+    if (sensorplate_connect == 1) {
+        elec[4] = pel.readADC_SingleEnded(0);                               // Fifth PE readout
+    }
+
+    while(t.read_us()<(4.25*(cycle_time/5))) {}                             // Wait untill 85% of cycle
+    pi.printf("!,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%f,%f,%f,%f,%f,%f,\n", res[4], res[7], res[6], res[5], res[1], res[0], res[2], res[3], elec[0], elec[1], elec[2], elec[3], elec[4], acce[0]*100, acce[1]*100, acce[2]*100, gyro[0]*100, gyro[1]*100, gyro[2]*100); // print all to serial port
+    //receiving order: 8 resistive sensors, 5 electric readings, 3 accelerometer axes, 3 gyroscope axes
+    serial_read();
+    serial_log();
+}
+
 int main()
 {
     wait_ms(boot_delay_ms);                                                    // Wait to boot sensorplate first
     i2c.frequency(i2c_freq);
+    i2cAccu.frequency(i2c_freq);
     pc.baud(baud);
     pi.baud(baud);
     pr1.setGain(GAIN_TWOTHIRDS); // set range to +/-6.144V
@@ -458,19 +512,21 @@
     adsAccu.setGain(GAIN_TWOTHIRDS); // set range to +/-6.144V
     pi.format(8, SerialBase::None, 1);
 
-    lock.rise(&trigger_lock);                                               // Interrupt for rising edge lock button.
-    lock.fall(&timer_lock);
-    reposition.rise(&trigger_reposition);
-    mute.rise(&trigger_mute);
-    new_patient.rise(&trigger_new_patient);                                 // New patient/calibration button rising event.
-    new_patient.fall(&timer_calibration);                                   // Falling edge for calibration algorithm option.
+    lock.fall(&trigger_lock);                                               // Interrupt for rising edge lock button.
+    lock.rise(&timer_lock);
+    reposition.fall(&trigger_reposition);
+    reposition.rise(&rise_reposition);
+    mute.fall(&trigger_mute);
+    new_patient.fall(&trigger_new_patient);                                 // New patient/calibration button rising event.
+    new_patient.rise(&timer_calibration);                                   // Falling edge for calibration algorithm option.
     delay.reset();                                                          // Delaytimer reset en start.
     delay.start();
 
+    lock_LED = 0.75;                                                        // Lock LED initialization.
+
     sample_cycle.attach_us(&read_adc, cycle_time);
 
     while (1) {
         wait_us(cycle_time+1); // wait indefinitely because the ticker restarts every 50 ms
-        pc.printf("while\n");
     }
 }
\ No newline at end of file