test
Dependencies: ADS1015 MPU6050 MPU6050 PixelArray mbed
main.cpp@0:ad6765bb587f, 2017-11-30 (annotated)
- Committer:
- Ishy
- Date:
- Thu Nov 30 09:02:00 2017 +0000
- Revision:
- 0:ad6765bb587f
TestCode;
Who changed what in which revision?
User | Revision | Line number | New 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 | } |