test

Dependencies:   ADS1015 MPU6050 MPU6050 PixelArray mbed

Committer:
Ishy
Date:
Thu Nov 30 09:02:00 2017 +0000
Revision:
0:ad6765bb587f
TestCode;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ishy 0:ad6765bb587f 1 #include "mbed.h" // Include files and define parameters.
Ishy 0:ad6765bb587f 2 #include "Adafruit_ADS1015.h"
Ishy 0:ad6765bb587f 3 #include "MPU6050.h"
Ishy 0:ad6765bb587f 4 #include "MPU6050_belt.h"
Ishy 0:ad6765bb587f 5 #include "neopixel.h"
Ishy 0:ad6765bb587f 6
Ishy 0:ad6765bb587f 7 #define NUMBER_LED_FRONT (3) // declaren waarvoor dient
Ishy 0:ad6765bb587f 8 #define ONE_COLOR
Ishy 0:ad6765bb587f 9
Ishy 0:ad6765bb587f 10 //------------------------------------
Ishy 0:ad6765bb587f 11 // Hyperterminal configuration
Ishy 0:ad6765bb587f 12 // 9600 bauds, 8-bit data, no parity
Ishy 0:ad6765bb587f 13 //------------------------------------
Ishy 0:ad6765bb587f 14
Ishy 0:ad6765bb587f 15 //Serial pc(SERIAL_TX, SERIAL_RX, 115200);
Ishy 0:ad6765bb587f 16 //Serial pi(PC_10, PC_11, 115200);
Ishy 0:ad6765bb587f 17 //I2C i2c_sensorplate_adc(PB_9, PB_8);
Ishy 0:ad6765bb587f 18 //MPU6050 angle_device_sensorplate(PB_9, PB_8);
Ishy 0:ad6765bb587f 19 //DigitalOut myled(LED1);
Ishy 0:ad6765bb587f 20 //DigitalIn button_lock(PC_1); // Input on intterupt base decleration.
Ishy 0:ad6765bb587f 21 //DigitalIn button_reposition(PC_2);
Ishy 0:ad6765bb587f 22 //DigitalIn button_mute(PC_0);
Ishy 0:ad6765bb587f 23 //DigitalIn button_new_patient(PC_3);
Ishy 0:ad6765bb587f 24 //
Ishy 0:ad6765bb587f 25 //MPU6050_belt angle_device_reference_belt(PB_9, PB_8); // i2c pins // i2c address hardcoded 0x69.
Ishy 0:ad6765bb587f 26 //Adafruit_ADS1115 piezo_resistive_adc1(&i2c_sensorplate_adc, 0x48); // i2c pins, i2c address.
Ishy 0:ad6765bb587f 27 //Adafruit_ADS1115 piezo_resistive_adc2(&i2c_sensorplate_adc, 0x49); // i2c pins, i2c address.
Ishy 0:ad6765bb587f 28 //Adafruit_ADS1115 piezo_electric_adc(&i2c_sensorplate_adc, 0x4B); // i2c pins, i2c address.
Ishy 0:ad6765bb587f 29 //
Ishy 0:ad6765bb587f 30 //short piezo_resistive_array[8] = {0,0,0,0,0,0,0,0}; // 8 PR sensors 1 time per cycle.
Ishy 0:ad6765bb587f 31 //short piezo_electric_array[5] = {0,0,0,0,0}; // 1 PE sensor 5 times per cycle.
Ishy 0:ad6765bb587f 32 //int angle = 0; // Accelerometer Z-axis.
Ishy 0:ad6765bb587f 33 //float accelerometer_sensorplate[3] = {0.0, 0.0, 0.0}; // Raw accelerometer data.
Ishy 0:ad6765bb587f 34 //float gyroscope_sensorplate[3]; // Raw gyroscope data.
Ishy 0:ad6765bb587f 35 //float accelerometer_reference_belt[3]; // Raw accelerometer data from belt.
Ishy 0:ad6765bb587f 36 //float gyroscope_reference_belt[3];
Ishy 0:ad6765bb587f 37 //
Ishy 0:ad6765bb587f 38 //int connection_test_sensorplate;
Ishy 0:ad6765bb587f 39
Ishy 0:ad6765bb587f 40 InterruptIn button_lock(PC_0); // Input on intterupt base decleration.
Ishy 0:ad6765bb587f 41 InterruptIn button_reposition(PC_1);
Ishy 0:ad6765bb587f 42 InterruptIn button_mute(PC_2);
Ishy 0:ad6765bb587f 43 InterruptIn button_new_patient(PC_3);
Ishy 0:ad6765bb587f 44
Ishy 0:ad6765bb587f 45 DigitalOut LED_on_dev_board1(LED1); // Decleration of digital outputs.
Ishy 0:ad6765bb587f 46 DigitalOut LED_on_dev_board2(LED2);
Ishy 0:ad6765bb587f 47 DigitalOut LED_on_dev_board3(LED3);
Ishy 0:ad6765bb587f 48 DigitalOut LED_on_dev_board4(LED4);
Ishy 0:ad6765bb587f 49 DigitalOut speaker1(PC_8); // relatie aangeven!
Ishy 0:ad6765bb587f 50 DigitalOut speaker2(PC_6);
Ishy 0:ad6765bb587f 51 //neopixel::PixelArray indicator_LEDs(PA_7);
Ishy 0:ad6765bb587f 52
Ishy 0:ad6765bb587f 53 PwmOut lock_feedback_LED(PB_13); // Declaration of pulse with modulation outputs.
Ishy 0:ad6765bb587f 54 PwmOut mute_feedback_LED(PB_1);
Ishy 0:ad6765bb587f 55 PwmOut new_patient_feedback_LED(PB_14);
Ishy 0:ad6765bb587f 56 PwmOut reposition_feedback_LED(PB_15);
Ishy 0:ad6765bb587f 57
Ishy 0:ad6765bb587f 58 //Timer button_lock_hold_timer; // Timer for time lock button should be pressed.
Ishy 0:ad6765bb587f 59 //Timer button_calibration_hold_timer; // Timer for calibration function (new patient holding 5 seconds).
Ishy 0:ad6765bb587f 60 //Timer delay_between_button_pressed; // Timer for time between two buttons (to prevent pressing buttons simultaneously).
Ishy 0:ad6765bb587f 61 //Timer speaker_timer; // Timer for speaker activation.
Ishy 0:ad6765bb587f 62 Timer piezo_electric_sample_timer; // Timer for equally time-spaced samples.
Ishy 0:ad6765bb587f 63
Ishy 0:ad6765bb587f 64 /*
Ishy 0:ad6765bb587f 65 The code underneath this commentbox has some fixed parameters for serial/ADC reading:
Ishy 0:ad6765bb587f 66 -> The address for the angle_device_reference_belt is set to 0x68 in the file MPU6050_belt (rule number: 19);
Ishy 0:ad6765bb587f 67 -> The adress for the angle_device_sensorplate is set to 0x69 in the file MPU6050.h (rule number: 19);
Ishy 0:ad6765bb587f 68 -> This is because of using the same I2C line;
Ishy 0:ad6765bb587f 69 -> For detailed information/questions about this item, please read the technical manual or contact: Ricardo Molenaar | ricardo.molenaar@gmail.com
Ishy 0:ad6765bb587f 70 */
Ishy 0:ad6765bb587f 71 I2C i2c_sensorplate_adc(PB_9, PB_8); // I2C for sensorplate.
Ishy 0:ad6765bb587f 72 //I2C i2c_power_adc(PB_11, PB_10); // I2C for accupack.
Ishy 0:ad6765bb587f 73 MPU6050 angle_device_sensorplate(PB_9, PB_8); // i2c pins // i2c address hardcoded 0x68.
Ishy 0:ad6765bb587f 74 //MPU6050_belt angle_device_reference_belt(PB_9, PB_8); // i2c pins // i2c address hardcoded 0x69.
Ishy 0:ad6765bb587f 75 Adafruit_ADS1115 piezo_resistive_adc1(&i2c_sensorplate_adc, 0x48); // i2c pins, i2c address.
Ishy 0:ad6765bb587f 76 Adafruit_ADS1115 piezo_resistive_adc2(&i2c_sensorplate_adc, 0x49); // i2c pins, i2c address.
Ishy 0:ad6765bb587f 77 Adafruit_ADS1115 piezo_electric_adc(&i2c_sensorplate_adc, 0x4B); // i2c pins, i2c address.
Ishy 0:ad6765bb587f 78 //Adafruit_ADS1115 adsAccu(&i2c_power_adc, 0x48); // i2c pins, i2c address.
Ishy 0:ad6765bb587f 79 Serial usb_serial(SERIAL_TX, SERIAL_RX); // tx, rx
Ishy 0:ad6765bb587f 80 Serial pi_serial(PC_10, PC_11); // tx, rx
Ishy 0:ad6765bb587f 81 Ticker total_readout_cycle; // Polling cycle.
Ishy 0:ad6765bb587f 82 // End of commentbox related to the serial configuration/ADC reading components.
Ishy 0:ad6765bb587f 83
Ishy 0:ad6765bb587f 84 int boot_delay_ms = 500;
Ishy 0:ad6765bb587f 85 int total_readout_cycle_time_us = 100000; // Cycle time in us.
Ishy 0:ad6765bb587f 86 int i2c__frequency = 400000; // I2C Frequency.
Ishy 0:ad6765bb587f 87 int baud_rate = 115200; // Baud rate.
Ishy 0:ad6765bb587f 88 short piezo_resistive_array[8] = {0,0,0,0,0,0,0,0}; // 8 PR sensors 1 time per cycle.
Ishy 0:ad6765bb587f 89 short piezo_electric_array[5] = {0,0,0,0,0}; // 1 PE sensor 5 times per cycle.
Ishy 0:ad6765bb587f 90 int angle = 0; // Accelerometer Z-axis.
Ishy 0:ad6765bb587f 91 float accelerometer_sensorplate[3] = {0.0, 0.0, 0.0}; // Raw accelerometer data.
Ishy 0:ad6765bb587f 92 float gyroscope_sensorplate[3]; // Raw gyroscope data.
Ishy 0:ad6765bb587f 93 float accelerometer_reference_belt[3]; // Raw accelerometer data from belt.
Ishy 0:ad6765bb587f 94 float gyroscope_reference_belt[3]; // Raw gyroscope data from belt.
Ishy 0:ad6765bb587f 95 char LED_colour = 'g'; // Variable to set LED colour (standard set to green, untill PI sends other character). Other possible colours: red ('r') & yellow ('y').
Ishy 0:ad6765bb587f 96 bool lock_state = false, lock_flag = 0, mute_state = 0, alarm = 0, calibration_flag = 0, intensity_select = 1; // Boolean variables for logging states.
Ishy 0:ad6765bb587f 97 bool mute_flag = 0, new_patient_flag = 0, reposition_flag = 0; // Flag variables.
Ishy 0:ad6765bb587f 98 bool speaker_state = 0, LED_red_state = 0, LED_yellow_state = 0, LED_green_state = 0, power_plug_state = 0;
Ishy 0:ad6765bb587f 99 bool speaker_logged = 0, LED_red_logged = 0, LED_yellow_logged = 0, LED_green_logged = 0, power_plug_logged = 0; // is toevoegen
Ishy 0:ad6765bb587f 100 int locktime_ms = 2000; // Waittime for lock user interface in ms.
Ishy 0:ad6765bb587f 101 int calibrationtime_ms = 5000; // Time to press new_patient button for calibration system.
Ishy 0:ad6765bb587f 102 int calibration_flash = 0; // Variable for flash LED's to indicate calibration.
Ishy 0:ad6765bb587f 103 int buttondelay_ms = 750; // Button delay in ms.
Ishy 0:ad6765bb587f 104 int delay_lock_interface = 3000*60; // Delay for non using interface locktime.
Ishy 0:ad6765bb587f 105 int speaker_active_ms = 750; // Time to iterate speaker on and off when alarm occurs.
Ishy 0:ad6765bb587f 106 int alarm_voltage = 2400; // Needed voltage for alarm expressed as a digital 15 bit value (= 20% of max battery voltage).
Ishy 0:ad6765bb587f 107 int LED_red_intensity = 0, LED_blue_intensity = 0, LED_green_intensity = 0; // Variables to set LED intensity.
Ishy 0:ad6765bb587f 108 short batteryvoltage_current = 0, batteryvoltage_last = 0, powervoltage_current, powervoltage_last; // Variables to manage batteryvoltage. Maybe change current to other?
Ishy 0:ad6765bb587f 109 const int digital_value_ADC_powervoltage_unplugged = 15000; // Digital value to set the indicating LEDs to wall blue (should be set off later). const in hoofdletters
Ishy 0:ad6765bb587f 110 int intensity_day = 40, intensity_night = 10; // Intensity settings for LED's to wall.
Ishy 0:ad6765bb587f 111 double intensity = 0.0, control_LED_intensity = 0.0; // Variable between 0 and 1 to set the intensity of the LED's above the buttons. Intensity change to smart name!
Ishy 0:ad6765bb587f 112
Ishy 0:ad6765bb587f 113 /*************************** TEST ********************************/
Ishy 0:ad6765bb587f 114 // Verify algoritm function: for belt activation, set test_belt 1 (connect pin p20 to 3.3V).
Ishy 0:ad6765bb587f 115 Timer test_timer;
Ishy 0:ad6765bb587f 116 DigitalIn test_pin(PA_11, PullDown);
Ishy 0:ad6765bb587f 117
Ishy 0:ad6765bb587f 118 // Variable to set if belt is used to test algorithm:
Ishy 0:ad6765bb587f 119 bool test_belt = 0;
Ishy 0:ad6765bb587f 120
Ishy 0:ad6765bb587f 121 // Set test mode on (log functions to pc serial: interrupts, LED intensity and serial messages):
Ishy 0:ad6765bb587f 122 bool test_mode = 1;
Ishy 0:ad6765bb587f 123
Ishy 0:ad6765bb587f 124 // Variable for connection test (should be changed):
Ishy 0:ad6765bb587f 125 int connection_test_sensorplate;
Ishy 0:ad6765bb587f 126
Ishy 0:ad6765bb587f 127
Ishy 0:ad6765bb587f 128 void read_adc() {
Ishy 0:ad6765bb587f 129 piezo_electric_sample_timer.reset(); // Clock gebruiken o.i.d.?
Ishy 0:ad6765bb587f 130 piezo_electric_sample_timer.start();
Ishy 0:ad6765bb587f 131 // connection_test_sensorplate = angle_device_sensorplate.testConnection();
Ishy 0:ad6765bb587f 132
Ishy 0:ad6765bb587f 133 if (test_mode == 1) {
Ishy 0:ad6765bb587f 134 usb_serial.printf("Connection test sensorplate = %d\n", connection_test_sensorplate);
Ishy 0:ad6765bb587f 135 }
Ishy 0:ad6765bb587f 136
Ishy 0:ad6765bb587f 137 if (connection_test_sensorplate == 1) {
Ishy 0:ad6765bb587f 138 piezo_electric_array[0] = piezo_electric_adc.readADC_SingleEnded(0); // First PE readout.
Ishy 0:ad6765bb587f 139
Ishy 0:ad6765bb587f 140 for (uint8_t k = 0; k < 4; ++k) {
Ishy 0:ad6765bb587f 141 piezo_resistive_array[k] = piezo_resistive_adc1.readADC_SingleEnded(k); // First 4 PR readout.
Ishy 0:ad6765bb587f 142 }
Ishy 0:ad6765bb587f 143
Ishy 0:ad6765bb587f 144 // while(piezo_electric_sample_timer.read_us()<(1*(total_readout_cycle_time_us/5))) {} // Wait untill 20% of cycle. Energy efficiency is not fine in this situation, correct if low energy is needed.
Ishy 0:ad6765bb587f 145
Ishy 0:ad6765bb587f 146 piezo_electric_array[1] = piezo_electric_adc.readADC_SingleEnded(0); // Second PE readout.
Ishy 0:ad6765bb587f 147
Ishy 0:ad6765bb587f 148 for (uint8_t k = 0; k < 4; ++k) {
Ishy 0:ad6765bb587f 149 piezo_resistive_array[k+4] = piezo_resistive_adc2.readADC_SingleEnded(k); // Last 4 PR readout.
Ishy 0:ad6765bb587f 150 }
Ishy 0:ad6765bb587f 151
Ishy 0:ad6765bb587f 152 // while(piezo_electric_sample_timer.read_us()<(2*(total_readout_cycle_time_us/5))) {} // Wait untill 40% of cycle. Energy efficiency is not fine in this situation, correct if low energy is needed.
Ishy 0:ad6765bb587f 153
Ishy 0:ad6765bb587f 154 piezo_electric_array[2] = piezo_electric_adc.readADC_SingleEnded(0); // Third PE readout.
Ishy 0:ad6765bb587f 155
Ishy 0:ad6765bb587f 156 // angle_device_sensorplate.getAccelero(accelerometer_sensorplate); // Get accelerometer data.
Ishy 0:ad6765bb587f 157 // angle = accelerometer_sensorplate[2]*100;
Ishy 0:ad6765bb587f 158 // if(angle == 0) {
Ishy 0:ad6765bb587f 159 // MPU6050 angle_device_sensorplate(PB_9, PB_8);
Ishy 0:ad6765bb587f 160 // angle_device_sensorplate.getAccelero(accelerometer_sensorplate);
Ishy 0:ad6765bb587f 161 // angle = accelerometer_sensorplate[2]*100;
Ishy 0:ad6765bb587f 162 // }
Ishy 0:ad6765bb587f 163 // angle_device_sensorplate.getGyro(gyroscope_sensorplate); // Get gyroscope data.
Ishy 0:ad6765bb587f 164 //
Ishy 0:ad6765bb587f 165 //// if (test_belt == 1) {
Ishy 0:ad6765bb587f 166 //// angle_device_reference_belt.getGyro(gyroscope_reference_belt); // Get gyroscope data from Belt.
Ishy 0:ad6765bb587f 167 //// angle_device_reference_belt.getAccelero(accelerometer_reference_belt); // Get accelerometer data from belt.
Ishy 0:ad6765bb587f 168 //// }
Ishy 0:ad6765bb587f 169 //
Ishy 0:ad6765bb587f 170 // if (connection_test_sensorplate == 1) { // If statement for sending serial information sensorplate data when connection test is active.
Ishy 0:ad6765bb587f 171 // // Receiving order sensor information: 3 accelero sensors & 3 gyroscope sensors from sensorplate; 3 accelero sensors & 3 gyroscope sensors from belt. Is splitted in two parts - part 2/2.
Ishy 0:ad6765bb587f 172 // pi_serial.printf("?,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,\n", accelerometer_sensorplate[0], accelerometer_sensorplate[1], accelerometer_sensorplate[2], gyroscope_sensorplate[0], gyroscope_sensorplate[1], gyroscope_sensorplate[2], accelerometer_reference_belt[0], accelerometer_reference_belt[1], accelerometer_reference_belt[2], gyroscope_reference_belt[0], gyroscope_reference_belt[1], gyroscope_reference_belt[2]);
Ishy 0:ad6765bb587f 173 // } // binair print and convert in pi
Ishy 0:ad6765bb587f 174
Ishy 0:ad6765bb587f 175 // while(piezo_electric_sample_timer.read_us()<(3*(total_readout_cycle_time_us/5))) {} // Wait untill 60% of cycle. Energy efficiency is not fine in this situation, correct if low energy is needed.
Ishy 0:ad6765bb587f 176
Ishy 0:ad6765bb587f 177 piezo_electric_array[3] = piezo_electric_adc.readADC_SingleEnded(0); // Fourth PE readout.
Ishy 0:ad6765bb587f 178 }
Ishy 0:ad6765bb587f 179
Ishy 0:ad6765bb587f 180 // timer_functions();
Ishy 0:ad6765bb587f 181
Ishy 0:ad6765bb587f 182 batteryvoltage_current = batteryvoltage_last;
Ishy 0:ad6765bb587f 183 powervoltage_current = powervoltage_last;
Ishy 0:ad6765bb587f 184 // read_voltage(); // Read_voltage function to control alarm.
Ishy 0:ad6765bb587f 185
Ishy 0:ad6765bb587f 186 if (test_mode == 1) {
Ishy 0:ad6765bb587f 187 usb_serial.printf("Voltage = %d , %d\n", batteryvoltage_current, powervoltage_current);
Ishy 0:ad6765bb587f 188 }
Ishy 0:ad6765bb587f 189
Ishy 0:ad6765bb587f 190 // uint32_t val = 0;
Ishy 0:ad6765bb587f 191 // colour_select_indicating_LED_wall(LED_colour); // Function to select colour.
Ishy 0:ad6765bb587f 192 // indicator_LEDs.update(generate, NUMBER_LED_FRONT, val); // Function to set the LED's which shines to the wall (indicating change patient position).
Ishy 0:ad6765bb587f 193 // set_userinterface_LED(); // Set LED's of user interface (LED's above buttons).
Ishy 0:ad6765bb587f 194
Ishy 0:ad6765bb587f 195 // while(piezo_electric_sample_timer.read_us()<(4*(total_readout_cycle_time_us/5))) {} // Wait untill 80% of cycle. Energy efficiency is not fine in this situation, correct if low energy is needed.
Ishy 0:ad6765bb587f 196
Ishy 0:ad6765bb587f 197 // if (test_mode == 1){ // If statement for test purposal.
Ishy 0:ad6765bb587f 198 // usb_serial.printf("Angle device sensorplate = %d\n",angle_device_sensorplate.testConnection());
Ishy 0:ad6765bb587f 199 // }
Ishy 0:ad6765bb587f 200
Ishy 0:ad6765bb587f 201 if (connection_test_sensorplate == 1) {
Ishy 0:ad6765bb587f 202 piezo_electric_array[4] = piezo_electric_adc.readADC_SingleEnded(0); // Fifth PE readout.
Ishy 0:ad6765bb587f 203 }
Ishy 0:ad6765bb587f 204
Ishy 0:ad6765bb587f 205 // while(piezo_electric_sample_timer.read_us()<(4.25*(total_readout_cycle_time_us/5))) {} // Wait untill 85% of cycle. Energy efficiency is not fine in this situation, correct if low energy is needed.
Ishy 0:ad6765bb587f 206
Ishy 0:ad6765bb587f 207 if (test_mode == 1) {
Ishy 0:ad6765bb587f 208 usb_serial.printf("!,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,\n", piezo_resistive_array[0], piezo_resistive_array[1], piezo_resistive_array[2], piezo_resistive_array[3], piezo_resistive_array[4], piezo_resistive_array[5], piezo_resistive_array[6], piezo_resistive_array[7], piezo_electric_array[0], piezo_electric_array[1], piezo_electric_array[2], piezo_electric_array[3], piezo_electric_array[4]); // print all to serial port
Ishy 0:ad6765bb587f 209 }
Ishy 0:ad6765bb587f 210
Ishy 0:ad6765bb587f 211 if (test_mode == 1) { // If statements for test purposal (untill * mark).
Ishy 0:ad6765bb587f 212 usb_serial.printf("Loop time: %d ms\n",piezo_electric_sample_timer.read_ms());
Ishy 0:ad6765bb587f 213 }
Ishy 0:ad6765bb587f 214 // if (test_pin == 1) {
Ishy 0:ad6765bb587f 215 // test_mode = 1;
Ishy 0:ad6765bb587f 216 // usb_serial.printf("%d\n",test_mode);
Ishy 0:ad6765bb587f 217 // }
Ishy 0:ad6765bb587f 218 // if (test_pin == 0) {
Ishy 0:ad6765bb587f 219 // test_mode = 0;
Ishy 0:ad6765bb587f 220 // usb_serial.printf("%d\n",test_mode);
Ishy 0:ad6765bb587f 221 // }
Ishy 0:ad6765bb587f 222
Ishy 0:ad6765bb587f 223 if (test_mode == 1) {
Ishy 0:ad6765bb587f 224 usb_serial.printf("Loop time: %d ms\n",piezo_electric_sample_timer.read_ms());
Ishy 0:ad6765bb587f 225 }
Ishy 0:ad6765bb587f 226 // * End of if statements for test purposal.
Ishy 0:ad6765bb587f 227 }
Ishy 0:ad6765bb587f 228
Ishy 0:ad6765bb587f 229
Ishy 0:ad6765bb587f 230 int main() {
Ishy 0:ad6765bb587f 231 //i2c_sensorplate_adc.frequency(400000);
Ishy 0:ad6765bb587f 232 // connection_test_sensorplate = angle_device_sensorplate.testConnection();
Ishy 0:ad6765bb587f 233 // pc.printf("Connection test sensorplate = %d\n", connection_test_sensorplate);
Ishy 0:ad6765bb587f 234 // while(1) {
Ishy 0:ad6765bb587f 235 //
Ishy 0:ad6765bb587f 236 // piezo_electric_array[0] = piezo_electric_adc.readADC_SingleEnded(0); // First PE readout.
Ishy 0:ad6765bb587f 237 //
Ishy 0:ad6765bb587f 238 // for (uint8_t k = 0; k < 4; ++k) {
Ishy 0:ad6765bb587f 239 // piezo_resistive_array[k] = piezo_resistive_adc1.readADC_SingleEnded(k); // First 4 PR readout.
Ishy 0:ad6765bb587f 240 // }
Ishy 0:ad6765bb587f 241 //
Ishy 0:ad6765bb587f 242 // angle_device_sensorplate.getAccelero(accelerometer_sensorplate); // Get accelerometer data.
Ishy 0:ad6765bb587f 243 // angle = accelerometer_sensorplate[2]*100;
Ishy 0:ad6765bb587f 244 // if(angle == 0) {
Ishy 0:ad6765bb587f 245 // MPU6050 angle_device_sensorplate(PB_9, PB_8);
Ishy 0:ad6765bb587f 246 // angle_device_sensorplate.getAccelero(accelerometer_sensorplate);
Ishy 0:ad6765bb587f 247 // angle = accelerometer_sensorplate[2]*100;
Ishy 0:ad6765bb587f 248 // }
Ishy 0:ad6765bb587f 249 // angle_device_sensorplate.getGyro(gyroscope_sensorplate); // Get gyroscope data.
Ishy 0:ad6765bb587f 250 //
Ishy 0:ad6765bb587f 251 // pc.printf("?,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,\n", accelerometer_sensorplate[0], accelerometer_sensorplate[1], accelerometer_sensorplate[2], gyroscope_sensorplate[0], gyroscope_sensorplate[1], gyroscope_sensorplate[2], accelerometer_reference_belt[0], accelerometer_reference_belt[1], accelerometer_reference_belt[2], gyroscope_reference_belt[0], gyroscope_reference_belt[1], gyroscope_reference_belt[2]);
Ishy 0:ad6765bb587f 252 // pc.printf("!,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,\n", piezo_resistive_array[0], piezo_resistive_array[1], piezo_resistive_array[2], piezo_resistive_array[3], piezo_resistive_array[4], piezo_resistive_array[5], piezo_resistive_array[6], piezo_resistive_array[7], piezo_electric_array[0], piezo_electric_array[1], piezo_electric_array[2], piezo_electric_array[3], piezo_electric_array[4]); // print all to serial port
Ishy 0:ad6765bb587f 253 // wait(1);
Ishy 0:ad6765bb587f 254 // }
Ishy 0:ad6765bb587f 255
Ishy 0:ad6765bb587f 256 wait_ms(boot_delay_ms); // Wait to boot sensorplate first.
Ishy 0:ad6765bb587f 257 i2c_sensorplate_adc.frequency(i2c__frequency); // Set frequency for i2c connection to sensorplate (variable is declared in config part).
Ishy 0:ad6765bb587f 258 // i2c_power_adc.frequency(i2c__frequency); // Same as line 695, but now for ADC to read battery- en powervoltage.
Ishy 0:ad6765bb587f 259 usb_serial.baud(baud_rate); // Set serial USB connection baud rate (variable is declared in config part).
Ishy 0:ad6765bb587f 260 pi_serial.baud(baud_rate); // Same as line 697, but now for serial PI connection.
Ishy 0:ad6765bb587f 261 piezo_resistive_adc1.setGain(GAIN_TWOTHIRDS); // Set ranges of ADC to +/-6.144V (end is marked with #):
Ishy 0:ad6765bb587f 262 piezo_resistive_adc2.setGain(GAIN_TWOTHIRDS);
Ishy 0:ad6765bb587f 263 piezo_electric_adc.setGain(GAIN_TWOTHIRDS);
Ishy 0:ad6765bb587f 264 // adsAccu.setGain(GAIN_TWOTHIRDS); // #) End of configuration ADC ranges.
Ishy 0:ad6765bb587f 265 pi_serial.format(8, SerialBase::None, 1); // Set serial communication line with PI.
Ishy 0:ad6765bb587f 266
Ishy 0:ad6765bb587f 267 //button_lock.fall(&trigger_lock); // Interrupt for rising edge lock button.
Ishy 0:ad6765bb587f 268 // button_lock.rise(&end_timer_lock_button);
Ishy 0:ad6765bb587f 269 // button_reposition.fall(&reposition_button_triggered);
Ishy 0:ad6765bb587f 270 // button_reposition.rise(&rise_reposition);
Ishy 0:ad6765bb587f 271 // button_mute.fall(&mute_button_triggered);
Ishy 0:ad6765bb587f 272 // button_new_patient.fall(&trigger_new_patient); // New patient/calibration button rising event.
Ishy 0:ad6765bb587f 273 // button_new_patient.rise(&activate_new_patient_function); // Falling edge for calibration algorithm option.
Ishy 0:ad6765bb587f 274 // delay_between_button_pressed.reset(); // Delaytimer reset en start.
Ishy 0:ad6765bb587f 275 // delay_between_button_pressed.start();
Ishy 0:ad6765bb587f 276
Ishy 0:ad6765bb587f 277 // set_intensity_LEDs(); // Initialize intensity for user interface LED's and LED's shines to wall.
Ishy 0:ad6765bb587f 278 // lock_feedback_LED = control_LED_intensity; // Lock LED initialization.
Ishy 0:ad6765bb587f 279
Ishy 0:ad6765bb587f 280 // connection_test_sensorplate = angle_device_sensorplate.testConnection();
Ishy 0:ad6765bb587f 281 // total_readout_cycle.attach_us(&read_adc, total_readout_cycle_time_us); // Call function to start reading sensorplate and other functionalities.
Ishy 0:ad6765bb587f 282
Ishy 0:ad6765bb587f 283 while (1) {
Ishy 0:ad6765bb587f 284 // wait_us(total_readout_cycle_time_us+1); // Wait indefinitely.
Ishy 0:ad6765bb587f 285 // usb_serial.printf("%d\n", connection_test_sensorplate);
Ishy 0:ad6765bb587f 286 piezo_electric_sample_timer.reset(); // Clock gebruiken o.i.d.?
Ishy 0:ad6765bb587f 287 piezo_electric_sample_timer.start();
Ishy 0:ad6765bb587f 288 connection_test_sensorplate = angle_device_sensorplate.testConnection();
Ishy 0:ad6765bb587f 289
Ishy 0:ad6765bb587f 290 if (test_mode == 1) {
Ishy 0:ad6765bb587f 291 usb_serial.printf("Connection test sensorplate = %d\n", connection_test_sensorplate);
Ishy 0:ad6765bb587f 292 }
Ishy 0:ad6765bb587f 293
Ishy 0:ad6765bb587f 294 if (connection_test_sensorplate == 1) {
Ishy 0:ad6765bb587f 295 piezo_electric_array[0] = piezo_electric_adc.readADC_SingleEnded(0); // First PE readout.
Ishy 0:ad6765bb587f 296
Ishy 0:ad6765bb587f 297 for (uint8_t k = 0; k < 4; ++k) {
Ishy 0:ad6765bb587f 298 piezo_resistive_array[k] = piezo_resistive_adc1.readADC_SingleEnded(k); // First 4 PR readout.
Ishy 0:ad6765bb587f 299 }
Ishy 0:ad6765bb587f 300
Ishy 0:ad6765bb587f 301 // while(piezo_electric_sample_timer.read_us()<(1*(total_readout_cycle_time_us/5))) {} // Wait untill 20% of cycle. Energy efficiency is not fine in this situation, correct if low energy is needed.
Ishy 0:ad6765bb587f 302
Ishy 0:ad6765bb587f 303 piezo_electric_array[1] = piezo_electric_adc.readADC_SingleEnded(0); // Second PE readout.
Ishy 0:ad6765bb587f 304
Ishy 0:ad6765bb587f 305 for (uint8_t k = 0; k < 4; ++k) {
Ishy 0:ad6765bb587f 306 piezo_resistive_array[k+4] = piezo_resistive_adc2.readADC_SingleEnded(k); // Last 4 PR readout.
Ishy 0:ad6765bb587f 307 }
Ishy 0:ad6765bb587f 308
Ishy 0:ad6765bb587f 309 // while(piezo_electric_sample_timer.read_us()<(2*(total_readout_cycle_time_us/5))) {} // Wait untill 40% of cycle. Energy efficiency is not fine in this situation, correct if low energy is needed.
Ishy 0:ad6765bb587f 310
Ishy 0:ad6765bb587f 311 piezo_electric_array[2] = piezo_electric_adc.readADC_SingleEnded(0); // Third PE readout.
Ishy 0:ad6765bb587f 312
Ishy 0:ad6765bb587f 313 // angle_device_sensorplate.getAccelero(accelerometer_sensorplate); // Get accelerometer data.
Ishy 0:ad6765bb587f 314 // angle = accelerometer_sensorplate[2]*100;
Ishy 0:ad6765bb587f 315 // if(angle == 0) {
Ishy 0:ad6765bb587f 316 // MPU6050 angle_device_sensorplate(PB_9, PB_8);
Ishy 0:ad6765bb587f 317 // angle_device_sensorplate.getAccelero(accelerometer_sensorplate);
Ishy 0:ad6765bb587f 318 // angle = accelerometer_sensorplate[2]*100;
Ishy 0:ad6765bb587f 319 // }
Ishy 0:ad6765bb587f 320 // angle_device_sensorplate.getGyro(gyroscope_sensorplate); // Get gyroscope data.
Ishy 0:ad6765bb587f 321 //
Ishy 0:ad6765bb587f 322 //// if (test_belt == 1) {
Ishy 0:ad6765bb587f 323 //// angle_device_reference_belt.getGyro(gyroscope_reference_belt); // Get gyroscope data from Belt.
Ishy 0:ad6765bb587f 324 //// angle_device_reference_belt.getAccelero(accelerometer_reference_belt); // Get accelerometer data from belt.
Ishy 0:ad6765bb587f 325 //// }
Ishy 0:ad6765bb587f 326 //
Ishy 0:ad6765bb587f 327 // if (connection_test_sensorplate == 1) { // If statement for sending serial information sensorplate data when connection test is active.
Ishy 0:ad6765bb587f 328 // // Receiving order sensor information: 3 accelero sensors & 3 gyroscope sensors from sensorplate; 3 accelero sensors & 3 gyroscope sensors from belt. Is splitted in two parts - part 2/2.
Ishy 0:ad6765bb587f 329 // pi_serial.printf("?,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,\n", accelerometer_sensorplate[0], accelerometer_sensorplate[1], accelerometer_sensorplate[2], gyroscope_sensorplate[0], gyroscope_sensorplate[1], gyroscope_sensorplate[2], accelerometer_reference_belt[0], accelerometer_reference_belt[1], accelerometer_reference_belt[2], gyroscope_reference_belt[0], gyroscope_reference_belt[1], gyroscope_reference_belt[2]);
Ishy 0:ad6765bb587f 330 // } // binair print and convert in pi
Ishy 0:ad6765bb587f 331
Ishy 0:ad6765bb587f 332 // while(piezo_electric_sample_timer.read_us()<(3*(total_readout_cycle_time_us/5))) {} // Wait untill 60% of cycle. Energy efficiency is not fine in this situation, correct if low energy is needed.
Ishy 0:ad6765bb587f 333
Ishy 0:ad6765bb587f 334 piezo_electric_array[3] = piezo_electric_adc.readADC_SingleEnded(0); // Fourth PE readout.
Ishy 0:ad6765bb587f 335 }
Ishy 0:ad6765bb587f 336
Ishy 0:ad6765bb587f 337 // timer_functions();
Ishy 0:ad6765bb587f 338
Ishy 0:ad6765bb587f 339 batteryvoltage_current = batteryvoltage_last;
Ishy 0:ad6765bb587f 340 powervoltage_current = powervoltage_last;
Ishy 0:ad6765bb587f 341 // read_voltage(); // Read_voltage function to control alarm.
Ishy 0:ad6765bb587f 342
Ishy 0:ad6765bb587f 343 if (test_mode == 1) {
Ishy 0:ad6765bb587f 344 usb_serial.printf("Voltage = %d , %d\n", batteryvoltage_current, powervoltage_current);
Ishy 0:ad6765bb587f 345 }
Ishy 0:ad6765bb587f 346
Ishy 0:ad6765bb587f 347 // uint32_t val = 0;
Ishy 0:ad6765bb587f 348 // colour_select_indicating_LED_wall(LED_colour); // Function to select colour.
Ishy 0:ad6765bb587f 349 // indicator_LEDs.update(generate, NUMBER_LED_FRONT, val); // Function to set the LED's which shines to the wall (indicating change patient position).
Ishy 0:ad6765bb587f 350 // set_userinterface_LED(); // Set LED's of user interface (LED's above buttons).
Ishy 0:ad6765bb587f 351
Ishy 0:ad6765bb587f 352 // while(piezo_electric_sample_timer.read_us()<(4*(total_readout_cycle_time_us/5))) {} // Wait untill 80% of cycle. Energy efficiency is not fine in this situation, correct if low energy is needed.
Ishy 0:ad6765bb587f 353
Ishy 0:ad6765bb587f 354 // if (test_mode == 1){ // If statement for test purposal.
Ishy 0:ad6765bb587f 355 // usb_serial.printf("Angle device sensorplate = %d\n",angle_device_sensorplate.testConnection());
Ishy 0:ad6765bb587f 356 // }
Ishy 0:ad6765bb587f 357
Ishy 0:ad6765bb587f 358 if (connection_test_sensorplate == 1) {
Ishy 0:ad6765bb587f 359 piezo_electric_array[4] = piezo_electric_adc.readADC_SingleEnded(0); // Fifth PE readout.
Ishy 0:ad6765bb587f 360 }
Ishy 0:ad6765bb587f 361
Ishy 0:ad6765bb587f 362 // while(piezo_electric_sample_timer.read_us()<(4.25*(total_readout_cycle_time_us/5))) {} // Wait untill 85% of cycle. Energy efficiency is not fine in this situation, correct if low energy is needed.
Ishy 0:ad6765bb587f 363
Ishy 0:ad6765bb587f 364 if (test_mode == 1) {
Ishy 0:ad6765bb587f 365 usb_serial.printf("!,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,\n", piezo_resistive_array[0], piezo_resistive_array[1], piezo_resistive_array[2], piezo_resistive_array[3], piezo_resistive_array[4], piezo_resistive_array[5], piezo_resistive_array[6], piezo_resistive_array[7], piezo_electric_array[0], piezo_electric_array[1], piezo_electric_array[2], piezo_electric_array[3], piezo_electric_array[4]); // print all to serial port
Ishy 0:ad6765bb587f 366 }
Ishy 0:ad6765bb587f 367
Ishy 0:ad6765bb587f 368 if (test_mode == 1) { // If statements for test purposal (untill * mark).
Ishy 0:ad6765bb587f 369 usb_serial.printf("Loop time: %d ms\n",piezo_electric_sample_timer.read_ms());
Ishy 0:ad6765bb587f 370 }
Ishy 0:ad6765bb587f 371 // if (test_pin == 1) {
Ishy 0:ad6765bb587f 372 // test_mode = 1;
Ishy 0:ad6765bb587f 373 // usb_serial.printf("%d\n",test_mode);
Ishy 0:ad6765bb587f 374 // }
Ishy 0:ad6765bb587f 375 // if (test_pin == 0) {
Ishy 0:ad6765bb587f 376 // test_mode = 0;
Ishy 0:ad6765bb587f 377 // usb_serial.printf("%d\n",test_mode);
Ishy 0:ad6765bb587f 378 // }
Ishy 0:ad6765bb587f 379
Ishy 0:ad6765bb587f 380 if (test_mode == 1) {
Ishy 0:ad6765bb587f 381 usb_serial.printf("Loop time: %d ms\n",piezo_electric_sample_timer.read_ms());
Ishy 0:ad6765bb587f 382 }
Ishy 0:ad6765bb587f 383 }
Ishy 0:ad6765bb587f 384 }