Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: ADS1015 MPU6050 PixelArray PixelArray-Nucleo mbed WS2813
Fork of Nucleo-transfer by
Sensorplate/main.cpp@67:1b300aa30923, 2018-05-29 (annotated)
- Committer:
- deldering95
- Date:
- Tue May 29 09:38:01 2018 +0000
- Revision:
- 67:1b300aa30923
- Parent:
- 66:88c910cd4d9e
- Child:
- 68:1663f305ac33
Circle completed except patient detect;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| ricardo_95 | 36:d10f368d037b | 1 | /********************* CODE INFORMATON ****************************** |
| ricardo_95 | 34:1614f4f2b841 | 2 | Date of creation: 30-09-2017 |
| ricardo_95 | 34:1614f4f2b841 | 3 | Authors: Danny Eldering & Ricardo Molenaar |
| Ishy | 60:2f7e82c6f916 | 4 | co-authors: Menno Gravemaker & Ishvara Lalta |
| ricardo_95 | 34:1614f4f2b841 | 5 | (c) Copyright by Momo Medical BV. |
| ricardo_95 | 34:1614f4f2b841 | 6 | |
| ricardo_95 | 45:7ebe860702b4 | 7 | Current version name: 2.1.4 |
| ricardo_95 | 45:7ebe860702b4 | 8 | Date of modification: 8-1-2018 |
| ricardo_95 | 36:d10f368d037b | 9 | Purpose of this file: Code for LPC1768 microcontroller for controlling buttons, LED's and communicate to PI |
| ricardo_95 | 45:7ebe860702b4 | 10 | Update ‘what’s new in this version?’: Sensorplate connection test changed from software to hardware check. |
| deldering95 | 48:aca02ef5cd01 | 11 | ADC readout for accu deleted. |
| ricardo_95 | 36:d10f368d037b | 12 | Todo: -> Fix LED issue (yellow and red flashes at random moments); |
| deldering95 | 43:d09814c177a0 | 13 | -> Optimize functions / improve readability; |
| ricardo_95 | 36:d10f368d037b | 14 | -> Split functions in seperate files?; |
| ricardo_95 | 36:d10f368d037b | 15 | -> Fix when sensorplate is not connected; |
| ricardo_95 | 36:d10f368d037b | 16 | -> Rule 570: if statement change to turn off LED's when power is plugged out (also related to rule 106). |
| ricardo_95 | 36:d10f368d037b | 17 | -> For the speaker two outputs of the uC are used. Add MOSFET with external supply and control these by uC? |
| ricardo_95 | 36:d10f368d037b | 18 | Source file: http://mbed.com/ |
| ricardo_95 | 33:df21cb8dc5c7 | 19 | |
| ricardo_95 | 36:d10f368d037b | 20 | Information files: |
| deldering95 | 43:d09814c177a0 | 21 | (1) Flowchart: |
| ricardo_95 | 36:d10f368d037b | 22 | (2) Table serial communication: https://docs.google.com/spreadsheets/d/1kHlithHxtoMDGvbcdH8vwSw5W5ArxlwDPsyfra1dtQM/edit?usp=drive_web |
| deldering95 | 43:d09814c177a0 | 23 | (3) Technical manual CU-/software: |
| ricardo_95 | 12:7b3a5940f911 | 24 | */ |
| ricardo_95 | 12:7b3a5940f911 | 25 | |
| ricardo_95 | 21:13e4824bc364 | 26 | /************************ CONFIG ***********************************/ |
| ricardo_95 | 21:13e4824bc364 | 27 | |
| ricardo_95 | 36:d10f368d037b | 28 | #include "mbed.h" // Include files and define parameters. |
| DEldering | 0:c0e44c46c573 | 29 | #include "Adafruit_ADS1015.h" |
| DEldering | 0:c0e44c46c573 | 30 | #include "MPU6050.h" |
| ricardo_95 | 33:df21cb8dc5c7 | 31 | #include "MPU6050_belt.h" |
| deldering95 | 43:d09814c177a0 | 32 | #include "PixelArray.h" |
| deldering95 | 43:d09814c177a0 | 33 | #include "WS2812.h" |
| ricardo_95 | 37:d8f7b2b5719a | 34 | |
| deldering95 | 66:88c910cd4d9e | 35 | #define ALARMBUF 16 |
| deldering95 | 66:88c910cd4d9e | 36 | #define NUM_COLORS 8 |
| deldering95 | 66:88c910cd4d9e | 37 | #define YELLOW_TRANSITION 12 |
| deldering95 | 66:88c910cd4d9e | 38 | #define RED_TRANSITION 15 |
| deldering95 | 43:d09814c177a0 | 39 | #define NUM_LEDS_PER_COLOR 3 |
| deldering95 | 48:aca02ef5cd01 | 40 | #define NUMBER_LED_FRONT (3) |
| ricardo_95 | 7:dba5091c8b7d | 41 | #define ONE_COLOR |
| deldering95 | 66:88c910cd4d9e | 42 | #define TAIL_LENGTH 6 |
| deldering95 | 66:88c910cd4d9e | 43 | #define COMET_TAIL_END_INTENSITY 90 |
| deldering95 | 66:88c910cd4d9e | 44 | #define FADE_STEPS 20 |
| ricardo_95 | 7:dba5091c8b7d | 45 | |
| deldering95 | 66:88c910cd4d9e | 46 | InterruptIn button_lock(PC_0); // Input on intterupt base decleration. |
| ricardo_95 | 46:a0e6e088a50a | 47 | InterruptIn button_reposition(PC_3); |
| Ishy | 41:5380ada94ec6 | 48 | InterruptIn button_mute(PC_2); |
| deldering95 | 66:88c910cd4d9e | 49 | InterruptIn button_new_patient(PC_1); |
| ricardo_95 | 7:dba5091c8b7d | 50 | |
| deldering95 | 43:d09814c177a0 | 51 | DigitalIn intensity_code(PA_12); |
| deldering95 | 43:d09814c177a0 | 52 | DigitalIn colour_code_1(PA_11); |
| deldering95 | 43:d09814c177a0 | 53 | DigitalIn colour_code_0(PB_12); |
| deldering95 | 57:fac732476810 | 54 | InterruptIn testpin_sensorplate(PC_6); |
| deldering95 | 43:d09814c177a0 | 55 | |
| deldering95 | 43:d09814c177a0 | 56 | DigitalOut LED_on_dev_board1(LED1); // Decleration of digital outputs. |
| ricardo_95 | 36:d10f368d037b | 57 | DigitalOut LED_on_dev_board2(LED2); |
| ricardo_95 | 36:d10f368d037b | 58 | DigitalOut LED_on_dev_board3(LED3); |
| ricardo_95 | 36:d10f368d037b | 59 | DigitalOut LED_on_dev_board4(LED4); |
| deldering95 | 43:d09814c177a0 | 60 | DigitalOut speaker1(PC_12); // relatie aangeven! |
| deldering95 | 43:d09814c177a0 | 61 | //neopixel::PixelArray indicator_LEDs(PA_7); |
| deldering95 | 66:88c910cd4d9e | 62 | PixelArray px(ALARMBUF); |
| deldering95 | 66:88c910cd4d9e | 63 | //WS2812 ws(PA_7, ALARMBUF, 3, 9, 9, 6); |
| deldering95 | 66:88c910cd4d9e | 64 | WS2812 ws(PA_7, ALARMBUF, 3, 12, 8, 12); |
| deldering95 | 43:d09814c177a0 | 65 | |
| deldering95 | 51:69087c44e8ac | 66 | PwmOut lock_feedback_LED(PB_13); //(PB_1); // Declaration of pulse with modulation outputs. |
| deldering95 | 51:69087c44e8ac | 67 | PwmOut mute_feedback_LED(PB_14); //(PB_15); |
| deldering95 | 51:69087c44e8ac | 68 | PwmOut new_patient_feedback_LED(PB_15); //(PB_14); |
| deldering95 | 51:69087c44e8ac | 69 | PwmOut reposition_feedback_LED(PB_1); //(PB_13); |
| ricardo_95 | 36:d10f368d037b | 70 | |
| ricardo_95 | 37:d8f7b2b5719a | 71 | Timer button_lock_hold_timer; // Timer for time lock button should be pressed. |
| ricardo_95 | 36:d10f368d037b | 72 | Timer button_calibration_hold_timer; // Timer for calibration function (new patient holding 5 seconds). |
| deldering95 | 43:d09814c177a0 | 73 | Timer delay_between_button_pressed; // Timer for time between two buttons (to prevent pressing buttons simultaneously). |
| ricardo_95 | 36:d10f368d037b | 74 | Timer speaker_timer; // Timer for speaker activation. |
| ricardo_95 | 36:d10f368d037b | 75 | Timer piezo_electric_sample_timer; // Timer for equally time-spaced samples. |
| deldering95 | 66:88c910cd4d9e | 76 | Timer comet_timer; |
| deldering95 | 66:88c910cd4d9e | 77 | Timer reposition_button_hold_timer; |
| deldering95 | 66:88c910cd4d9e | 78 | Timer new_patient_button_hold_timer; |
| deldering95 | 43:d09814c177a0 | 79 | /* |
| ricardo_95 | 36:d10f368d037b | 80 | The code underneath this commentbox has some fixed parameters for serial/ADC reading: |
| ricardo_95 | 36:d10f368d037b | 81 | -> The address for the angle_device_reference_belt is set to 0x68 in the file MPU6050_belt (rule number: 19); |
| ricardo_95 | 36:d10f368d037b | 82 | -> The adress for the angle_device_sensorplate is set to 0x69 in the file MPU6050.h (rule number: 19); |
| ricardo_95 | 36:d10f368d037b | 83 | -> This is because of using the same I2C line; |
| ricardo_95 | 36:d10f368d037b | 84 | -> For detailed information/questions about this item, please read the technical manual or contact: Ricardo Molenaar | ricardo.molenaar@gmail.com |
| ricardo_95 | 36:d10f368d037b | 85 | */ |
| Ishy | 41:5380ada94ec6 | 86 | I2C i2c_sensorplate_adc(PB_9, PB_8); // I2C for sensorplate. |
| ricardo_95 | 46:a0e6e088a50a | 87 | MPU6050_belt angle_device_sensorplate(PB_9, PB_8); // i2c pins // i2c address hardcoded 0x68. |
| Ishy | 41:5380ada94ec6 | 88 | MPU6050_belt angle_device_reference_belt(PB_9, PB_8); // i2c pins // i2c address hardcoded 0x69. |
| ricardo_95 | 36:d10f368d037b | 89 | Adafruit_ADS1115 piezo_resistive_adc1(&i2c_sensorplate_adc, 0x48); // i2c pins, i2c address. |
| ricardo_95 | 36:d10f368d037b | 90 | Adafruit_ADS1115 piezo_resistive_adc2(&i2c_sensorplate_adc, 0x49); // i2c pins, i2c address. |
| ricardo_95 | 36:d10f368d037b | 91 | Adafruit_ADS1115 piezo_electric_adc(&i2c_sensorplate_adc, 0x4B); // i2c pins, i2c address. |
| deldering95 | 66:88c910cd4d9e | 92 | RawSerial usb_serial(SERIAL_TX, SERIAL_RX); // tx, rx |
| deldering95 | 66:88c910cd4d9e | 93 | RawSerial pi_serial(PC_10, PC_11); // tx, rx |
| ricardo_95 | 36:d10f368d037b | 94 | Ticker total_readout_cycle; // Polling cycle. |
| deldering95 | 43:d09814c177a0 | 95 | // End of commentbox related to the serial configuration/ADC reading components. |
| ricardo_95 | 34:1614f4f2b841 | 96 | |
| ricardo_95 | 12:7b3a5940f911 | 97 | int boot_delay_ms = 500; |
| Ishy | 42:673ddef4cfa4 | 98 | int total_readout_cycle_time_us = 100000; // Cycle time in us. |
| deldering95 | 66:88c910cd4d9e | 99 | int total_comet_cycle_time_ms = 750/16; |
| ricardo_95 | 39:cff99a9b7237 | 100 | int i2c__frequency = 400000; // I2C Frequency. |
| ricardo_95 | 36:d10f368d037b | 101 | int baud_rate = 115200; // Baud rate. |
| ricardo_95 | 36:d10f368d037b | 102 | short piezo_resistive_array[8] = {0,0,0,0,0,0,0,0}; // 8 PR sensors 1 time per cycle. |
| deldering95 | 58:8cfa736d8553 | 103 | short piezo_electric_array[6] = {0,0,0,0,0,0}; // 1 PE sensor 5 times per cycle. |
| ricardo_95 | 36:d10f368d037b | 104 | int angle = 0; // Accelerometer Z-axis. |
| ricardo_95 | 37:d8f7b2b5719a | 105 | float accelerometer_sensorplate[3] = {0.0, 0.0, 0.0}; // Raw accelerometer data. |
| ricardo_95 | 36:d10f368d037b | 106 | float gyroscope_sensorplate[3]; // Raw gyroscope data. |
| ricardo_95 | 36:d10f368d037b | 107 | float accelerometer_reference_belt[3]; // Raw accelerometer data from belt. |
| ricardo_95 | 36:d10f368d037b | 108 | float gyroscope_reference_belt[3]; // Raw gyroscope data from belt. |
| deldering95 | 66:88c910cd4d9e | 109 | int colourbuf[NUM_COLORS] = {0xff0000,0x00ff00,0x0000ff,0xffa500,0x555555,0x800080,0x000000,0x8B4513}; // hex codes for the different colours |
| deldering95 | 44:dcbde3175a37 | 110 | char LED_colour = 'w'; // Variable to set LED colour (standard set to green, untill PI sends other character). Other possible colours: red ('r') & yellow ('y'). |
| ricardo_95 | 37:d8f7b2b5719a | 111 | bool lock_state = false, lock_flag = 0, mute_state = 0, alarm = 0, calibration_flag = 0, intensity_select = 1; // Boolean variables for logging states. |
| Ishy | 55:b74e7076d7a0 | 112 | bool mute_flag = 0, new_patient_flag = 0, reposition_flag = 0, new_patient_lock_flag = 0, reposition_lock_flag = 0, mute_lock_flag; // Flag variables. |
| ricardo_95 | 21:13e4824bc364 | 113 | bool speaker_state = 0, LED_red_state = 0, LED_yellow_state = 0, LED_green_state = 0, power_plug_state = 0; |
| Ishy | 55:b74e7076d7a0 | 114 | bool auto_lock_led_logged = 0, lock_is_logged = 0, speaker_logged = 0, LED_red_logged = 0, LED_yellow_logged = 0, LED_green_logged = 0, power_plug_logged = 0; // is toevoegen |
| ricardo_95 | 36:d10f368d037b | 115 | int locktime_ms = 2000; // Waittime for lock user interface in ms. |
| deldering95 | 48:aca02ef5cd01 | 116 | int calibrationtime_ms = 2000; // Time to press new_patient button for calibration system. |
| ricardo_95 | 37:d8f7b2b5719a | 117 | int calibration_flash = 0; // Variable for flash LED's to indicate calibration. |
| deldering95 | 48:aca02ef5cd01 | 118 | int lock_flash = 0; |
| Ishy | 55:b74e7076d7a0 | 119 | int buttondelay_ms = 250; // Button delay in ms. Default: 750 |
| ricardo_95 | 36:d10f368d037b | 120 | int delay_lock_interface = 3000*60; // Delay for non using interface locktime. |
| ricardo_95 | 36:d10f368d037b | 121 | int speaker_active_ms = 750; // Time to iterate speaker on and off when alarm occurs. |
| ricardo_95 | 38:764847892afc | 122 | int alarm_voltage = 2400; // Needed voltage for alarm expressed as a digital 15 bit value (= 20% of max battery voltage). |
| ricardo_95 | 37:d8f7b2b5719a | 123 | int LED_red_intensity = 0, LED_blue_intensity = 0, LED_green_intensity = 0; // Variables to set LED intensity. |
| deldering95 | 66:88c910cd4d9e | 124 | int LED_colour_wheel_percentage=0; |
| deldering95 | 66:88c910cd4d9e | 125 | int ring_colour_old,mixer=0; |
| deldering95 | 66:88c910cd4d9e | 126 | int colour_wheel_filler = 5; |
| deldering95 | 67:1b300aa30923 | 127 | bool patient_present=true; |
| deldering95 | 66:88c910cd4d9e | 128 | bool colour_wheel_drain_reposition = false; |
| deldering95 | 66:88c910cd4d9e | 129 | bool colour_wheel_drain_new_patient = false; |
| deldering95 | 66:88c910cd4d9e | 130 | bool circle_filling_reposition = false; |
| deldering95 | 66:88c910cd4d9e | 131 | bool circle_filling_new_patient = false; |
| deldering95 | 66:88c910cd4d9e | 132 | int circle_filled_reposition = 0; |
| deldering95 | 66:88c910cd4d9e | 133 | int circle_filled_new_patient = 0; |
| deldering95 | 66:88c910cd4d9e | 134 | int comet=0; |
| deldering95 | 66:88c910cd4d9e | 135 | int tail,tail_step; |
| ricardo_95 | 45:7ebe860702b4 | 136 | //short batteryvoltage_current = 0, batteryvoltage_last = 0, powervoltage_current, powervoltage_last; // Variables to manage batteryvoltage. Maybe change current to other? |
| ricardo_95 | 45:7ebe860702b4 | 137 | //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 |
| deldering95 | 66:88c910cd4d9e | 138 | int intensity_day = 80, intensity_night = 50; // Intensity settings for LED's to wall. |
| ricardo_95 | 38:764847892afc | 139 | 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! |
| deldering95 | 44:dcbde3175a37 | 140 | int colour_code = 0b00; |
| deldering95 | 44:dcbde3175a37 | 141 | bool pi_active = false; |
| ricardo_95 | 33:df21cb8dc5c7 | 142 | /*************************** TEST ********************************/ |
| ricardo_95 | 36:d10f368d037b | 143 | // Verify algoritm function: for belt activation, set test_belt 1 (connect pin p20 to 3.3V). |
| deldering95 | 43:d09814c177a0 | 144 | Timer test_timer; |
| Ishy | 41:5380ada94ec6 | 145 | DigitalIn test_pin(PA_11, PullDown); |
| ricardo_95 | 33:df21cb8dc5c7 | 146 | |
| deldering95 | 67:1b300aa30923 | 147 | float percentage_tester=0; |
| deldering95 | 67:1b300aa30923 | 148 | |
| deldering95 | 43:d09814c177a0 | 149 | // Variable to set if belt is used to test algorithm: |
| deldering95 | 43:d09814c177a0 | 150 | bool test_belt = 0; |
| ricardo_95 | 33:df21cb8dc5c7 | 151 | |
| deldering95 | 43:d09814c177a0 | 152 | // Set test mode on (log functions to pc serial: interrupts, LED intensity and serial messages): |
| Ishy | 55:b74e7076d7a0 | 153 | bool test_mode = 1; |
| ricardo_95 | 34:1614f4f2b841 | 154 | |
| ricardo_95 | 36:d10f368d037b | 155 | // Variable for connection test (should be changed): |
| ricardo_95 | 46:a0e6e088a50a | 156 | bool connection_test_sensorplate; |
| ricardo_95 | 33:df21cb8dc5c7 | 157 | |
| ricardo_95 | 21:13e4824bc364 | 158 | /*************************** CODE ********************************/ |
| ricardo_95 | 7:dba5091c8b7d | 159 | |
| ricardo_95 | 36:d10f368d037b | 160 | void set_intensity_LEDs() // Function to set the intensity for the LED's. |
| ricardo_95 | 7:dba5091c8b7d | 161 | { |
| ricardo_95 | 11:73c6def38fbd | 162 | if (intensity_select == 1) { |
| ricardo_95 | 12:7b3a5940f911 | 163 | intensity = intensity_day; |
| ricardo_95 | 12:7b3a5940f911 | 164 | } else { |
| ricardo_95 | 12:7b3a5940f911 | 165 | intensity = intensity_night; |
| ricardo_95 | 7:dba5091c8b7d | 166 | } |
| ricardo_95 | 21:13e4824bc364 | 167 | control_LED_intensity = (intensity/100); |
| ricardo_95 | 34:1614f4f2b841 | 168 | |
| ricardo_95 | 37:d8f7b2b5719a | 169 | if (test_mode == 1) { // If statement for test purposal LED_intensity values. if def gebruiken voor testmode |
| Ishy | 55:b74e7076d7a0 | 170 | // usb_serial.printf("Intensity LED's shines to wall = %f\n", intensity); |
| Ishy | 55:b74e7076d7a0 | 171 | // usb_serial.printf("Intensity LED's above buttons = %f\n", control_LED_intensity); |
| ricardo_95 | 33:df21cb8dc5c7 | 172 | } |
| ricardo_95 | 7:dba5091c8b7d | 173 | } |
| ricardo_95 | 7:dba5091c8b7d | 174 | |
| ricardo_95 | 36:d10f368d037b | 175 | void serial_read() // Function for serial read for select LED intensity and colour. |
| ricardo_95 | 12:7b3a5940f911 | 176 | { |
| deldering95 | 66:88c910cd4d9e | 177 | LED_colour_wheel_percentage = pi_serial.getc(); |
| ricardo_95 | 11:73c6def38fbd | 178 | } |
| ricardo_95 | 11:73c6def38fbd | 179 | |
| deldering95 | 58:8cfa736d8553 | 180 | void serial_log() // Function for serial logging. See link to table with code declarations above in code. |
| deldering95 | 58:8cfa736d8553 | 181 | { |
| Ishy | 55:b74e7076d7a0 | 182 | |
| Ishy | 55:b74e7076d7a0 | 183 | if (reposition_flag == 1) { // If statement to control logging for reposition button. |
| ricardo_95 | 36:d10f368d037b | 184 | pi_serial.printf(">01\n"); |
| ricardo_95 | 34:1614f4f2b841 | 185 | |
| deldering95 | 43:d09814c177a0 | 186 | if (test_mode == 1) { // If statement for test purposal. |
| ricardo_95 | 36:d10f368d037b | 187 | usb_serial.printf(">01\n"); |
| ricardo_95 | 33:df21cb8dc5c7 | 188 | } |
| ricardo_95 | 34:1614f4f2b841 | 189 | |
| Ishy | 55:b74e7076d7a0 | 190 | reposition_flag = 0; |
| Ishy | 55:b74e7076d7a0 | 191 | } |
| deldering95 | 58:8cfa736d8553 | 192 | |
| Ishy | 55:b74e7076d7a0 | 193 | if (reposition_lock_flag == 1) { // If statement to control logging for reposition button. |
| Ishy | 55:b74e7076d7a0 | 194 | pi_serial.printf(">10\n"); |
| Ishy | 55:b74e7076d7a0 | 195 | |
| Ishy | 55:b74e7076d7a0 | 196 | if (test_mode == 1) { // If statement for test purposal. |
| Ishy | 55:b74e7076d7a0 | 197 | usb_serial.printf(">10\n"); |
| Ishy | 55:b74e7076d7a0 | 198 | } |
| Ishy | 55:b74e7076d7a0 | 199 | |
| Ishy | 55:b74e7076d7a0 | 200 | reposition_lock_flag = 0; |
| ricardo_95 | 19:3b5999fa7b7e | 201 | } |
| ricardo_95 | 12:7b3a5940f911 | 202 | |
| ricardo_95 | 36:d10f368d037b | 203 | if (new_patient_flag == 1) { // If statement to control logging for new patient button. |
| Ishy | 55:b74e7076d7a0 | 204 | pi_serial.printf(">02\n"); |
| Ishy | 55:b74e7076d7a0 | 205 | |
| Ishy | 55:b74e7076d7a0 | 206 | if (test_mode == 1) { // If statement for test purposal. |
| Ishy | 55:b74e7076d7a0 | 207 | usb_serial.printf(">02\n"); |
| Ishy | 55:b74e7076d7a0 | 208 | } |
| Ishy | 55:b74e7076d7a0 | 209 | |
| Ishy | 55:b74e7076d7a0 | 210 | new_patient_flag = 0; |
| Ishy | 55:b74e7076d7a0 | 211 | } |
| deldering95 | 58:8cfa736d8553 | 212 | |
| Ishy | 55:b74e7076d7a0 | 213 | if (new_patient_lock_flag == 1) { // If statement to control logging for new patient button. |
| Ishy | 55:b74e7076d7a0 | 214 | pi_serial.printf(">20\n"); |
| Ishy | 55:b74e7076d7a0 | 215 | |
| Ishy | 55:b74e7076d7a0 | 216 | if (test_mode == 1) { // If statement for test purposal. |
| Ishy | 55:b74e7076d7a0 | 217 | usb_serial.printf(">20\n"); |
| Ishy | 55:b74e7076d7a0 | 218 | } |
| Ishy | 55:b74e7076d7a0 | 219 | |
| Ishy | 55:b74e7076d7a0 | 220 | new_patient_lock_flag = 0; |
| Ishy | 55:b74e7076d7a0 | 221 | } |
| Ishy | 55:b74e7076d7a0 | 222 | // The new calibration button trigger |
| Ishy | 55:b74e7076d7a0 | 223 | if (mute_flag == 1) { // If statement to control logging for new patient button. |
| ricardo_95 | 36:d10f368d037b | 224 | pi_serial.printf(">03\n"); |
| ricardo_95 | 34:1614f4f2b841 | 225 | |
| deldering95 | 43:d09814c177a0 | 226 | if (test_mode == 1) { // If statement for test purposal. |
| ricardo_95 | 36:d10f368d037b | 227 | usb_serial.printf(">03\n"); |
| ricardo_95 | 33:df21cb8dc5c7 | 228 | } |
| ricardo_95 | 34:1614f4f2b841 | 229 | |
| Ishy | 55:b74e7076d7a0 | 230 | mute_flag = 0; |
| ricardo_95 | 7:dba5091c8b7d | 231 | } |
| Ishy | 55:b74e7076d7a0 | 232 | // The new calibration button trigger |
| Ishy | 55:b74e7076d7a0 | 233 | if (mute_lock_flag == 1) { // If statement to control logging for new patient button. |
| Ishy | 55:b74e7076d7a0 | 234 | pi_serial.printf(">30\n"); |
| ricardo_95 | 34:1614f4f2b841 | 235 | |
| deldering95 | 43:d09814c177a0 | 236 | if (test_mode == 1) { // If statement for test purposal. |
| Ishy | 55:b74e7076d7a0 | 237 | usb_serial.printf(">30\n"); |
| ricardo_95 | 33:df21cb8dc5c7 | 238 | } |
| ricardo_95 | 34:1614f4f2b841 | 239 | |
| Ishy | 55:b74e7076d7a0 | 240 | mute_lock_flag = 0; |
| Ishy | 55:b74e7076d7a0 | 241 | } |
| deldering95 | 58:8cfa736d8553 | 242 | |
| Ishy | 55:b74e7076d7a0 | 243 | if (lock_flag == 1 && !lock_is_logged) { |
| Ishy | 55:b74e7076d7a0 | 244 | if (lock_state == 0) // If statement to control logging for lock button. |
| Ishy | 55:b74e7076d7a0 | 245 | pi_serial.printf(">04\n"); |
| Ishy | 55:b74e7076d7a0 | 246 | else if(lock_state == 1) |
| Ishy | 55:b74e7076d7a0 | 247 | pi_serial.printf(">40\n"); |
| Ishy | 55:b74e7076d7a0 | 248 | |
| Ishy | 55:b74e7076d7a0 | 249 | if (test_mode == 1) { |
| Ishy | 55:b74e7076d7a0 | 250 | if (lock_state == 0) // If statement to control logging for lock button. |
| Ishy | 55:b74e7076d7a0 | 251 | usb_serial.printf(">04\n"); |
| Ishy | 55:b74e7076d7a0 | 252 | else if(lock_state == 1) |
| Ishy | 55:b74e7076d7a0 | 253 | usb_serial.printf(">40\n"); // If statement for test purposal. |
| Ishy | 55:b74e7076d7a0 | 254 | } |
| Ishy | 55:b74e7076d7a0 | 255 | lock_is_logged = 1; |
| ricardo_95 | 7:dba5091c8b7d | 256 | } |
| ricardo_95 | 12:7b3a5940f911 | 257 | |
| ricardo_95 | 36:d10f368d037b | 258 | if (LED_red_logged != LED_red_state) { // If statement to control logging for LED_red. |
| ricardo_95 | 12:7b3a5940f911 | 259 | if (LED_red_state == 1) { |
| Ishy | 55:b74e7076d7a0 | 260 | pi_serial.printf("&01\n"); |
| ricardo_95 | 9:514a44bf510f | 261 | LED_red_logged = LED_red_state; |
| ricardo_95 | 34:1614f4f2b841 | 262 | if (test_mode == 1) { |
| Ishy | 55:b74e7076d7a0 | 263 | usb_serial.printf("&01\n"); |
| ricardo_95 | 34:1614f4f2b841 | 264 | } |
| ricardo_95 | 12:7b3a5940f911 | 265 | } |
| deldering95 | 43:d09814c177a0 | 266 | |
| ricardo_95 | 9:514a44bf510f | 267 | if (LED_red_state == 0) { |
| Ishy | 55:b74e7076d7a0 | 268 | pi_serial.printf("&10\n"); |
| ricardo_95 | 12:7b3a5940f911 | 269 | LED_red_logged = LED_red_state; |
| ricardo_95 | 34:1614f4f2b841 | 270 | if (test_mode == 1) { |
| Ishy | 55:b74e7076d7a0 | 271 | usb_serial.printf("&10\n"); |
| ricardo_95 | 34:1614f4f2b841 | 272 | } |
| ricardo_95 | 9:514a44bf510f | 273 | } |
| ricardo_95 | 8:bf0f7a6fb1fd | 274 | } |
| ricardo_95 | 12:7b3a5940f911 | 275 | |
| ricardo_95 | 36:d10f368d037b | 276 | if (LED_yellow_logged != LED_yellow_state) { // If statement to control logging for LED_yellow. |
| deldering95 | 43:d09814c177a0 | 277 | if (LED_yellow_state == 1) { |
| Ishy | 55:b74e7076d7a0 | 278 | pi_serial.printf("&02\n"); |
| ricardo_95 | 9:514a44bf510f | 279 | LED_yellow_logged = LED_yellow_state; |
| ricardo_95 | 34:1614f4f2b841 | 280 | if (test_mode == 1) { |
| Ishy | 55:b74e7076d7a0 | 281 | usb_serial.printf("&02\n"); |
| ricardo_95 | 34:1614f4f2b841 | 282 | } |
| ricardo_95 | 12:7b3a5940f911 | 283 | } |
| ricardo_95 | 9:514a44bf510f | 284 | if (LED_yellow_state == 0) { |
| Ishy | 55:b74e7076d7a0 | 285 | pi_serial.printf("&20\n"); |
| ricardo_95 | 12:7b3a5940f911 | 286 | LED_yellow_logged = LED_yellow_state; |
| ricardo_95 | 34:1614f4f2b841 | 287 | if (test_mode == 1) { |
| Ishy | 55:b74e7076d7a0 | 288 | usb_serial.printf("&20\n"); |
| ricardo_95 | 34:1614f4f2b841 | 289 | } |
| ricardo_95 | 9:514a44bf510f | 290 | } |
| ricardo_95 | 7:dba5091c8b7d | 291 | } |
| ricardo_95 | 12:7b3a5940f911 | 292 | |
| ricardo_95 | 36:d10f368d037b | 293 | if (LED_green_logged != LED_green_state) { // If statement to control logging for LED_green. |
| ricardo_95 | 12:7b3a5940f911 | 294 | if (LED_green_state == 1) { |
| Ishy | 55:b74e7076d7a0 | 295 | pi_serial.printf("&03\n"); |
| ricardo_95 | 9:514a44bf510f | 296 | LED_green_logged = LED_green_state; |
| deldering95 | 43:d09814c177a0 | 297 | |
| ricardo_95 | 34:1614f4f2b841 | 298 | if (test_mode == 1) { |
| Ishy | 55:b74e7076d7a0 | 299 | usb_serial.printf("&03\n"); |
| ricardo_95 | 34:1614f4f2b841 | 300 | } |
| ricardo_95 | 12:7b3a5940f911 | 301 | } |
| deldering95 | 43:d09814c177a0 | 302 | |
| ricardo_95 | 9:514a44bf510f | 303 | if (LED_green_state == 0) { |
| Ishy | 55:b74e7076d7a0 | 304 | pi_serial.printf("&30\n"); |
| ricardo_95 | 12:7b3a5940f911 | 305 | LED_green_logged = LED_green_state; |
| deldering95 | 43:d09814c177a0 | 306 | |
| ricardo_95 | 34:1614f4f2b841 | 307 | if (test_mode == 1) { |
| Ishy | 55:b74e7076d7a0 | 308 | usb_serial.printf("&30\n"); |
| ricardo_95 | 34:1614f4f2b841 | 309 | } |
| ricardo_95 | 9:514a44bf510f | 310 | } |
| ricardo_95 | 7:dba5091c8b7d | 311 | } |
| ricardo_95 | 12:7b3a5940f911 | 312 | |
| deldering95 | 43:d09814c177a0 | 313 | if (speaker_logged != speaker_state) { // If statement to control logging for speaker. |
| ricardo_95 | 12:7b3a5940f911 | 314 | if (speaker_state == 1) { |
| Ishy | 55:b74e7076d7a0 | 315 | pi_serial.printf("&04\n"); |
| ricardo_95 | 9:514a44bf510f | 316 | speaker_logged = speaker_state; |
| deldering95 | 43:d09814c177a0 | 317 | |
| ricardo_95 | 36:d10f368d037b | 318 | if (test_mode == 1) { // If statement for test purposal. |
| Ishy | 55:b74e7076d7a0 | 319 | usb_serial.printf("&04\n"); |
| ricardo_95 | 34:1614f4f2b841 | 320 | } |
| ricardo_95 | 12:7b3a5940f911 | 321 | } |
| deldering95 | 43:d09814c177a0 | 322 | |
| ricardo_95 | 9:514a44bf510f | 323 | if (speaker_state == 0) { |
| Ishy | 55:b74e7076d7a0 | 324 | pi_serial.printf("&40\n"); |
| ricardo_95 | 12:7b3a5940f911 | 325 | speaker_logged = speaker_state; |
| deldering95 | 43:d09814c177a0 | 326 | |
| ricardo_95 | 36:d10f368d037b | 327 | if (test_mode == 1) { // If statement for test purposal. |
| Ishy | 55:b74e7076d7a0 | 328 | usb_serial.printf("&40\n"); |
| ricardo_95 | 34:1614f4f2b841 | 329 | } |
| ricardo_95 | 9:514a44bf510f | 330 | } |
| ricardo_95 | 8:bf0f7a6fb1fd | 331 | } |
| ricardo_95 | 9:514a44bf510f | 332 | |
| Ishy | 55:b74e7076d7a0 | 333 | // if (power_plug_logged != power_plug_state) { // If statement to control the logging for the state of the power plug. |
| Ishy | 55:b74e7076d7a0 | 334 | // if (power_plug_state == 1) { |
| Ishy | 55:b74e7076d7a0 | 335 | // pi_serial.printf("#08\n"); |
| Ishy | 55:b74e7076d7a0 | 336 | // |
| Ishy | 55:b74e7076d7a0 | 337 | // if (test_mode == 1) { // If statement for test purposal. |
| Ishy | 55:b74e7076d7a0 | 338 | // usb_serial.printf("#08\n"); |
| Ishy | 55:b74e7076d7a0 | 339 | // } |
| Ishy | 55:b74e7076d7a0 | 340 | // power_plug_logged = power_plug_state; |
| Ishy | 55:b74e7076d7a0 | 341 | // } |
| Ishy | 55:b74e7076d7a0 | 342 | // |
| Ishy | 55:b74e7076d7a0 | 343 | // if (power_plug_state == 0) { |
| Ishy | 55:b74e7076d7a0 | 344 | // pi_serial.printf("#80\n"); |
| Ishy | 55:b74e7076d7a0 | 345 | // |
| Ishy | 55:b74e7076d7a0 | 346 | // if (test_mode == 1) { // If statement for test purposal. |
| Ishy | 55:b74e7076d7a0 | 347 | // usb_serial.printf("#80\n"); |
| Ishy | 55:b74e7076d7a0 | 348 | // } |
| Ishy | 55:b74e7076d7a0 | 349 | // power_plug_logged = power_plug_state; |
| Ishy | 55:b74e7076d7a0 | 350 | // } |
| Ishy | 55:b74e7076d7a0 | 351 | // } |
| deldering95 | 58:8cfa736d8553 | 352 | |
| deldering95 | 43:d09814c177a0 | 353 | if (connection_test_sensorplate == 1) { // If statement for sending serial information sensorplate data when connection test is active. |
| deldering95 | 43:d09814c177a0 | 354 | // Receiving order sensor information: 8 resistive sensors, 5 electric readings. Is splitted in two parts - part 1/2. |
| deldering95 | 58:8cfa736d8553 | 355 | pi_serial.printf("!,%d,%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], piezo_electric_array[5]); // print all to serial port |
| deldering95 | 43:d09814c177a0 | 356 | |
| ricardo_95 | 34:1614f4f2b841 | 357 | if (test_mode == 1) { |
| deldering95 | 58:8cfa736d8553 | 358 | usb_serial.printf("!,%d,%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],piezo_electric_array[5]); // print all to serial port |
| ricardo_95 | 34:1614f4f2b841 | 359 | } |
| deldering95 | 53:54c882995514 | 360 | } else { |
| deldering95 | 58:8cfa736d8553 | 361 | pi_serial.printf("!,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,\n",0,0,0,0,0,0,0,0,0,0,0,0,0,0); |
| Ishy | 56:97dea631c5f2 | 362 | if (test_mode == 1) { |
| deldering95 | 58:8cfa736d8553 | 363 | usb_serial.printf("!,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,\n",0,0,0,0,0,0,0,0,0,0,0,0,0,0); // print all to serial port |
| Ishy | 56:97dea631c5f2 | 364 | } |
| ricardo_95 | 28:b4bee068780d | 365 | } |
| ricardo_95 | 34:1614f4f2b841 | 366 | |
| DEldering | 0:c0e44c46c573 | 367 | } |
| DEldering | 0:c0e44c46c573 | 368 | |
| deldering95 | 66:88c910cd4d9e | 369 | int minimum(int a,int b) |
| deldering95 | 66:88c910cd4d9e | 370 | { |
| deldering95 | 66:88c910cd4d9e | 371 | if(a>b)return b; |
| deldering95 | 66:88c910cd4d9e | 372 | else return a; |
| deldering95 | 66:88c910cd4d9e | 373 | } |
| deldering95 | 66:88c910cd4d9e | 374 | |
| deldering95 | 66:88c910cd4d9e | 375 | int colour_fade(int colour_old,int colour_new,int colour_mix) |
| deldering95 | 66:88c910cd4d9e | 376 | { |
| deldering95 | 66:88c910cd4d9e | 377 | int old_r=(colour_old&0xff0000)>>16; |
| deldering95 | 66:88c910cd4d9e | 378 | int old_g=(colour_old&0x00ff00)>> 8; |
| deldering95 | 66:88c910cd4d9e | 379 | int old_b=(colour_old&0x0000ff)>> 0; |
| deldering95 | 66:88c910cd4d9e | 380 | int new_r=(colour_new&0xff0000)>>16; |
| deldering95 | 66:88c910cd4d9e | 381 | int new_g=(colour_new&0x00ff00)>> 8; |
| deldering95 | 66:88c910cd4d9e | 382 | int new_b=(colour_new&0x0000ff)>> 0; |
| deldering95 | 66:88c910cd4d9e | 383 | int mix = (100*colour_mix)/FADE_STEPS; |
| deldering95 | 66:88c910cd4d9e | 384 | int mix_r=((new_r-old_r)*mix/100)+old_r; |
| deldering95 | 66:88c910cd4d9e | 385 | int mix_g=((new_g-old_g)*mix/100)+old_g; |
| deldering95 | 66:88c910cd4d9e | 386 | int mix_b=((new_b-old_b)*mix/100)+old_b; |
| deldering95 | 66:88c910cd4d9e | 387 | return ((mix_r<<16)|(mix_g<<8)|(mix_b)); |
| deldering95 | 66:88c910cd4d9e | 388 | |
| deldering95 | 66:88c910cd4d9e | 389 | } |
| deldering95 | 66:88c910cd4d9e | 390 | |
| deldering95 | 66:88c910cd4d9e | 391 | |
| deldering95 | 66:88c910cd4d9e | 392 | |
| deldering95 | 66:88c910cd4d9e | 393 | void colour_wheel(int percentage_in) |
| deldering95 | 66:88c910cd4d9e | 394 | { |
| deldering95 | 66:88c910cd4d9e | 395 | px.SetAllI(int(intensity*2.55)); |
| deldering95 | 66:88c910cd4d9e | 396 | if(percentage_in>100)percentage_in=100; |
| deldering95 | 66:88c910cd4d9e | 397 | int ring_colour = colourbuf[2]; |
| deldering95 | 66:88c910cd4d9e | 398 | px.SetAll(colourbuf[6]); |
| deldering95 | 66:88c910cd4d9e | 399 | int leds_on =(percentage_in*16)/100; |
| deldering95 | 66:88c910cd4d9e | 400 | float led_partly = ((percentage_in*16)%100); |
| deldering95 | 66:88c910cd4d9e | 401 | if(leds_on==YELLOW_TRANSITION) { |
| deldering95 | 66:88c910cd4d9e | 402 | if(mixer>20)mixer=20; |
| deldering95 | 66:88c910cd4d9e | 403 | ring_colour = colour_fade(colourbuf[2],colourbuf[3],mixer); |
| deldering95 | 66:88c910cd4d9e | 404 | mixer++; |
| deldering95 | 66:88c910cd4d9e | 405 | } |
| deldering95 | 66:88c910cd4d9e | 406 | if(leds_on>YELLOW_TRANSITION&&leds_on<RED_TRANSITION&&ring_colour_old==colourbuf[3]) { |
| deldering95 | 66:88c910cd4d9e | 407 | ring_colour=colourbuf[3]; |
| deldering95 | 66:88c910cd4d9e | 408 | mixer=0; |
| deldering95 | 66:88c910cd4d9e | 409 | } |
| deldering95 | 66:88c910cd4d9e | 410 | if(leds_on==RED_TRANSITION) { |
| deldering95 | 66:88c910cd4d9e | 411 | if(mixer>20)mixer=20; |
| deldering95 | 66:88c910cd4d9e | 412 | usb_serial.printf("mixer:%d\n",mixer); |
| deldering95 | 66:88c910cd4d9e | 413 | ring_colour = colour_fade(colourbuf[3],colourbuf[0],mixer); |
| deldering95 | 66:88c910cd4d9e | 414 | mixer++; |
| deldering95 | 66:88c910cd4d9e | 415 | } |
| deldering95 | 66:88c910cd4d9e | 416 | if(leds_on>RED_TRANSITION&&ring_colour_old==colourbuf[0]) { |
| deldering95 | 66:88c910cd4d9e | 417 | ring_colour = colourbuf[0]; |
| deldering95 | 66:88c910cd4d9e | 418 | mixer=0; |
| deldering95 | 66:88c910cd4d9e | 419 | } |
| deldering95 | 66:88c910cd4d9e | 420 | usb_serial.printf("on:%d,part:%f\n",leds_on,led_partly); |
| deldering95 | 66:88c910cd4d9e | 421 | for(int j = 0; j<=(leds_on); j++)px.Set(((16-j)%16),ring_colour); |
| deldering95 | 66:88c910cd4d9e | 422 | px.SetAllI(int(intensity*2.55)); |
| deldering95 | 66:88c910cd4d9e | 423 | if((16-leds_on-1)>0) { |
| deldering95 | 66:88c910cd4d9e | 424 | px.Set(((16-leds_on-1)%16),ring_colour); |
| deldering95 | 66:88c910cd4d9e | 425 | px.SetI(((16-leds_on-1)%16),int(0.01*led_partly*intensity*2.55)); |
| deldering95 | 66:88c910cd4d9e | 426 | } |
| deldering95 | 66:88c910cd4d9e | 427 | usb_serial.printf("percentage in %d,%d\n",percentage_in,leds_on); |
| deldering95 | 66:88c910cd4d9e | 428 | |
| deldering95 | 67:1b300aa30923 | 429 | if(!patient_present){ |
| deldering95 | 67:1b300aa30923 | 430 | px.SetAll(colourbuf[4]); |
| deldering95 | 67:1b300aa30923 | 431 | px.SetAllI(int(2.55*intensity)); |
| deldering95 | 67:1b300aa30923 | 432 | } |
| deldering95 | 67:1b300aa30923 | 433 | |
| deldering95 | 67:1b300aa30923 | 434 | |
| deldering95 | 66:88c910cd4d9e | 435 | if(reposition_button_hold_timer.read_ms()) { |
| deldering95 | 66:88c910cd4d9e | 436 | usb_serial.printf("filling circle\n"); |
| deldering95 | 66:88c910cd4d9e | 437 | circle_filling_reposition = true; |
| deldering95 | 66:88c910cd4d9e | 438 | colour_wheel_filler = reposition_button_hold_timer.read_ms()/250; |
| deldering95 | 66:88c910cd4d9e | 439 | if(colour_wheel_filler>=8) { |
| deldering95 | 66:88c910cd4d9e | 440 | colour_wheel_filler=8; |
| deldering95 | 66:88c910cd4d9e | 441 | circle_filled_reposition = 15; |
| deldering95 | 66:88c910cd4d9e | 442 | circle_filling_reposition = false; |
| deldering95 | 66:88c910cd4d9e | 443 | colour_wheel_drain_reposition = false; |
| deldering95 | 66:88c910cd4d9e | 444 | reposition_flag = 1; |
| deldering95 | 66:88c910cd4d9e | 445 | } |
| deldering95 | 66:88c910cd4d9e | 446 | px.SetAll(colourbuf[6]); |
| deldering95 | 66:88c910cd4d9e | 447 | for(int k =0; k<=colour_wheel_filler; k++) { |
| deldering95 | 66:88c910cd4d9e | 448 | px.Set(k,colourbuf[5]); |
| deldering95 | 66:88c910cd4d9e | 449 | px.Set(16-k,colourbuf[5]); |
| deldering95 | 66:88c910cd4d9e | 450 | } |
| deldering95 | 66:88c910cd4d9e | 451 | px.SetAllI(int(intensity*2.55)); |
| deldering95 | 66:88c910cd4d9e | 452 | } |
| deldering95 | 66:88c910cd4d9e | 453 | |
| deldering95 | 66:88c910cd4d9e | 454 | if(new_patient_button_hold_timer.read_ms()) { |
| deldering95 | 66:88c910cd4d9e | 455 | usb_serial.printf("filling circle\n"); |
| deldering95 | 66:88c910cd4d9e | 456 | circle_filling_new_patient = true; |
| deldering95 | 66:88c910cd4d9e | 457 | colour_wheel_filler = new_patient_button_hold_timer.read_ms()/250; |
| deldering95 | 66:88c910cd4d9e | 458 | if(colour_wheel_filler>=8) { |
| deldering95 | 66:88c910cd4d9e | 459 | colour_wheel_filler=8; |
| deldering95 | 66:88c910cd4d9e | 460 | circle_filled_new_patient = 10; |
| deldering95 | 66:88c910cd4d9e | 461 | circle_filling_new_patient = false; |
| deldering95 | 66:88c910cd4d9e | 462 | colour_wheel_drain_new_patient = false; |
| deldering95 | 66:88c910cd4d9e | 463 | new_patient_flag = 1; |
| deldering95 | 66:88c910cd4d9e | 464 | } |
| deldering95 | 66:88c910cd4d9e | 465 | px.SetAll(colourbuf[6]); |
| deldering95 | 66:88c910cd4d9e | 466 | for(int k =0; k<=colour_wheel_filler; k++) { |
| deldering95 | 66:88c910cd4d9e | 467 | px.Set((k+8)%16,colourbuf[5]); |
| deldering95 | 66:88c910cd4d9e | 468 | px.Set((16-k+8)%16,colourbuf[5]); |
| deldering95 | 66:88c910cd4d9e | 469 | } |
| deldering95 | 66:88c910cd4d9e | 470 | px.SetAllI(int(intensity*2.55)); |
| deldering95 | 66:88c910cd4d9e | 471 | } |
| deldering95 | 66:88c910cd4d9e | 472 | |
| deldering95 | 66:88c910cd4d9e | 473 | if(!reposition_button_hold_timer.read_ms()&&circle_filling_reposition&&!colour_wheel_drain_reposition) { |
| deldering95 | 66:88c910cd4d9e | 474 | usb_serial.printf("Short hold\n"); |
| deldering95 | 66:88c910cd4d9e | 475 | px.SetAll(colourbuf[6]); |
| deldering95 | 66:88c910cd4d9e | 476 | for(int k =0; k<=colour_wheel_filler; k++) { |
| deldering95 | 66:88c910cd4d9e | 477 | px.Set(k,colourbuf[5]); |
| deldering95 | 66:88c910cd4d9e | 478 | px.Set(16-k,colourbuf[5]); |
| deldering95 | 66:88c910cd4d9e | 479 | } |
| deldering95 | 66:88c910cd4d9e | 480 | px.SetAllI(int(intensity*2.55)); |
| deldering95 | 66:88c910cd4d9e | 481 | colour_wheel_filler++; |
| deldering95 | 66:88c910cd4d9e | 482 | if(colour_wheel_filler>=5) { |
| deldering95 | 66:88c910cd4d9e | 483 | colour_wheel_drain_reposition=true; |
| deldering95 | 66:88c910cd4d9e | 484 | circle_filling_reposition=false; |
| deldering95 | 66:88c910cd4d9e | 485 | } |
| deldering95 | 66:88c910cd4d9e | 486 | } |
| deldering95 | 66:88c910cd4d9e | 487 | |
| deldering95 | 66:88c910cd4d9e | 488 | if(!new_patient_button_hold_timer.read_ms()&&circle_filling_new_patient&&!colour_wheel_drain_new_patient) { |
| deldering95 | 66:88c910cd4d9e | 489 | usb_serial.printf("Short hold\n"); |
| deldering95 | 66:88c910cd4d9e | 490 | px.SetAll(colourbuf[6]); |
| deldering95 | 66:88c910cd4d9e | 491 | for(int k =0; k<=colour_wheel_filler; k++) { |
| deldering95 | 66:88c910cd4d9e | 492 | px.Set((k+8)%16,colourbuf[5]); |
| deldering95 | 66:88c910cd4d9e | 493 | px.Set((16-k+8)%16,colourbuf[5]); |
| deldering95 | 66:88c910cd4d9e | 494 | } |
| deldering95 | 66:88c910cd4d9e | 495 | px.SetAllI(int(intensity*2.55)); |
| deldering95 | 66:88c910cd4d9e | 496 | colour_wheel_filler++; |
| deldering95 | 66:88c910cd4d9e | 497 | if(colour_wheel_filler>=5) { |
| deldering95 | 66:88c910cd4d9e | 498 | colour_wheel_drain_new_patient=true; |
| deldering95 | 66:88c910cd4d9e | 499 | circle_filling_new_patient=false; |
| deldering95 | 66:88c910cd4d9e | 500 | } |
| deldering95 | 66:88c910cd4d9e | 501 | } |
| deldering95 | 66:88c910cd4d9e | 502 | |
| deldering95 | 66:88c910cd4d9e | 503 | if(colour_wheel_drain_reposition) { |
| deldering95 | 66:88c910cd4d9e | 504 | usb_serial.printf("drain\n"); |
| deldering95 | 66:88c910cd4d9e | 505 | px.SetAll(colourbuf[6]); |
| deldering95 | 66:88c910cd4d9e | 506 | for(int k =0; k<=colour_wheel_filler; k++) { |
| deldering95 | 66:88c910cd4d9e | 507 | px.Set(k,colourbuf[5]); |
| deldering95 | 66:88c910cd4d9e | 508 | px.Set(16-k,colourbuf[5]); |
| deldering95 | 66:88c910cd4d9e | 509 | } |
| deldering95 | 66:88c910cd4d9e | 510 | px.SetAllI(int(intensity*2.55)); |
| deldering95 | 66:88c910cd4d9e | 511 | colour_wheel_filler--; |
| deldering95 | 66:88c910cd4d9e | 512 | if(!colour_wheel_filler)colour_wheel_drain_reposition=false; |
| deldering95 | 66:88c910cd4d9e | 513 | } |
| deldering95 | 66:88c910cd4d9e | 514 | |
| deldering95 | 66:88c910cd4d9e | 515 | if(colour_wheel_drain_new_patient) { |
| deldering95 | 66:88c910cd4d9e | 516 | usb_serial.printf("drain\n"); |
| deldering95 | 66:88c910cd4d9e | 517 | px.SetAll(colourbuf[6]); |
| deldering95 | 66:88c910cd4d9e | 518 | for(int k =0; k<=colour_wheel_filler; k++) { |
| deldering95 | 66:88c910cd4d9e | 519 | px.Set((k+8)%16,colourbuf[5]); |
| deldering95 | 66:88c910cd4d9e | 520 | px.Set((16-k+8)%16,colourbuf[5]); |
| deldering95 | 66:88c910cd4d9e | 521 | } |
| deldering95 | 66:88c910cd4d9e | 522 | px.SetAllI(int(intensity*2.55)); |
| deldering95 | 66:88c910cd4d9e | 523 | colour_wheel_filler--; |
| deldering95 | 66:88c910cd4d9e | 524 | if(!colour_wheel_filler)colour_wheel_drain_new_patient=false; |
| deldering95 | 66:88c910cd4d9e | 525 | } |
| deldering95 | 66:88c910cd4d9e | 526 | |
| deldering95 | 66:88c910cd4d9e | 527 | if(circle_filled_reposition) { |
| deldering95 | 66:88c910cd4d9e | 528 | usb_serial.printf("circle_filled_repo\n"); |
| deldering95 | 66:88c910cd4d9e | 529 | px.SetAll(colourbuf[6]); |
| deldering95 | 66:88c910cd4d9e | 530 | for(int k =0; k<=circle_filled_reposition; k++) { |
| deldering95 | 66:88c910cd4d9e | 531 | px.Set((16-k)%16,colourbuf[5]); |
| deldering95 | 66:88c910cd4d9e | 532 | } |
| deldering95 | 66:88c910cd4d9e | 533 | px.Set((16-circle_filled_reposition)%16,colourbuf[4]); |
| deldering95 | 66:88c910cd4d9e | 534 | px.SetAllI(int(intensity*2.55)); |
| deldering95 | 66:88c910cd4d9e | 535 | circle_filled_reposition--; |
| deldering95 | 67:1b300aa30923 | 536 | percentage_tester=0; |
| deldering95 | 66:88c910cd4d9e | 537 | } |
| deldering95 | 66:88c910cd4d9e | 538 | |
| deldering95 | 66:88c910cd4d9e | 539 | if(circle_filled_new_patient) { |
| deldering95 | 66:88c910cd4d9e | 540 | usb_serial.printf("circle_filled_new_patient\n"); |
| deldering95 | 66:88c910cd4d9e | 541 | px.SetAll(colourbuf[5]); |
| deldering95 | 66:88c910cd4d9e | 542 | px.SetAllI(int(intensity*2.55*(7-(circle_filled_new_patient%5))/7)); |
| deldering95 | 66:88c910cd4d9e | 543 | circle_filled_new_patient--; |
| deldering95 | 66:88c910cd4d9e | 544 | } |
| deldering95 | 67:1b300aa30923 | 545 | if(!connection_test_sensorplate) { |
| deldering95 | 67:1b300aa30923 | 546 | px.Set(6,colourbuf[0]); |
| deldering95 | 67:1b300aa30923 | 547 | px.SetI(6,int(intensity*2.55)); |
| deldering95 | 67:1b300aa30923 | 548 | } |
| deldering95 | 66:88c910cd4d9e | 549 | ws.write_offsets(px.getBuf(),0,0,0); |
| deldering95 | 66:88c910cd4d9e | 550 | ring_colour_old=ring_colour; |
| deldering95 | 66:88c910cd4d9e | 551 | } |
| deldering95 | 66:88c910cd4d9e | 552 | |
| deldering95 | 43:d09814c177a0 | 553 | void colour_select_indicating_LED_wall(char nLED_colour) // Function to select the colour for LED's to wall (values comes from algorithm). |
| ricardo_95 | 21:13e4824bc364 | 554 | { |
| ricardo_95 | 36:d10f368d037b | 555 | set_intensity_LEDs(); // Call function set_intensity_LEDs to set the intensity for LED's to wall and above buttons. |
| deldering95 | 43:d09814c177a0 | 556 | ws.setII(2.55*intensity); |
| deldering95 | 43:d09814c177a0 | 557 | switch(nLED_colour) { |
| deldering95 | 43:d09814c177a0 | 558 | case 'r' : |
| deldering95 | 43:d09814c177a0 | 559 | px.SetAll(colourbuf[0]); |
| Ishy | 55:b74e7076d7a0 | 560 | LED_red_state = 1; |
| Ishy | 55:b74e7076d7a0 | 561 | LED_yellow_state = 0; |
| deldering95 | 43:d09814c177a0 | 562 | break; |
| deldering95 | 43:d09814c177a0 | 563 | case 'g' : |
| deldering95 | 43:d09814c177a0 | 564 | px.SetAll(colourbuf[1]); |
| Ishy | 55:b74e7076d7a0 | 565 | LED_green_state = 1; |
| Ishy | 55:b74e7076d7a0 | 566 | LED_red_state = 0; |
| deldering95 | 43:d09814c177a0 | 567 | break; |
| deldering95 | 43:d09814c177a0 | 568 | case 'b' : |
| deldering95 | 43:d09814c177a0 | 569 | px.SetAll(colourbuf[2]); |
| deldering95 | 43:d09814c177a0 | 570 | break; |
| deldering95 | 43:d09814c177a0 | 571 | case 'y' : |
| deldering95 | 43:d09814c177a0 | 572 | px.SetAll(colourbuf[3]); |
| Ishy | 55:b74e7076d7a0 | 573 | LED_yellow_state = 1; |
| Ishy | 55:b74e7076d7a0 | 574 | LED_green_state = 0; |
| deldering95 | 43:d09814c177a0 | 575 | break; |
| deldering95 | 43:d09814c177a0 | 576 | default : |
| deldering95 | 43:d09814c177a0 | 577 | px.SetAll(colourbuf[4]); |
| deldering95 | 43:d09814c177a0 | 578 | } |
| deldering95 | 43:d09814c177a0 | 579 | |
| deldering95 | 43:d09814c177a0 | 580 | if (calibration_flash >= 1) { |
| deldering95 | 43:d09814c177a0 | 581 | if ((calibration_flash % 2) == 0) { |
| deldering95 | 48:aca02ef5cd01 | 582 | px.SetAll(colourbuf[2]); |
| deldering95 | 43:d09814c177a0 | 583 | } else { |
| deldering95 | 43:d09814c177a0 | 584 | ws.setII(0); |
| deldering95 | 43:d09814c177a0 | 585 | } |
| deldering95 | 43:d09814c177a0 | 586 | calibration_flash--; |
| deldering95 | 43:d09814c177a0 | 587 | } |
| deldering95 | 51:69087c44e8ac | 588 | //for (int z=WS2812_BUF; z >= 0 ; z--) { |
| deldering95 | 53:54c882995514 | 589 | ws.write_offsets(px.getBuf(),0,0,0); |
| deldering95 | 51:69087c44e8ac | 590 | //} |
| ricardo_95 | 21:13e4824bc364 | 591 | } |
| ricardo_95 | 21:13e4824bc364 | 592 | |
| ricardo_95 | 36:d10f368d037b | 593 | void trigger_lock() // If rising edge lock button is detected start locktimer. |
| ricardo_95 | 21:13e4824bc364 | 594 | { |
| ricardo_95 | 34:1614f4f2b841 | 595 | if (test_mode == 1) { |
| ricardo_95 | 36:d10f368d037b | 596 | usb_serial.printf("Lock triggered.\n"); |
| ricardo_95 | 34:1614f4f2b841 | 597 | } |
| Ishy | 55:b74e7076d7a0 | 598 | if (lock_state == 0) pi_serial.printf(">44\n"); |
| Ishy | 55:b74e7076d7a0 | 599 | else if (lock_state == 1) pi_serial.printf(">00\n"); |
| ricardo_95 | 36:d10f368d037b | 600 | button_lock_hold_timer.reset(); |
| ricardo_95 | 36:d10f368d037b | 601 | button_lock_hold_timer.start(); |
| ricardo_95 | 36:d10f368d037b | 602 | delay_between_button_pressed.reset(); |
| ricardo_95 | 36:d10f368d037b | 603 | delay_between_button_pressed.start(); |
| ricardo_95 | 21:13e4824bc364 | 604 | } |
| ricardo_95 | 21:13e4824bc364 | 605 | |
| ricardo_95 | 36:d10f368d037b | 606 | void end_timer_lock_button() // End timer lock. |
| ricardo_95 | 21:13e4824bc364 | 607 | { |
| deldering95 | 43:d09814c177a0 | 608 | if (test_mode == 1) { // If statement for test purposal. |
| ricardo_95 | 36:d10f368d037b | 609 | usb_serial.printf("Lock released.\n"); |
| ricardo_95 | 36:d10f368d037b | 610 | } |
| ricardo_95 | 36:d10f368d037b | 611 | lock_flag = 0; // Set lock_flag off. |
| Ishy | 55:b74e7076d7a0 | 612 | lock_is_logged = 0; |
| ricardo_95 | 36:d10f368d037b | 613 | button_lock_hold_timer.stop(); // Stop and reset holdtimer |
| ricardo_95 | 36:d10f368d037b | 614 | button_lock_hold_timer.reset(); |
| ricardo_95 | 36:d10f368d037b | 615 | } |
| ricardo_95 | 36:d10f368d037b | 616 | |
| ricardo_95 | 36:d10f368d037b | 617 | void reposition_button_triggered() |
| ricardo_95 | 36:d10f368d037b | 618 | { |
| ricardo_95 | 36:d10f368d037b | 619 | if (lock_state == 1 | (delay_between_button_pressed.read_ms() < buttondelay_ms)) { // Control statement for lock interface and delay for non using buttons at the same time. |
| deldering95 | 48:aca02ef5cd01 | 620 | lock_flash = 10; |
| deldering95 | 58:8cfa736d8553 | 621 | } |
| deldering95 | 58:8cfa736d8553 | 622 | |
| Ishy | 55:b74e7076d7a0 | 623 | delay_between_button_pressed.reset(); |
| Ishy | 55:b74e7076d7a0 | 624 | delay_between_button_pressed.start(); |
| Ishy | 55:b74e7076d7a0 | 625 | if (test_mode == 1) { // If statement for test purposal. |
| Ishy | 55:b74e7076d7a0 | 626 | usb_serial.printf("Reposition triggered.\n"); |
| Ishy | 55:b74e7076d7a0 | 627 | LED_on_dev_board1 = !LED_on_dev_board1; |
| Ishy | 55:b74e7076d7a0 | 628 | } |
| deldering95 | 58:8cfa736d8553 | 629 | |
| deldering95 | 66:88c910cd4d9e | 630 | if (lock_state == 1||button_new_patient.read()==0) reposition_lock_flag = 1; |
| deldering95 | 58:8cfa736d8553 | 631 | else { |
| deldering95 | 66:88c910cd4d9e | 632 | reposition_button_hold_timer.reset(); |
| deldering95 | 66:88c910cd4d9e | 633 | reposition_button_hold_timer.start(); |
| deldering95 | 66:88c910cd4d9e | 634 | |
| ricardo_95 | 36:d10f368d037b | 635 | reposition_feedback_LED = control_LED_intensity; |
| Ishy | 55:b74e7076d7a0 | 636 | pi_serial.printf("&05\n"); |
| deldering95 | 58:8cfa736d8553 | 637 | if(test_mode == 1) usb_serial.printf("&05\n"); |
| ricardo_95 | 21:13e4824bc364 | 638 | } |
| ricardo_95 | 21:13e4824bc364 | 639 | } |
| ricardo_95 | 21:13e4824bc364 | 640 | |
| deldering95 | 43:d09814c177a0 | 641 | void rise_reposition() // Interrupt for rising edge reposition function (deactivation; active low). |
| ricardo_95 | 21:13e4824bc364 | 642 | { |
| deldering95 | 43:d09814c177a0 | 643 | if (test_mode == 1) { // If statement for test purposal. |
| ricardo_95 | 36:d10f368d037b | 644 | usb_serial.printf("Reposition released.\n"); |
| ricardo_95 | 34:1614f4f2b841 | 645 | } |
| deldering95 | 58:8cfa736d8553 | 646 | |
| Ishy | 55:b74e7076d7a0 | 647 | if (reposition_feedback_LED != 0) { |
| Ishy | 55:b74e7076d7a0 | 648 | pi_serial.printf("&50\n"); |
| deldering95 | 58:8cfa736d8553 | 649 | |
| Ishy | 55:b74e7076d7a0 | 650 | if(test_mode == 1) usb_serial.printf("&50\n"); |
| Ishy | 55:b74e7076d7a0 | 651 | } |
| deldering95 | 66:88c910cd4d9e | 652 | reposition_button_hold_timer.stop(); |
| deldering95 | 66:88c910cd4d9e | 653 | reposition_button_hold_timer.reset(); |
| ricardo_95 | 36:d10f368d037b | 654 | reposition_feedback_LED = 0; |
| ricardo_95 | 21:13e4824bc364 | 655 | } |
| Ishy | 55:b74e7076d7a0 | 656 | //TODO rename to calibration |
| ricardo_95 | 36:d10f368d037b | 657 | void mute_button_triggered() |
| ricardo_95 | 21:13e4824bc364 | 658 | { |
| ricardo_95 | 21:13e4824bc364 | 659 | |
| ricardo_95 | 36:d10f368d037b | 660 | if (lock_state == 1 | (delay_between_button_pressed.read_ms() < buttondelay_ms)) { // Control statement for lock interface and delay for non using buttons at the same time. |
| deldering95 | 48:aca02ef5cd01 | 661 | lock_flash = 10; |
| Ishy | 55:b74e7076d7a0 | 662 | } |
| deldering95 | 58:8cfa736d8553 | 663 | |
| Ishy | 55:b74e7076d7a0 | 664 | delay_between_button_pressed.reset(); |
| Ishy | 55:b74e7076d7a0 | 665 | delay_between_button_pressed.start(); |
| Ishy | 55:b74e7076d7a0 | 666 | button_calibration_hold_timer.reset(); // inline ? |
| Ishy | 55:b74e7076d7a0 | 667 | button_calibration_hold_timer.start(); |
| deldering95 | 58:8cfa736d8553 | 668 | |
| Ishy | 55:b74e7076d7a0 | 669 | if (lock_state == 1) { |
| Ishy | 55:b74e7076d7a0 | 670 | mute_lock_flag = 1; |
| Ishy | 55:b74e7076d7a0 | 671 | } |
| deldering95 | 58:8cfa736d8553 | 672 | |
| Ishy | 55:b74e7076d7a0 | 673 | else { |
| deldering95 | 58:8cfa736d8553 | 674 | mute_feedback_LED = control_LED_intensity; |
| deldering95 | 58:8cfa736d8553 | 675 | pi_serial.printf("&07\n"); |
| deldering95 | 58:8cfa736d8553 | 676 | if (test_mode == 1) usb_serial.printf("&07\n"); |
| deldering95 | 58:8cfa736d8553 | 677 | mute_flag = 1; |
| Ishy | 55:b74e7076d7a0 | 678 | } |
| deldering95 | 58:8cfa736d8553 | 679 | |
| Ishy | 55:b74e7076d7a0 | 680 | if (test_mode == 1) { // If statement for test purposal. |
| Ishy | 55:b74e7076d7a0 | 681 | usb_serial.printf("Calibration triggered\n"); |
| Ishy | 55:b74e7076d7a0 | 682 | LED_on_dev_board1 = !LED_on_dev_board1; |
| Ishy | 55:b74e7076d7a0 | 683 | } |
| deldering95 | 43:d09814c177a0 | 684 | |
| deldering95 | 58:8cfa736d8553 | 685 | |
| ricardo_95 | 21:13e4824bc364 | 686 | } |
| ricardo_95 | 21:13e4824bc364 | 687 | |
| deldering95 | 51:69087c44e8ac | 688 | void rise_mute() // Interrupt for rising edge reposition function (deactivation; active low). |
| ricardo_95 | 21:13e4824bc364 | 689 | { |
| deldering95 | 43:d09814c177a0 | 690 | if (test_mode == 1) { // If statement for test purposal. |
| Ishy | 55:b74e7076d7a0 | 691 | usb_serial.printf("Calibration released.\n"); |
| ricardo_95 | 34:1614f4f2b841 | 692 | } |
| Ishy | 55:b74e7076d7a0 | 693 | if(lock_state == 0 && mute_feedback_LED != 0) { |
| Ishy | 55:b74e7076d7a0 | 694 | pi_serial.printf("&70\n"); |
| Ishy | 55:b74e7076d7a0 | 695 | if (test_mode == 1) usb_serial.printf("&70\n"); |
| Ishy | 55:b74e7076d7a0 | 696 | } |
| deldering95 | 58:8cfa736d8553 | 697 | |
| deldering95 | 51:69087c44e8ac | 698 | mute_feedback_LED = 0; |
| ricardo_95 | 21:13e4824bc364 | 699 | |
| deldering95 | 43:d09814c177a0 | 700 | button_calibration_hold_timer.stop(); // Timer reset for calibration function of new patient button. |
| ricardo_95 | 36:d10f368d037b | 701 | button_calibration_hold_timer.reset(); |
| ricardo_95 | 21:13e4824bc364 | 702 | |
| ricardo_95 | 36:d10f368d037b | 703 | if (lock_state == 1 | (delay_between_button_pressed.read_ms() < buttondelay_ms)) { // Control statement for lock interface and delay for non using buttons at the same time. |
| ricardo_95 | 21:13e4824bc364 | 704 | } else { |
| ricardo_95 | 21:13e4824bc364 | 705 | if (calibration_flag == 0) { |
| ricardo_95 | 21:13e4824bc364 | 706 | |
| deldering95 | 43:d09814c177a0 | 707 | if (LED_on_dev_board1 == 0) { // If statement for test purposal. |
| ricardo_95 | 36:d10f368d037b | 708 | LED_on_dev_board1 = 1; |
| ricardo_95 | 21:13e4824bc364 | 709 | } else { |
| ricardo_95 | 36:d10f368d037b | 710 | LED_on_dev_board1 = 0; |
| ricardo_95 | 21:13e4824bc364 | 711 | } |
| ricardo_95 | 21:13e4824bc364 | 712 | |
| ricardo_95 | 21:13e4824bc364 | 713 | } else { |
| ricardo_95 | 21:13e4824bc364 | 714 | calibration_flag = 0; |
| ricardo_95 | 21:13e4824bc364 | 715 | } |
| ricardo_95 | 21:13e4824bc364 | 716 | } |
| deldering95 | 51:69087c44e8ac | 717 | |
| deldering95 | 51:69087c44e8ac | 718 | } |
| deldering95 | 51:69087c44e8ac | 719 | |
| deldering95 | 51:69087c44e8ac | 720 | void trigger_new_patient() // Function to trigger hold timer for new patient and calibration function. |
| deldering95 | 51:69087c44e8ac | 721 | { |
| deldering95 | 51:69087c44e8ac | 722 | |
| deldering95 | 51:69087c44e8ac | 723 | if (lock_state == 1 | (delay_between_button_pressed.read_ms() < buttondelay_ms)) { |
| deldering95 | 51:69087c44e8ac | 724 | lock_flash = 10; |
| Ishy | 55:b74e7076d7a0 | 725 | } |
| deldering95 | 58:8cfa736d8553 | 726 | |
| Ishy | 55:b74e7076d7a0 | 727 | delay_between_button_pressed.reset(); |
| Ishy | 55:b74e7076d7a0 | 728 | delay_between_button_pressed.start(); |
| deldering95 | 58:8cfa736d8553 | 729 | |
| deldering95 | 66:88c910cd4d9e | 730 | if (lock_state == 1||button_reposition.read()==0) new_patient_lock_flag = 1; |
| Ishy | 55:b74e7076d7a0 | 731 | else { |
| deldering95 | 66:88c910cd4d9e | 732 | new_patient_button_hold_timer.reset(); |
| deldering95 | 66:88c910cd4d9e | 733 | new_patient_button_hold_timer.start(); |
| deldering95 | 66:88c910cd4d9e | 734 | |
| Ishy | 55:b74e7076d7a0 | 735 | new_patient_feedback_LED = control_LED_intensity; |
| Ishy | 55:b74e7076d7a0 | 736 | pi_serial.printf("&06\n"); |
| deldering95 | 66:88c910cd4d9e | 737 | //new_patient_flag = 1; |
| deldering95 | 58:8cfa736d8553 | 738 | |
| deldering95 | 58:8cfa736d8553 | 739 | if(test_mode == 1) { |
| Ishy | 55:b74e7076d7a0 | 740 | usb_serial.printf("&06\n"); |
| deldering95 | 51:69087c44e8ac | 741 | } |
| deldering95 | 51:69087c44e8ac | 742 | } |
| deldering95 | 58:8cfa736d8553 | 743 | |
| Ishy | 55:b74e7076d7a0 | 744 | if (test_mode == 1) { // If statement for test purposal. |
| Ishy | 55:b74e7076d7a0 | 745 | usb_serial.printf("New patient triggered.\n"); |
| Ishy | 55:b74e7076d7a0 | 746 | } |
| deldering95 | 58:8cfa736d8553 | 747 | |
| deldering95 | 51:69087c44e8ac | 748 | } |
| deldering95 | 51:69087c44e8ac | 749 | |
| deldering95 | 51:69087c44e8ac | 750 | void activate_new_patient_function() // Timer calibration function. |
| deldering95 | 51:69087c44e8ac | 751 | { |
| deldering95 | 51:69087c44e8ac | 752 | if (test_mode == 1) { // If statement for test purposal. |
| deldering95 | 51:69087c44e8ac | 753 | usb_serial.printf("New patient released.\n"); |
| deldering95 | 58:8cfa736d8553 | 754 | |
| Ishy | 55:b74e7076d7a0 | 755 | } |
| deldering95 | 66:88c910cd4d9e | 756 | new_patient_button_hold_timer.stop(); |
| deldering95 | 66:88c910cd4d9e | 757 | new_patient_button_hold_timer.reset(); |
| deldering95 | 66:88c910cd4d9e | 758 | |
| deldering95 | 58:8cfa736d8553 | 759 | |
| Ishy | 55:b74e7076d7a0 | 760 | if (new_patient_feedback_LED != 0) { |
| Ishy | 55:b74e7076d7a0 | 761 | pi_serial.printf("&60\n"); |
| Ishy | 55:b74e7076d7a0 | 762 | if(test_mode) usb_serial.printf("&60\n"); |
| deldering95 | 51:69087c44e8ac | 763 | } |
| deldering95 | 51:69087c44e8ac | 764 | new_patient_feedback_LED = 0; |
| ricardo_95 | 21:13e4824bc364 | 765 | } |
| ricardo_95 | 21:13e4824bc364 | 766 | |
| deldering95 | 43:d09814c177a0 | 767 | void timer_functions() // Function which contains statements using timers. |
| ricardo_95 | 21:13e4824bc364 | 768 | { |
| deldering95 | 48:aca02ef5cd01 | 769 | if (button_lock == 1) { |
| deldering95 | 44:dcbde3175a37 | 770 | button_lock_hold_timer.stop(); |
| deldering95 | 44:dcbde3175a37 | 771 | button_lock_hold_timer.reset(); |
| deldering95 | 44:dcbde3175a37 | 772 | } |
| ricardo_95 | 36:d10f368d037b | 773 | if ((button_lock_hold_timer.read_ms() > locktime_ms) && lock_flag == 0 && button_lock == 0) { // If statement for lock function. |
| ricardo_95 | 21:13e4824bc364 | 774 | lock_flag = 1; |
| ricardo_95 | 36:d10f368d037b | 775 | LED_on_dev_board2 = !LED_on_dev_board2; |
| ricardo_95 | 21:13e4824bc364 | 776 | lock_state = !lock_state; |
| deldering95 | 43:d09814c177a0 | 777 | |
| deldering95 | 43:d09814c177a0 | 778 | if (lock_state == 0) { // If statement to control lock feedback LED above button. |
| ricardo_95 | 36:d10f368d037b | 779 | lock_feedback_LED = control_LED_intensity; |
| Ishy | 55:b74e7076d7a0 | 780 | pi_serial.printf("&08\n"); |
| deldering95 | 58:8cfa736d8553 | 781 | if(test_mode == 1) usb_serial.printf("&08\n"); |
| ricardo_95 | 21:13e4824bc364 | 782 | } else { |
| ricardo_95 | 36:d10f368d037b | 783 | lock_feedback_LED = 0; |
| Ishy | 55:b74e7076d7a0 | 784 | pi_serial.printf("&80\n"); |
| Ishy | 55:b74e7076d7a0 | 785 | if(test_mode == 1) usb_serial.printf("&80\n"); |
| ricardo_95 | 21:13e4824bc364 | 786 | } |
| ricardo_95 | 21:13e4824bc364 | 787 | } |
| ricardo_95 | 21:13e4824bc364 | 788 | |
| deldering95 | 51:69087c44e8ac | 789 | if (button_mute == 1) { |
| deldering95 | 44:dcbde3175a37 | 790 | button_calibration_hold_timer.stop(); |
| deldering95 | 44:dcbde3175a37 | 791 | button_calibration_hold_timer.reset(); |
| deldering95 | 44:dcbde3175a37 | 792 | } |
| deldering95 | 44:dcbde3175a37 | 793 | |
| deldering95 | 66:88c910cd4d9e | 794 | if (button_reposition == 1) { |
| deldering95 | 66:88c910cd4d9e | 795 | reposition_button_hold_timer.stop(); |
| deldering95 | 66:88c910cd4d9e | 796 | reposition_button_hold_timer.reset(); |
| deldering95 | 66:88c910cd4d9e | 797 | } |
| deldering95 | 66:88c910cd4d9e | 798 | |
| deldering95 | 66:88c910cd4d9e | 799 | |
| deldering95 | 51:69087c44e8ac | 800 | if ((button_calibration_hold_timer.read_ms() > calibrationtime_ms) && calibration_flag == 0 && button_mute == 0 && lock_state == 0) { // If statement for calibration algorithm. |
| ricardo_95 | 21:13e4824bc364 | 801 | calibration_flag = 1; |
| ricardo_95 | 21:13e4824bc364 | 802 | calibration_flash = 11; |
| deldering95 | 58:8cfa736d8553 | 803 | |
| Ishy | 55:b74e7076d7a0 | 804 | if (test_mode == 1) { // If statement for test purposal. |
| ricardo_95 | 36:d10f368d037b | 805 | usb_serial.printf("Calibrate triggered.\n"); |
| ricardo_95 | 34:1614f4f2b841 | 806 | } |
| Ishy | 55:b74e7076d7a0 | 807 | pi_serial.printf(">33\n"); |
| deldering95 | 58:8cfa736d8553 | 808 | |
| ricardo_95 | 21:13e4824bc364 | 809 | } |
| deldering95 | 66:88c910cd4d9e | 810 | /* |
| deldering95 | 66:88c910cd4d9e | 811 | if (delay_between_button_pressed.read_ms() > delay_lock_interface) { // If buttons are not pressed for 3 minutes, set lock active. |
| deldering95 | 66:88c910cd4d9e | 812 | lock_state = 1; |
| deldering95 | 66:88c910cd4d9e | 813 | LED_on_dev_board2 = 1; |
| deldering95 | 66:88c910cd4d9e | 814 | lock_feedback_LED = 0; |
| deldering95 | 66:88c910cd4d9e | 815 | if (!auto_lock_led_logged) { |
| deldering95 | 66:88c910cd4d9e | 816 | pi_serial.printf("&80\n"); |
| deldering95 | 66:88c910cd4d9e | 817 | if(test_mode == 1) usb_serial.printf("&80\n"); |
| deldering95 | 66:88c910cd4d9e | 818 | auto_lock_led_logged = 1; |
| deldering95 | 66:88c910cd4d9e | 819 | } |
| deldering95 | 66:88c910cd4d9e | 820 | } else { |
| deldering95 | 66:88c910cd4d9e | 821 | auto_lock_led_logged = 0; |
| deldering95 | 66:88c910cd4d9e | 822 | }*/ |
| ricardo_95 | 21:13e4824bc364 | 823 | } |
| ricardo_95 | 21:13e4824bc364 | 824 | |
| ricardo_95 | 36:d10f368d037b | 825 | void set_userinterface_LED() // Control functions for LED above buttons (added because of failures). |
| ricardo_95 | 21:13e4824bc364 | 826 | { |
| ricardo_95 | 21:13e4824bc364 | 827 | if (lock_state == 1) { |
| ricardo_95 | 21:13e4824bc364 | 828 | } else { |
| ricardo_95 | 36:d10f368d037b | 829 | if (button_reposition == 0) { |
| ricardo_95 | 36:d10f368d037b | 830 | reposition_feedback_LED = control_LED_intensity; |
| ricardo_95 | 21:13e4824bc364 | 831 | } else { |
| ricardo_95 | 36:d10f368d037b | 832 | reposition_feedback_LED = 0; |
| ricardo_95 | 21:13e4824bc364 | 833 | } |
| ricardo_95 | 21:13e4824bc364 | 834 | |
| ricardo_95 | 36:d10f368d037b | 835 | if (button_new_patient == 0) { |
| ricardo_95 | 36:d10f368d037b | 836 | new_patient_feedback_LED = control_LED_intensity; |
| ricardo_95 | 21:13e4824bc364 | 837 | } else { |
| ricardo_95 | 36:d10f368d037b | 838 | new_patient_feedback_LED = 0; |
| ricardo_95 | 21:13e4824bc364 | 839 | } |
| ricardo_95 | 21:13e4824bc364 | 840 | } |
| deldering95 | 48:aca02ef5cd01 | 841 | if (lock_flash >= 1 && lock_state == 1) { |
| deldering95 | 48:aca02ef5cd01 | 842 | if ((lock_flash % 2) == 0) { |
| deldering95 | 48:aca02ef5cd01 | 843 | lock_feedback_LED = control_LED_intensity; |
| Ishy | 55:b74e7076d7a0 | 844 | pi_serial.printf("&08\n"); |
| Ishy | 55:b74e7076d7a0 | 845 | if(test_mode == 1) usb_serial.printf("&08\n"); |
| deldering95 | 48:aca02ef5cd01 | 846 | } else { |
| deldering95 | 48:aca02ef5cd01 | 847 | lock_feedback_LED = 0; |
| Ishy | 55:b74e7076d7a0 | 848 | pi_serial.printf("&80\n"); |
| Ishy | 55:b74e7076d7a0 | 849 | if(test_mode == 1) usb_serial.printf("&80\n"); |
| ricardo_95 | 21:13e4824bc364 | 850 | } |
| deldering95 | 48:aca02ef5cd01 | 851 | lock_flash--; |
| deldering95 | 48:aca02ef5cd01 | 852 | } else { |
| deldering95 | 48:aca02ef5cd01 | 853 | lock_flash = 0; |
| ricardo_95 | 21:13e4824bc364 | 854 | } |
| ricardo_95 | 21:13e4824bc364 | 855 | } |
| ricardo_95 | 21:13e4824bc364 | 856 | |
| deldering95 | 57:fac732476810 | 857 | void sensorplate_detached() |
| deldering95 | 57:fac732476810 | 858 | { |
| deldering95 | 58:8cfa736d8553 | 859 | if(piezo_electric_sample_timer.read_us() > total_readout_cycle_time_us) { |
| deldering95 | 58:8cfa736d8553 | 860 | NVIC_SystemReset(); |
| deldering95 | 58:8cfa736d8553 | 861 | } |
| deldering95 | 57:fac732476810 | 862 | } |
| deldering95 | 57:fac732476810 | 863 | |
| deldering95 | 57:fac732476810 | 864 | |
| deldering95 | 43:d09814c177a0 | 865 | int main() // Main function. inline function "Momo Init" bijvoorbeeld |
| deldering95 | 43:d09814c177a0 | 866 | { |
| deldering95 | 66:88c910cd4d9e | 867 | pi_serial.attach(serial_read,Serial::RxIrq); |
| deldering95 | 66:88c910cd4d9e | 868 | ws.useII(WS2812::PER_PIXEL); |
| deldering95 | 66:88c910cd4d9e | 869 | ws.setII(255); |
| deldering95 | 66:88c910cd4d9e | 870 | px.SetAll(colourbuf[4]); // use global intensity scaling |
| deldering95 | 51:69087c44e8ac | 871 | set_intensity_LEDs(); // Initialize intensity for user interface LED's and LED's shines to wall. |
| deldering95 | 66:88c910cd4d9e | 872 | ws.write_offsets(px.getBuf(),0,0,0); |
| deldering95 | 53:54c882995514 | 873 | |
| deldering95 | 48:aca02ef5cd01 | 874 | speaker1 = 1; |
| ricardo_95 | 36:d10f368d037b | 875 | wait_ms(boot_delay_ms); // Wait to boot sensorplate first. |
| deldering95 | 48:aca02ef5cd01 | 876 | speaker1 = 0; |
| ricardo_95 | 39:cff99a9b7237 | 877 | i2c_sensorplate_adc.frequency(i2c__frequency); // Set frequency for i2c connection to sensorplate (variable is declared in config part). |
| ricardo_95 | 36:d10f368d037b | 878 | usb_serial.baud(baud_rate); // Set serial USB connection baud rate (variable is declared in config part). |
| ricardo_95 | 36:d10f368d037b | 879 | pi_serial.baud(baud_rate); // Same as line 697, but now for serial PI connection. |
| ricardo_95 | 36:d10f368d037b | 880 | piezo_resistive_adc1.setGain(GAIN_TWOTHIRDS); // Set ranges of ADC to +/-6.144V (end is marked with #): |
| deldering95 | 43:d09814c177a0 | 881 | piezo_resistive_adc2.setGain(GAIN_TWOTHIRDS); |
| deldering95 | 51:69087c44e8ac | 882 | piezo_electric_adc.setGain(GAIN_TWO); |
| deldering95 | 43:d09814c177a0 | 883 | pi_serial.format(8, SerialBase::None, 1); // Set serial communication line with PI. |
| ricardo_95 | 7:dba5091c8b7d | 884 | |
| deldering95 | 57:fac732476810 | 885 | testpin_sensorplate.mode(PullUp); |
| deldering95 | 43:d09814c177a0 | 886 | button_lock.mode(PullUp); |
| deldering95 | 43:d09814c177a0 | 887 | button_reposition.mode(PullUp); |
| deldering95 | 43:d09814c177a0 | 888 | button_mute.mode(PullUp); |
| deldering95 | 43:d09814c177a0 | 889 | button_new_patient.mode(PullUp); |
| deldering95 | 43:d09814c177a0 | 890 | |
| deldering95 | 57:fac732476810 | 891 | testpin_sensorplate.fall(&sensorplate_detached); |
| ricardo_95 | 36:d10f368d037b | 892 | button_lock.fall(&trigger_lock); // Interrupt for rising edge lock button. |
| ricardo_95 | 36:d10f368d037b | 893 | button_lock.rise(&end_timer_lock_button); |
| ricardo_95 | 36:d10f368d037b | 894 | button_reposition.fall(&reposition_button_triggered); |
| ricardo_95 | 36:d10f368d037b | 895 | button_reposition.rise(&rise_reposition); |
| ricardo_95 | 36:d10f368d037b | 896 | button_mute.fall(&mute_button_triggered); |
| deldering95 | 51:69087c44e8ac | 897 | button_mute.rise(&rise_mute); |
| ricardo_95 | 36:d10f368d037b | 898 | button_new_patient.fall(&trigger_new_patient); // New patient/calibration button rising event. |
| deldering95 | 43:d09814c177a0 | 899 | button_new_patient.rise(&activate_new_patient_function); // Falling edge for calibration algorithm option. |
| ricardo_95 | 21:13e4824bc364 | 900 | |
| deldering95 | 48:aca02ef5cd01 | 901 | __disable_irq(); |
| deldering95 | 48:aca02ef5cd01 | 902 | while(!pi_active) { |
| deldering95 | 66:88c910cd4d9e | 903 | comet_timer.reset(); |
| deldering95 | 66:88c910cd4d9e | 904 | comet_timer.start(); |
| deldering95 | 66:88c910cd4d9e | 905 | ws.useII(WS2812::PER_PIXEL); |
| deldering95 | 66:88c910cd4d9e | 906 | ws.setII(255); |
| deldering95 | 66:88c910cd4d9e | 907 | tail_step = (255-COMET_TAIL_END_INTENSITY)/TAIL_LENGTH; |
| deldering95 | 66:88c910cd4d9e | 908 | comet++; |
| deldering95 | 66:88c910cd4d9e | 909 | px.SetAll(colourbuf[6]); |
| deldering95 | 66:88c910cd4d9e | 910 | px.Set(comet%ALARMBUF,colourbuf[4]); |
| deldering95 | 66:88c910cd4d9e | 911 | px.SetI(comet%ALARMBUF,255); |
| deldering95 | 66:88c910cd4d9e | 912 | for(int i=1; i<=TAIL_LENGTH; i++) { |
| deldering95 | 66:88c910cd4d9e | 913 | tail=(comet-i); |
| deldering95 | 66:88c910cd4d9e | 914 | if(tail<0)tail=0; |
| deldering95 | 66:88c910cd4d9e | 915 | px.Set(tail%ALARMBUF,colourbuf[4]); |
| deldering95 | 66:88c910cd4d9e | 916 | px.SetI(tail%ALARMBUF,(255-(tail_step*i))); |
| deldering95 | 66:88c910cd4d9e | 917 | } |
| deldering95 | 66:88c910cd4d9e | 918 | colour_code = (colour_code_1 << 1 | colour_code_0); |
| deldering95 | 66:88c910cd4d9e | 919 | if(colour_code != 0b00 && pi_active == false && (comet%ALARMBUF)==(ALARMBUF-1)) { |
| deldering95 | 66:88c910cd4d9e | 920 | pi_active = true; |
| deldering95 | 66:88c910cd4d9e | 921 | } |
| deldering95 | 67:1b300aa30923 | 922 | if(testpin_sensorplate.read()) { |
| deldering95 | 67:1b300aa30923 | 923 | px.Set(6,colourbuf[0]); |
| deldering95 | 67:1b300aa30923 | 924 | px.SetI(6,255); |
| deldering95 | 67:1b300aa30923 | 925 | } |
| deldering95 | 66:88c910cd4d9e | 926 | ws.write_offsets(px.getBuf(),0,0,0); |
| deldering95 | 66:88c910cd4d9e | 927 | while(comet_timer.read_ms()<total_comet_cycle_time_ms) {} |
| deldering95 | 66:88c910cd4d9e | 928 | } |
| deldering95 | 66:88c910cd4d9e | 929 | for(int i=ALARMBUF-1; i>=0; i--) { |
| deldering95 | 66:88c910cd4d9e | 930 | comet_timer.reset(); |
| deldering95 | 66:88c910cd4d9e | 931 | comet_timer.start(); |
| deldering95 | 66:88c910cd4d9e | 932 | for(int j=1; j<=TAIL_LENGTH; j++) { |
| deldering95 | 66:88c910cd4d9e | 933 | tail=(i-j); |
| deldering95 | 66:88c910cd4d9e | 934 | if(tail>=0) { |
| deldering95 | 66:88c910cd4d9e | 935 | px.Set(tail,colourbuf[4]); |
| deldering95 | 66:88c910cd4d9e | 936 | px.SetI(tail,(int(255-(tail_step*j)))); |
| deldering95 | 66:88c910cd4d9e | 937 | } |
| deldering95 | 66:88c910cd4d9e | 938 | } |
| deldering95 | 66:88c910cd4d9e | 939 | px.Set(i,colourbuf[4]); |
| deldering95 | 66:88c910cd4d9e | 940 | px.SetI(i,255); |
| deldering95 | 67:1b300aa30923 | 941 | if(testpin_sensorplate.read()) { |
| deldering95 | 67:1b300aa30923 | 942 | px.Set(6,colourbuf[0]); |
| deldering95 | 67:1b300aa30923 | 943 | px.SetI(6,255); |
| deldering95 | 67:1b300aa30923 | 944 | } |
| deldering95 | 66:88c910cd4d9e | 945 | while(comet_timer.read_ms()<total_comet_cycle_time_ms) {} |
| deldering95 | 66:88c910cd4d9e | 946 | ws.write_offsets(px.getBuf(),0,0,0); |
| deldering95 | 66:88c910cd4d9e | 947 | } |
| ricardo_95 | 19:3b5999fa7b7e | 948 | |
| deldering95 | 51:69087c44e8ac | 949 | __enable_irq(); |
| deldering95 | 66:88c910cd4d9e | 950 | wait(1); |
| deldering95 | 51:69087c44e8ac | 951 | delay_between_button_pressed.reset(); // Delaytimer reset en start. |
| deldering95 | 51:69087c44e8ac | 952 | delay_between_button_pressed.start(); |
| deldering95 | 51:69087c44e8ac | 953 | |
| deldering95 | 66:88c910cd4d9e | 954 | // ws.useII(WS2812::GLOBAL); |
| deldering95 | 51:69087c44e8ac | 955 | reposition_feedback_LED = 0; |
| deldering95 | 51:69087c44e8ac | 956 | new_patient_feedback_LED = 0; |
| deldering95 | 51:69087c44e8ac | 957 | mute_feedback_LED = 0; |
| deldering95 | 51:69087c44e8ac | 958 | usb_serial.printf("Lock State: %d\n",lock_state); |
| deldering95 | 48:aca02ef5cd01 | 959 | lock_feedback_LED = control_LED_intensity; // Lock LED initialization. |
| deldering95 | 51:69087c44e8ac | 960 | |
| DEldering | 0:c0e44c46c573 | 961 | while (1) { |
| Ishy | 42:673ddef4cfa4 | 962 | piezo_electric_sample_timer.reset(); // Clock gebruiken o.i.d.? |
| Ishy | 42:673ddef4cfa4 | 963 | piezo_electric_sample_timer.start(); |
| ricardo_95 | 46:a0e6e088a50a | 964 | connection_test_sensorplate = !testpin_sensorplate && pi_active; |
| deldering95 | 43:d09814c177a0 | 965 | |
| Ishy | 42:673ddef4cfa4 | 966 | if (test_mode == 1) { |
| Ishy | 55:b74e7076d7a0 | 967 | // usb_serial.printf("Connection test sensorplate = %d\n", connection_test_sensorplate); |
| Ishy | 42:673ddef4cfa4 | 968 | } |
| deldering95 | 43:d09814c177a0 | 969 | if (test_mode == 1) { |
| Ishy | 55:b74e7076d7a0 | 970 | // usb_serial.printf("Loop time: %d ms\n",piezo_electric_sample_timer.read_ms()); |
| deldering95 | 43:d09814c177a0 | 971 | } |
| deldering95 | 43:d09814c177a0 | 972 | |
| Ishy | 42:673ddef4cfa4 | 973 | if (connection_test_sensorplate == 1) { |
| deldering95 | 58:8cfa736d8553 | 974 | piezo_electric_array[0] = piezo_electric_adc.readADC_Differential_0_3(); // First PE readout. |
| deldering95 | 58:8cfa736d8553 | 975 | piezo_electric_array[3] = piezo_electric_adc.readADC_Differential_1_3(); // First PE readout. |
| deldering95 | 58:8cfa736d8553 | 976 | |
| deldering95 | 48:aca02ef5cd01 | 977 | for (uint8_t k = 0; k < 4; ++k) { |
| deldering95 | 48:aca02ef5cd01 | 978 | piezo_resistive_array[k] = piezo_resistive_adc1.readADC_SingleEnded(k); // First 4 PR readout. |
| deldering95 | 48:aca02ef5cd01 | 979 | } |
| deldering95 | 43:d09814c177a0 | 980 | if (test_mode == 1) { |
| Ishy | 55:b74e7076d7a0 | 981 | // usb_serial.printf("Loop time: %d ms\n",piezo_electric_sample_timer.read_ms()); |
| deldering95 | 43:d09814c177a0 | 982 | } |
| deldering95 | 58:8cfa736d8553 | 983 | while(piezo_electric_sample_timer.read_us()<(1*(total_readout_cycle_time_us/3))) {} // Wait untill 20% of cycle. Energy efficiency is not fine in this situation, correct if low energy is needed. |
| deldering95 | 58:8cfa736d8553 | 984 | piezo_electric_array[1] = piezo_electric_adc.readADC_Differential_0_3(); // Second PE readout. |
| deldering95 | 58:8cfa736d8553 | 985 | piezo_electric_array[4] = piezo_electric_adc.readADC_Differential_1_3(); // First PE readout. |
| deldering95 | 43:d09814c177a0 | 986 | |
| deldering95 | 48:aca02ef5cd01 | 987 | for (uint8_t k = 0; k < 4; ++k) { |
| deldering95 | 48:aca02ef5cd01 | 988 | piezo_resistive_array[k+4] = piezo_resistive_adc2.readADC_SingleEnded(k); // Last 4 PR readout. |
| deldering95 | 48:aca02ef5cd01 | 989 | } |
| deldering95 | 43:d09814c177a0 | 990 | if (test_mode == 1) { |
| Ishy | 55:b74e7076d7a0 | 991 | // usb_serial.printf("Loop time: %d ms\n",piezo_electric_sample_timer.read_ms()); |
| deldering95 | 43:d09814c177a0 | 992 | } |
| deldering95 | 58:8cfa736d8553 | 993 | while(piezo_electric_sample_timer.read_us()<(2*(total_readout_cycle_time_us/3))) {} // Wait untill 40% of cycle. Energy efficiency is not fine in this situation, correct if low energy is needed. |
| deldering95 | 58:8cfa736d8553 | 994 | piezo_electric_array[2] = piezo_electric_adc.readADC_Differential_0_3(); // Third PE readout. |
| deldering95 | 58:8cfa736d8553 | 995 | piezo_electric_array[5] = piezo_electric_adc.readADC_Differential_1_3(); // First PE readout. |
| deldering95 | 43:d09814c177a0 | 996 | |
| deldering95 | 48:aca02ef5cd01 | 997 | angle_device_sensorplate.getAccelero(accelerometer_sensorplate); // Get accelerometer data. |
| deldering95 | 48:aca02ef5cd01 | 998 | angle = accelerometer_sensorplate[2]*100; |
| deldering95 | 48:aca02ef5cd01 | 999 | if(angle == 0) { |
| deldering95 | 51:69087c44e8ac | 1000 | MPU6050_belt angle_device_sensorplate(PB_9, PB_8); |
| deldering95 | 53:54c882995514 | 1001 | angle_device_sensorplate.getAccelero(accelerometer_sensorplate); |
| deldering95 | 48:aca02ef5cd01 | 1002 | angle = accelerometer_sensorplate[2]*100; |
| deldering95 | 48:aca02ef5cd01 | 1003 | } |
| deldering95 | 53:54c882995514 | 1004 | if((abs(accelerometer_sensorplate[0])+abs(accelerometer_sensorplate[1])+abs(accelerometer_sensorplate[2]))<= 6) { |
| deldering95 | 53:54c882995514 | 1005 | for(uint8_t k = 0; k < 3; ++k) { |
| deldering95 | 53:54c882995514 | 1006 | accelerometer_sensorplate[k]=accelerometer_sensorplate[k]*2; |
| deldering95 | 53:54c882995514 | 1007 | } |
| deldering95 | 53:54c882995514 | 1008 | } |
| deldering95 | 48:aca02ef5cd01 | 1009 | angle_device_sensorplate.getGyro(gyroscope_sensorplate); // Get gyroscope data. |
| deldering95 | 43:d09814c177a0 | 1010 | if (test_mode == 1) { |
| Ishy | 55:b74e7076d7a0 | 1011 | // usb_serial.printf("Loop time: %d ms\n",piezo_electric_sample_timer.read_ms()); |
| deldering95 | 43:d09814c177a0 | 1012 | } |
| deldering95 | 48:aca02ef5cd01 | 1013 | if (test_belt == 1) { |
| deldering95 | 48:aca02ef5cd01 | 1014 | angle_device_reference_belt.getGyro(gyroscope_reference_belt); // Get gyroscope data from Belt. |
| deldering95 | 48:aca02ef5cd01 | 1015 | angle_device_reference_belt.getAccelero(accelerometer_reference_belt); // Get accelerometer data from belt. |
| deldering95 | 48:aca02ef5cd01 | 1016 | } |
| deldering95 | 43:d09814c177a0 | 1017 | |
| deldering95 | 48:aca02ef5cd01 | 1018 | if (connection_test_sensorplate == 1) { |
| deldering95 | 48:aca02ef5cd01 | 1019 | if (test_belt == 0) { // If statement for sending serial information sensorplate data when connection test is active. |
| deldering95 | 48:aca02ef5cd01 | 1020 | pi_serial.printf("?,%f,%f,%f,%f,%f,%f,0,0,0,0,0,0,\n", accelerometer_sensorplate[0], accelerometer_sensorplate[1], accelerometer_sensorplate[2], gyroscope_sensorplate[0], gyroscope_sensorplate[1], gyroscope_sensorplate[2]); |
| deldering95 | 53:54c882995514 | 1021 | } else { |
| deldering95 | 53:54c882995514 | 1022 | // 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. |
| deldering95 | 53:54c882995514 | 1023 | 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]); |
| deldering95 | 48:aca02ef5cd01 | 1024 | } |
| deldering95 | 48:aca02ef5cd01 | 1025 | } // binair print and convert in pi |
| deldering95 | 53:54c882995514 | 1026 | else { |
| deldering95 | 53:54c882995514 | 1027 | pi_serial.printf("?,%f,%f,%f,%f,%f,%f,0,0,0,0,0,0,\n",0,0,0,0,0,0); |
| deldering95 | 53:54c882995514 | 1028 | } |
| Ishy | 42:673ddef4cfa4 | 1029 | } |
| deldering95 | 43:d09814c177a0 | 1030 | if (test_mode == 1) { |
| Ishy | 55:b74e7076d7a0 | 1031 | // usb_serial.printf("Loop time: %d ms\n",piezo_electric_sample_timer.read_ms()); |
| deldering95 | 43:d09814c177a0 | 1032 | } |
| Ishy | 42:673ddef4cfa4 | 1033 | timer_functions(); |
| deldering95 | 43:d09814c177a0 | 1034 | if (test_mode == 1) { |
| Ishy | 55:b74e7076d7a0 | 1035 | // usb_serial.printf("Loop time after timer_functions: %d ms\n",piezo_electric_sample_timer.read_ms()); |
| deldering95 | 43:d09814c177a0 | 1036 | } |
| deldering95 | 43:d09814c177a0 | 1037 | |
| deldering95 | 66:88c910cd4d9e | 1038 | colour_wheel(LED_colour_wheel_percentage); // Function to select colour. |
| deldering95 | 67:1b300aa30923 | 1039 | percentage_tester+=0.2; |
| deldering95 | 67:1b300aa30923 | 1040 | //LED_colour_wheel_percentage=percentage_tester; |
| Ishy | 42:673ddef4cfa4 | 1041 | set_userinterface_LED(); // Set LED's of user interface (LED's above buttons). |
| deldering95 | 43:d09814c177a0 | 1042 | |
| deldering95 | 43:d09814c177a0 | 1043 | if (test_mode == 1) { // If statement for test purposal. |
| Ishy | 55:b74e7076d7a0 | 1044 | // usb_serial.printf("Angle device sensorplate = %d\n",angle_device_sensorplate.testConnection()); |
| Ishy | 42:673ddef4cfa4 | 1045 | } |
| deldering95 | 43:d09814c177a0 | 1046 | |
| Ishy | 42:673ddef4cfa4 | 1047 | if (connection_test_sensorplate == 1) { |
| deldering95 | 58:8cfa736d8553 | 1048 | piezo_electric_array[4] = piezo_electric_adc.readADC_Differential_0_3(); // Fifth PE readout. |
| Ishy | 42:673ddef4cfa4 | 1049 | } |
| deldering95 | 43:d09814c177a0 | 1050 | |
| Ishy | 42:673ddef4cfa4 | 1051 | 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 | 42:673ddef4cfa4 | 1052 | |
| deldering95 | 43:d09814c177a0 | 1053 | if (test_mode == 1) { |
| Ishy | 55:b74e7076d7a0 | 1054 | // usb_serial.printf("Loop time: %d ms\n",piezo_electric_sample_timer.read_ms()); |
| deldering95 | 43:d09814c177a0 | 1055 | } |
| deldering95 | 43:d09814c177a0 | 1056 | |
| deldering95 | 43:d09814c177a0 | 1057 | if (test_mode == 0) { // If statements for test purposal (untill * mark). |
| Ishy | 55:b74e7076d7a0 | 1058 | // usb_serial.printf("Loop time pre serial: %d ms\n",piezo_electric_sample_timer.read_ms()); |
| deldering95 | 43:d09814c177a0 | 1059 | } |
| deldering95 | 66:88c910cd4d9e | 1060 | //serial_read(); // Call function for reading information from PI by serial connection. |
| deldering95 | 43:d09814c177a0 | 1061 | serial_log(); // Call function for logging information to PI by serial connection. |
| deldering95 | 43:d09814c177a0 | 1062 | |
| deldering95 | 43:d09814c177a0 | 1063 | if (test_mode == 0) { // If statements for test purposal (untill * mark). |
| Ishy | 42:673ddef4cfa4 | 1064 | usb_serial.printf("Loop time: %d ms\n",piezo_electric_sample_timer.read_ms()); |
| Ishy | 42:673ddef4cfa4 | 1065 | } |
| deldering95 | 48:aca02ef5cd01 | 1066 | |
| deldering95 | 47:80cfc181f8b3 | 1067 | while(piezo_electric_sample_timer.read_us()<(total_readout_cycle_time_us)) {} // Wait untill 100% of cycle. Energy efficiency is not fine in this situation, correct if low energy is needed. |
| Ishy | 42:673ddef4cfa4 | 1068 | //if (test_pin == 1) { |
| Ishy | 42:673ddef4cfa4 | 1069 | // test_mode = 1; |
| Ishy | 42:673ddef4cfa4 | 1070 | // usb_serial.printf("%d\n",test_mode); |
| Ishy | 42:673ddef4cfa4 | 1071 | // } |
| Ishy | 42:673ddef4cfa4 | 1072 | // if (test_pin == 0) { |
| Ishy | 42:673ddef4cfa4 | 1073 | // test_mode = 0; |
| Ishy | 42:673ddef4cfa4 | 1074 | // usb_serial.printf("%d\n",test_mode); |
| Ishy | 42:673ddef4cfa4 | 1075 | // } |
| DEldering | 0:c0e44c46c573 | 1076 | } |
| ricardo_95 | 12:7b3a5940f911 | 1077 | } |
