jaewook shin
/
SCHMME_NIBP
SCH MME NIBP ref. code
main.cpp@0:8edd7b830280, 2020-11-09 (annotated)
- Committer:
- schmme
- Date:
- Mon Nov 09 00:33:42 2020 +0000
- Revision:
- 0:8edd7b830280
- Child:
- 1:63bc0088a8ed
SCH MME NIBP ref. code
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
schmme | 0:8edd7b830280 | 1 | /* mbed Microcontroller Library |
schmme | 0:8edd7b830280 | 2 | * Copyright (c) 2019 ARM Limited |
schmme | 0:8edd7b830280 | 3 | * SPDX-License-Identifier: Apache-2.0 |
schmme | 0:8edd7b830280 | 4 | */ |
schmme | 0:8edd7b830280 | 5 | |
schmme | 0:8edd7b830280 | 6 | #include "mbed.h" |
schmme | 0:8edd7b830280 | 7 | #include "platform/mbed_thread.h" |
schmme | 0:8edd7b830280 | 8 | #include "Adafruit_SSD1306.h" |
schmme | 0:8edd7b830280 | 9 | #include "ADS1115.h" |
schmme | 0:8edd7b830280 | 10 | |
schmme | 0:8edd7b830280 | 11 | |
schmme | 0:8edd7b830280 | 12 | #define BLINKING_RATE_MS 3000 |
schmme | 0:8edd7b830280 | 13 | |
schmme | 0:8edd7b830280 | 14 | #define MAX_P 180 |
schmme | 0:8edd7b830280 | 15 | #define MIN_P 50 |
schmme | 0:8edd7b830280 | 16 | |
schmme | 0:8edd7b830280 | 17 | |
schmme | 0:8edd7b830280 | 18 | //ADC |
schmme | 0:8edd7b830280 | 19 | I2C i2c_ADC(D12, A6); |
schmme | 0:8edd7b830280 | 20 | InterruptIn ADC_rdy(D9); |
schmme | 0:8edd7b830280 | 21 | char adc_flg; |
schmme | 0:8edd7b830280 | 22 | |
schmme | 0:8edd7b830280 | 23 | //OLED |
schmme | 0:8edd7b830280 | 24 | I2C i2c_oled(D4, D5); |
schmme | 0:8edd7b830280 | 25 | Adafruit_SSD1306_I2c myOled(i2c_oled,A1,0x78,64,128); |
schmme | 0:8edd7b830280 | 26 | |
schmme | 0:8edd7b830280 | 27 | //UART |
schmme | 0:8edd7b830280 | 28 | Serial pc(USBTX, USBRX, 115200); |
schmme | 0:8edd7b830280 | 29 | |
schmme | 0:8edd7b830280 | 30 | //MOTOR |
schmme | 0:8edd7b830280 | 31 | DigitalOut motor_in1(D10); |
schmme | 0:8edd7b830280 | 32 | DigitalOut motor_in2(D2); |
schmme | 0:8edd7b830280 | 33 | |
schmme | 0:8edd7b830280 | 34 | //VALVE |
schmme | 0:8edd7b830280 | 35 | PwmOut valve_in1(D3); |
schmme | 0:8edd7b830280 | 36 | DigitalOut valve_in2(D6); |
schmme | 0:8edd7b830280 | 37 | |
schmme | 0:8edd7b830280 | 38 | //state |
schmme | 0:8edd7b830280 | 39 | int state; |
schmme | 0:8edd7b830280 | 40 | |
schmme | 0:8edd7b830280 | 41 | void OLED_TEST2(double x); |
schmme | 0:8edd7b830280 | 42 | void adc_flip(); |
schmme | 0:8edd7b830280 | 43 | double ADC_func(); |
schmme | 0:8edd7b830280 | 44 | void MOTOR_On(void); |
schmme | 0:8edd7b830280 | 45 | void MOTOR_Off(void); |
schmme | 0:8edd7b830280 | 46 | void VALVE_On(void); |
schmme | 0:8edd7b830280 | 47 | void VALVE_Off(void); |
schmme | 0:8edd7b830280 | 48 | void VALVE_pwm(void); |
schmme | 0:8edd7b830280 | 49 | |
schmme | 0:8edd7b830280 | 50 | int main() |
schmme | 0:8edd7b830280 | 51 | { |
schmme | 0:8edd7b830280 | 52 | double data=0; |
schmme | 0:8edd7b830280 | 53 | // Initialise the digital pin LED1 as an output |
schmme | 0:8edd7b830280 | 54 | DigitalOut led(LED1); |
schmme | 0:8edd7b830280 | 55 | |
schmme | 0:8edd7b830280 | 56 | //ADS Init |
schmme | 0:8edd7b830280 | 57 | ADS1115_Init(&i2c_ADC, ADS1115_ADDRESS); |
schmme | 0:8edd7b830280 | 58 | ADS1115_setConti_ADC_SingleEnded(0); |
schmme | 0:8edd7b830280 | 59 | |
schmme | 0:8edd7b830280 | 60 | adc_flg = 0; |
schmme | 0:8edd7b830280 | 61 | ADC_rdy.mode(PullUp); |
schmme | 0:8edd7b830280 | 62 | ADC_rdy.fall(&adc_flip); |
schmme | 0:8edd7b830280 | 63 | |
schmme | 0:8edd7b830280 | 64 | //OLED |
schmme | 0:8edd7b830280 | 65 | myOled.clearDisplay(); |
schmme | 0:8edd7b830280 | 66 | myOled.setTextCursor(0,0); |
schmme | 0:8edd7b830280 | 67 | myOled.printf("NIBP Start...\r\n"); |
schmme | 0:8edd7b830280 | 68 | myOled.display(); |
schmme | 0:8edd7b830280 | 69 | |
schmme | 0:8edd7b830280 | 70 | //Motor & Valve init |
schmme | 0:8edd7b830280 | 71 | MOTOR_Off(); |
schmme | 0:8edd7b830280 | 72 | VALVE_Off(); |
schmme | 0:8edd7b830280 | 73 | |
schmme | 0:8edd7b830280 | 74 | state = 0; |
schmme | 0:8edd7b830280 | 75 | |
schmme | 0:8edd7b830280 | 76 | while (true) { |
schmme | 0:8edd7b830280 | 77 | led = !led; |
schmme | 0:8edd7b830280 | 78 | if (adc_flg == 1) data = ADC_func(); |
schmme | 0:8edd7b830280 | 79 | //OLED_TEST2(data); |
schmme | 0:8edd7b830280 | 80 | } |
schmme | 0:8edd7b830280 | 81 | } |
schmme | 0:8edd7b830280 | 82 | |
schmme | 0:8edd7b830280 | 83 | |
schmme | 0:8edd7b830280 | 84 | void OLED_TEST2(double x) |
schmme | 0:8edd7b830280 | 85 | { |
schmme | 0:8edd7b830280 | 86 | myOled.clearDisplay(); |
schmme | 0:8edd7b830280 | 87 | myOled.setTextCursor(0,0); |
schmme | 0:8edd7b830280 | 88 | myOled.printf("map : %f\r\n", x); |
schmme | 0:8edd7b830280 | 89 | myOled.display(); |
schmme | 0:8edd7b830280 | 90 | } |
schmme | 0:8edd7b830280 | 91 | |
schmme | 0:8edd7b830280 | 92 | |
schmme | 0:8edd7b830280 | 93 | void adc_flip() |
schmme | 0:8edd7b830280 | 94 | { |
schmme | 0:8edd7b830280 | 95 | adc_flg = 1; |
schmme | 0:8edd7b830280 | 96 | } |
schmme | 0:8edd7b830280 | 97 | |
schmme | 0:8edd7b830280 | 98 | double ADC_func() |
schmme | 0:8edd7b830280 | 99 | { |
schmme | 0:8edd7b830280 | 100 | int adc_data; |
schmme | 0:8edd7b830280 | 101 | double volt; |
schmme | 0:8edd7b830280 | 102 | double pressure; |
schmme | 0:8edd7b830280 | 103 | static double mcp=0; |
schmme | 0:8edd7b830280 | 104 | |
schmme | 0:8edd7b830280 | 105 | adc_flg = 0; |
schmme | 0:8edd7b830280 | 106 | adc_data = ADS1115_getConti_ADC_SingleEnded(); |
schmme | 0:8edd7b830280 | 107 | volt = (double)adc_data*1875/10000000; |
schmme | 0:8edd7b830280 | 108 | pressure = (volt-0.5)*10*7.50062; |
schmme | 0:8edd7b830280 | 109 | |
schmme | 0:8edd7b830280 | 110 | mcp = 0.9*mcp + 0.1*pressure; |
schmme | 0:8edd7b830280 | 111 | |
schmme | 0:8edd7b830280 | 112 | //pc.printf("%d, %f, %f\n", adc_data, volt, pressure); // print reading |
schmme | 0:8edd7b830280 | 113 | |
schmme | 0:8edd7b830280 | 114 | if (state == 1) |
schmme | 0:8edd7b830280 | 115 | pc.printf("%f,%f,%f,%f\n", adc_data, volt, pressure, mcp); |
schmme | 0:8edd7b830280 | 116 | if(state == 0){ |
schmme | 0:8edd7b830280 | 117 | if(mcp < MAX_P){ |
schmme | 0:8edd7b830280 | 118 | VALVE_On(); |
schmme | 0:8edd7b830280 | 119 | MOTOR_On(); |
schmme | 0:8edd7b830280 | 120 | } |
schmme | 0:8edd7b830280 | 121 | else{ |
schmme | 0:8edd7b830280 | 122 | MOTOR_Off(); |
schmme | 0:8edd7b830280 | 123 | VALVE_pwm(); |
schmme | 0:8edd7b830280 | 124 | state = 1; |
schmme | 0:8edd7b830280 | 125 | } |
schmme | 0:8edd7b830280 | 126 | } |
schmme | 0:8edd7b830280 | 127 | else if(state == 1){ |
schmme | 0:8edd7b830280 | 128 | if(mcp < MIN_P){ |
schmme | 0:8edd7b830280 | 129 | state = 2; |
schmme | 0:8edd7b830280 | 130 | VALVE_Off(); |
schmme | 0:8edd7b830280 | 131 | myOled.printf("END\r\n"); |
schmme | 0:8edd7b830280 | 132 | myOled.display(); |
schmme | 0:8edd7b830280 | 133 | } |
schmme | 0:8edd7b830280 | 134 | } |
schmme | 0:8edd7b830280 | 135 | return mcp; |
schmme | 0:8edd7b830280 | 136 | } |
schmme | 0:8edd7b830280 | 137 | |
schmme | 0:8edd7b830280 | 138 | void MOTOR_On(void) |
schmme | 0:8edd7b830280 | 139 | { |
schmme | 0:8edd7b830280 | 140 | motor_in1 = 1; |
schmme | 0:8edd7b830280 | 141 | motor_in2 = 0; |
schmme | 0:8edd7b830280 | 142 | } |
schmme | 0:8edd7b830280 | 143 | void MOTOR_Off(void) |
schmme | 0:8edd7b830280 | 144 | { |
schmme | 0:8edd7b830280 | 145 | motor_in1 = 0; |
schmme | 0:8edd7b830280 | 146 | motor_in2 = 0; |
schmme | 0:8edd7b830280 | 147 | } |
schmme | 0:8edd7b830280 | 148 | |
schmme | 0:8edd7b830280 | 149 | void VALVE_On(void) |
schmme | 0:8edd7b830280 | 150 | { |
schmme | 0:8edd7b830280 | 151 | valve_in1 = 1; |
schmme | 0:8edd7b830280 | 152 | valve_in2 = 0; |
schmme | 0:8edd7b830280 | 153 | } |
schmme | 0:8edd7b830280 | 154 | |
schmme | 0:8edd7b830280 | 155 | void VALVE_Off(void) |
schmme | 0:8edd7b830280 | 156 | { |
schmme | 0:8edd7b830280 | 157 | valve_in1 = 0; |
schmme | 0:8edd7b830280 | 158 | valve_in2 = 0; |
schmme | 0:8edd7b830280 | 159 | } |
schmme | 0:8edd7b830280 | 160 | |
schmme | 0:8edd7b830280 | 161 | void VALVE_pwm(void) |
schmme | 0:8edd7b830280 | 162 | { |
schmme | 0:8edd7b830280 | 163 | valve_in1.period(0.001f); |
schmme | 0:8edd7b830280 | 164 | valve_in1.write(0.6f); |
schmme | 0:8edd7b830280 | 165 | valve_in2 = 0; |
schmme | 0:8edd7b830280 | 166 | } |