SCH MME NIBP ref. code

Dependencies:   Adafruit_GFX

Committer:
schmme
Date:
Mon Nov 09 04:48:47 2020 +0000
Revision:
1:63bc0088a8ed
Parent:
0:8edd7b830280
adc_data conversion to decimal

Who changed what in which revision?

UserRevisionLine numberNew 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 1:63bc0088a8ed 115 pc.printf("%d,%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 }