valve measurement board

Dependencies:   mbed ads1115_test SDFileSystem

Committer:
Yamasaki Taro
Date:
Mon Mar 08 23:30:39 2021 +0900
Branch:
UplinkEnabled
Revision:
45:7e9d6dc429e4
Parent:
44:3be8f867063e
Child:
46:64cd35651ce0
Rename var message into more trivial

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tanahashi 0:cb9da8306a40 1 #include "mbed.h"
Yamasaki Taro 1:655abe8ab309 2
tanahashi 0:cb9da8306a40 3 #include "SDFileSystem.h"
tanahashi 0:cb9da8306a40 4
tanahashi 0:cb9da8306a40 5 #include "Adafruit_ADS1015.h"
tanahashi 0:cb9da8306a40 6
tanahashi 0:cb9da8306a40 7 #define ADS1115_ADDR 0b1001000
tanahashi 0:cb9da8306a40 8
tanahashi 0:cb9da8306a40 9 #define TEMP_LSB 0.0625f
tanahashi 0:cb9da8306a40 10
Yamasaki Taro 10:de2a9468b344 11 Serial pc(USBTX, USBRX, 115200);
Yamasaki Taro 34:8162968f404f 12
Yamasaki Taro 2:824e174ef9ea 13 Serial wireless(p28,p27);
tanahashi 0:cb9da8306a40 14
tanahashi 0:cb9da8306a40 15 I2C i2c(p9, p10);
tanahashi 0:cb9da8306a40 16
tanahashi 0:cb9da8306a40 17 Adafruit_ADS1115 ads1115(&i2c, ADS1115_ADDR);
tanahashi 0:cb9da8306a40 18
tanahashi 0:cb9da8306a40 19 SDFileSystem sd(p5, p6, p7, p8, "sd");
tanahashi 0:cb9da8306a40 20
tanahashi 0:cb9da8306a40 21 SPI TempK(p5, p6, p7);
tanahashi 0:cb9da8306a40 22
Yamasaki Taro 12:8a4212e2642a 23 const int Threshold = 114514;//この値は適当。よく考えて決めること!!
Yamasaki Taro 12:8a4212e2642a 24
Yamasaki Taro 30:cf909d4c6710 25 DigitalInOut valve_controler1(p18, PIN_OUTPUT, OpenDrain, 0);
Yamasaki Taro 30:cf909d4c6710 26 DigitalInOut valve_controler2(p19, PIN_OUTPUT, OpenDrain, 0);
Yamasaki Taro 12:8a4212e2642a 27
tanahashi 0:cb9da8306a40 28 DigitalOut led1(LED1);
tanahashi 0:cb9da8306a40 29
tanahashi 0:cb9da8306a40 30 DigitalOut ss1(p19);
tanahashi 0:cb9da8306a40 31 DigitalOut ss2(p20);
tanahashi 0:cb9da8306a40 32
tanahashi 0:cb9da8306a40 33 Timer timer;
tanahashi 0:cb9da8306a40 34 Timer sd_timer;
tanahashi 0:cb9da8306a40 35
tanahashi 0:cb9da8306a40 36 FILE *fp;
tanahashi 0:cb9da8306a40 37
tanahashi 0:cb9da8306a40 38 char file_name[64];
tanahashi 0:cb9da8306a40 39
tanahashi 0:cb9da8306a40 40 int press_bit1, press_bit2;
tanahashi 0:cb9da8306a40 41 float temp1, temp2;
tanahashi 0:cb9da8306a40 42
Yamasaki Taro 17:528afcef65e8 43 bool ConfigFlag = false; // for debug
Yamasaki Taro 17:528afcef65e8 44
Yamasaki Taro 35:c6457c5ce996 45 bool APLFlug = true; // for valve controler
Yamasaki Taro 35:c6457c5ce996 46
Yamasaki Taro 43:09551ed0f46b 47 void ValveOC(); // Wireless interruption(fake) for open/close valve
Yamasaki Taro 36:a2eadc00dbf8 48
tanahashi 0:cb9da8306a40 49 int main()
tanahashi 0:cb9da8306a40 50 {
Yamasaki Taro 25:389d96280bcf 51 timer.start();
Yamasaki Taro 25:389d96280bcf 52 wireless.baud(115200);
Yamasaki Taro 1:655abe8ab309 53
Yamasaki Taro 25:389d96280bcf 54 uint16_t data[2];
Yamasaki Taro 25:389d96280bcf 55 ads1115.setGain(GAIN_TWOTHIRDS);
Yamasaki Taro 25:389d96280bcf 56 TempK.format(16, 0);
Yamasaki Taro 25:389d96280bcf 57 TempK.frequency(5000000);
tanahashi 0:cb9da8306a40 58
Yamasaki Taro 25:389d96280bcf 59 char file_name_format[] = "/sd/IZU2020_VALVE_MEASUREMENT_%d.dat";
Yamasaki Taro 25:389d96280bcf 60 int file_number = 1;
Yamasaki Taro 25:389d96280bcf 61 while(1) {
Yamasaki Taro 25:389d96280bcf 62 sprintf(file_name, file_name_format, file_number);
Yamasaki Taro 25:389d96280bcf 63 fp = fopen(file_name, "r");
Yamasaki Taro 25:389d96280bcf 64 if(fp != NULL) {
Yamasaki Taro 25:389d96280bcf 65 fclose(fp);
Yamasaki Taro 25:389d96280bcf 66 file_number++;
Yamasaki Taro 25:389d96280bcf 67 } else {
Yamasaki Taro 25:389d96280bcf 68 sprintf(file_name, file_name_format, file_number);
Yamasaki Taro 25:389d96280bcf 69 break;
Yamasaki Taro 25:389d96280bcf 70 }
Yamasaki Taro 25:389d96280bcf 71 }
Yamasaki Taro 25:389d96280bcf 72 fp = fopen(file_name, "w");
Yamasaki Taro 25:389d96280bcf 73 sd_timer.start();
tanahashi 0:cb9da8306a40 74
Yamasaki Taro 25:389d96280bcf 75 int dt = 0;
Yamasaki Taro 25:389d96280bcf 76 while(1) {
tanahashi 0:cb9da8306a40 77
Yamasaki Taro 25:389d96280bcf 78 press_bit1 = ads1115.readADC_SingleEnded(1);
Yamasaki Taro 25:389d96280bcf 79 press_bit2 = ads1115.readADC_SingleEnded(3);
tanahashi 0:cb9da8306a40 80
Yamasaki Taro 25:389d96280bcf 81 ss1 = 0;
Yamasaki Taro 25:389d96280bcf 82 data[0] = TempK.write(0x00);
Yamasaki Taro 25:389d96280bcf 83 data[1] = TempK.write(0x00);
Yamasaki Taro 25:389d96280bcf 84 ss1 = 1;
Yamasaki Taro 25:389d96280bcf 85 data[0] &= 0xfffc;
Yamasaki Taro 25:389d96280bcf 86 temp1 = (float)((int16_t)data[0]) * TEMP_LSB;
tanahashi 0:cb9da8306a40 87
Yamasaki Taro 25:389d96280bcf 88 ss2 = 0;
Yamasaki Taro 25:389d96280bcf 89 data[0] = TempK.write(0x00);
Yamasaki Taro 25:389d96280bcf 90 data[1] = TempK.write(0x00);
Yamasaki Taro 25:389d96280bcf 91 ss2 = 1;
Yamasaki Taro 25:389d96280bcf 92 data[0] &= 0xfffc;
Yamasaki Taro 25:389d96280bcf 93 temp2 = (float)((int16_t)data[0]) * TEMP_LSB;
Yamasaki Taro 25:389d96280bcf 94
Yamasaki Taro 25:389d96280bcf 95 // Debug and Config section-----------------------------------------------------------------
Yamasaki Taro 38:67754c11cf6f 96 if (pc.readable() > 0)
Yamasaki Taro 38:67754c11cf6f 97 {
Yamasaki Taro 25:389d96280bcf 98 wireless.putc(pc.getc());
Yamasaki Taro 38:67754c11cf6f 99 if(!ConfigFlag)
Yamasaki Taro 38:67754c11cf6f 100 {
Yamasaki Taro 33:427d1bcfea60 101 ConfigFlag = true;
Yamasaki Taro 33:427d1bcfea60 102 }
Yamasaki Taro 25:389d96280bcf 103 }
Yamasaki Taro 38:67754c11cf6f 104 if(ConfigFlag)
Yamasaki Taro 38:67754c11cf6f 105 {
Yamasaki Taro 38:67754c11cf6f 106 while (wireless.readable() > 0)
Yamasaki Taro 38:67754c11cf6f 107 {
Yamasaki Taro 31:22dcdffbe5c2 108 pc.putc(wireless.getc());
Yamasaki Taro 31:22dcdffbe5c2 109 }
Yamasaki Taro 25:389d96280bcf 110 continue;
Yamasaki Taro 13:19fb33032ebb 111 }
Yamasaki Taro 13:19fb33032ebb 112 // -----------------------------------------------------------------------------------------
Yamasaki Taro 25:389d96280bcf 113
Yamasaki Taro 25:389d96280bcf 114 int time = timer.read_ms();
Yamasaki Taro 38:67754c11cf6f 115 if(time - dt >= 100)
Yamasaki Taro 38:67754c11cf6f 116 {
Yamasaki Taro 25:389d96280bcf 117 // Debug and Config section-----------------------------------------------------------------
Yamasaki Taro 38:67754c11cf6f 118 if (pc.readable() == 0 && wireless.readable() == 0)
Yamasaki Taro 38:67754c11cf6f 119 {
Yamasaki Taro 25:389d96280bcf 120 pc.printf("%d\t%d\t%d\t%f\t%f\r\n", timer.read_ms(), press_bit1, press_bit2, temp1, temp2);
Yamasaki Taro 25:389d96280bcf 121 }
Yamasaki Taro 25:389d96280bcf 122 // -----------------------------------------------------------------------------------------
Yamasaki Taro 25:389d96280bcf 123
Yamasaki Taro 41:27ebbf39de28 124 wireless.printf("Tank Pressure is %d now.\r\n\r\n", press_bit1);
Yamasaki Taro 25:389d96280bcf 125 dt = time;
Yamasaki Taro 25:389d96280bcf 126 }
Yamasaki Taro 35:c6457c5ce996 127 //valvcontroler auto pressure limitation----------------------------------------------------
Yamasaki Taro 42:51976ccf669d 128 if(wireless.readable() > 0)
Yamasaki Taro 42:51976ccf669d 129 {
Yamasaki Taro 44:3be8f867063e 130 // This support only single lettar.
Yamasaki Taro 45:7e9d6dc429e4 131 char up_msg = wireless.getc();
Yamasaki Taro 44:3be8f867063e 132
Yamasaki Taro 45:7e9d6dc429e4 133 if (up_msg == 'o') //open
Yamasaki Taro 44:3be8f867063e 134 {
Yamasaki Taro 44:3be8f867063e 135 valve_controler1 = 1;
Yamasaki Taro 44:3be8f867063e 136 valve_controler2 = 1;
Yamasaki Taro 44:3be8f867063e 137 APLFlug = false;
Yamasaki Taro 44:3be8f867063e 138 }
Yamasaki Taro 45:7e9d6dc429e4 139 else if (up_msg == 'c') //close
Yamasaki Taro 44:3be8f867063e 140 {
Yamasaki Taro 44:3be8f867063e 141 valve_controler1 = 0;
Yamasaki Taro 44:3be8f867063e 142 valve_controler2 = 0;
Yamasaki Taro 44:3be8f867063e 143 APLFlug = false;
Yamasaki Taro 44:3be8f867063e 144 }
Yamasaki Taro 44:3be8f867063e 145 else
Yamasaki Taro 44:3be8f867063e 146 {
Yamasaki Taro 44:3be8f867063e 147 if (!(// These must be just responses.
Yamasaki Taro 45:7e9d6dc429e4 148 up_msg == 'O'
Yamasaki Taro 45:7e9d6dc429e4 149 || up_msg == 'K'
Yamasaki Taro 45:7e9d6dc429e4 150 || up_msg == 'N'
Yamasaki Taro 45:7e9d6dc429e4 151 || up_msg == 'G'
Yamasaki Taro 45:7e9d6dc429e4 152 || up_msg == ' '
Yamasaki Taro 45:7e9d6dc429e4 153 || up_msg == '0'
Yamasaki Taro 45:7e9d6dc429e4 154 || up_msg == '1'
Yamasaki Taro 45:7e9d6dc429e4 155 || up_msg == '2'
Yamasaki Taro 45:7e9d6dc429e4 156 || up_msg == '3'
Yamasaki Taro 45:7e9d6dc429e4 157 || up_msg == '4'
Yamasaki Taro 45:7e9d6dc429e4 158 || up_msg == '5'
Yamasaki Taro 45:7e9d6dc429e4 159 || up_msg == '6'
Yamasaki Taro 45:7e9d6dc429e4 160 || up_msg == '7'
Yamasaki Taro 45:7e9d6dc429e4 161 || up_msg == '8'
Yamasaki Taro 45:7e9d6dc429e4 162 || up_msg == '9'
Yamasaki Taro 44:3be8f867063e 163 )){
Yamasaki Taro 44:3be8f867063e 164 wireless.printf("You send invaild command.\r\n\r\n");
Yamasaki Taro 44:3be8f867063e 165 }
Yamasaki Taro 44:3be8f867063e 166 }
Yamasaki Taro 42:51976ccf669d 167 }
Yamasaki Taro 38:67754c11cf6f 168 if(APLFlug)
Yamasaki Taro 38:67754c11cf6f 169 {
Yamasaki Taro 38:67754c11cf6f 170 if(press_bit1 > Threshold)
Yamasaki Taro 38:67754c11cf6f 171 {
Yamasaki Taro 35:c6457c5ce996 172 valve_controler1 = 1;
Yamasaki Taro 35:c6457c5ce996 173 valve_controler2 = 1;
Yamasaki Taro 35:c6457c5ce996 174 }
Yamasaki Taro 35:c6457c5ce996 175 else{
Yamasaki Taro 35:c6457c5ce996 176 valve_controler1 = 0;
Yamasaki Taro 35:c6457c5ce996 177 valve_controler2 = 0;
Yamasaki Taro 35:c6457c5ce996 178 }
Yamasaki Taro 29:30fdcbbbe79a 179 }
Yamasaki Taro 38:67754c11cf6f 180 else if(!APLFlug)
Yamasaki Taro 38:67754c11cf6f 181 {
Yamasaki Taro 41:27ebbf39de28 182 wireless.printf("Auto Pressure Limitation is Disabled.\r\n\r\n");
Yamasaki Taro 37:69eaa67338a9 183 }
Yamasaki Taro 31:22dcdffbe5c2 184 //------------------------------------------------------------------------------------------
Yamasaki Taro 25:389d96280bcf 185 fprintf(fp, "%d\t%d\t%d\t%f\t%f\r\n", time, press_bit1, press_bit2, temp1, temp2);
Yamasaki Taro 25:389d96280bcf 186
Yamasaki Taro 25:389d96280bcf 187 if(sd_timer.read_ms() > 20*1000) {
Yamasaki Taro 25:389d96280bcf 188 if(fp) {
Yamasaki Taro 25:389d96280bcf 189 fclose(fp);
Yamasaki Taro 25:389d96280bcf 190 fp = fopen(file_name, "a");
Yamasaki Taro 25:389d96280bcf 191 }
Yamasaki Taro 25:389d96280bcf 192 }
Yamasaki Taro 4:83855f14a087 193 }
Yamasaki Taro 1:655abe8ab309 194 }
Yamasaki Taro 43:09551ed0f46b 195 // If you feel this ugly, please refactor THIS !!.