valve measurement board

Dependencies:   mbed ads1115_test SDFileSystem

Committer:
Yamasaki Taro
Date:
Mon Mar 15 20:42:38 2021 +0900
Branch:
UplinkEnabled
Revision:
60:9375c061be43
Parent:
59:ed37d5b8d18a
Reduce frecency of telemetry

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
Yamasaki Taro 56:22e90ccd6a4a 21 const int Threshold = 3580;
Yamasaki Taro 12:8a4212e2642a 22
Yamasaki Taro 30:cf909d4c6710 23 DigitalInOut valve_controler1(p18, PIN_OUTPUT, OpenDrain, 0);
Yamasaki Taro 30:cf909d4c6710 24 DigitalInOut valve_controler2(p19, PIN_OUTPUT, OpenDrain, 0);
Yamasaki Taro 12:8a4212e2642a 25
Yamasaki Taro 50:c9f29b839c32 26 bool IsValveOpened = false;
Yamasaki Taro 50:c9f29b839c32 27
Yamasaki Taro 53:860d4d4742a9 28 bool APLFlug = true;
Yamasaki Taro 53:860d4d4742a9 29
tanahashi 0:cb9da8306a40 30 DigitalOut led1(LED1);
tanahashi 0:cb9da8306a40 31
tanahashi 0:cb9da8306a40 32 Timer timer;
tanahashi 0:cb9da8306a40 33 Timer sd_timer;
tanahashi 0:cb9da8306a40 34
tanahashi 0:cb9da8306a40 35 FILE *fp;
tanahashi 0:cb9da8306a40 36
tanahashi 0:cb9da8306a40 37 char file_name[64];
tanahashi 0:cb9da8306a40 38
tanahashi 0:cb9da8306a40 39 int press_bit1, press_bit2;
tanahashi 0:cb9da8306a40 40
Yamasaki Taro 53:860d4d4742a9 41 bool ConfigFlag = false;
Yamasaki Taro 35:c6457c5ce996 42
Yamasaki Taro 50:c9f29b839c32 43 void ValveOpen()
Yamasaki Taro 50:c9f29b839c32 44 {
Yamasaki Taro 50:c9f29b839c32 45 valve_controler1 = 1;
Yamasaki Taro 50:c9f29b839c32 46 valve_controler2 = 1;
Yamasaki Taro 50:c9f29b839c32 47 IsValveOpened = true;
Yamasaki Taro 50:c9f29b839c32 48 }
Yamasaki Taro 50:c9f29b839c32 49
Yamasaki Taro 50:c9f29b839c32 50 void ValveClose()
Yamasaki Taro 50:c9f29b839c32 51 {
Yamasaki Taro 50:c9f29b839c32 52 valve_controler1 = 0;
Yamasaki Taro 50:c9f29b839c32 53 valve_controler2 = 0;
Yamasaki Taro 50:c9f29b839c32 54 IsValveOpened = false;
Yamasaki Taro 50:c9f29b839c32 55 }
Yamasaki Taro 36:a2eadc00dbf8 56
tanahashi 0:cb9da8306a40 57 int main()
tanahashi 0:cb9da8306a40 58 {
Yamasaki Taro 25:389d96280bcf 59 timer.start();
Yamasaki Taro 25:389d96280bcf 60 wireless.baud(115200);
Yamasaki Taro 1:655abe8ab309 61
Yamasaki Taro 25:389d96280bcf 62 uint16_t data[2];
Yamasaki Taro 25:389d96280bcf 63 ads1115.setGain(GAIN_TWOTHIRDS);
tanahashi 0:cb9da8306a40 64
Yamasaki Taro 55:bd298541ae8b 65 char file_name_format[] = "/sd/IZU2021_VALVE_MEASUREMENT_%d.dat";
Yamasaki Taro 25:389d96280bcf 66 int file_number = 1;
Yamasaki Taro 25:389d96280bcf 67 while(1) {
Yamasaki Taro 25:389d96280bcf 68 sprintf(file_name, file_name_format, file_number);
Yamasaki Taro 25:389d96280bcf 69 fp = fopen(file_name, "r");
Yamasaki Taro 25:389d96280bcf 70 if(fp != NULL) {
Yamasaki Taro 25:389d96280bcf 71 fclose(fp);
Yamasaki Taro 25:389d96280bcf 72 file_number++;
Yamasaki Taro 25:389d96280bcf 73 } else {
Yamasaki Taro 25:389d96280bcf 74 sprintf(file_name, file_name_format, file_number);
Yamasaki Taro 25:389d96280bcf 75 break;
Yamasaki Taro 25:389d96280bcf 76 }
Yamasaki Taro 25:389d96280bcf 77 }
Yamasaki Taro 25:389d96280bcf 78 fp = fopen(file_name, "w");
Yamasaki Taro 25:389d96280bcf 79 sd_timer.start();
tanahashi 0:cb9da8306a40 80
Yamasaki Taro 25:389d96280bcf 81 int dt = 0;
Yamasaki Taro 25:389d96280bcf 82 while(1) {
tanahashi 0:cb9da8306a40 83
Yamasaki Taro 25:389d96280bcf 84 press_bit1 = ads1115.readADC_SingleEnded(1);
Yamasaki Taro 25:389d96280bcf 85 press_bit2 = ads1115.readADC_SingleEnded(3);
tanahashi 0:cb9da8306a40 86
Yamasaki Taro 25:389d96280bcf 87 // Debug and Config section-----------------------------------------------------------------
Yamasaki Taro 38:67754c11cf6f 88 if (pc.readable() > 0)
Yamasaki Taro 38:67754c11cf6f 89 {
Yamasaki Taro 25:389d96280bcf 90 wireless.putc(pc.getc());
Yamasaki Taro 38:67754c11cf6f 91 if(!ConfigFlag)
Yamasaki Taro 38:67754c11cf6f 92 {
Yamasaki Taro 33:427d1bcfea60 93 ConfigFlag = true;
Yamasaki Taro 33:427d1bcfea60 94 }
Yamasaki Taro 25:389d96280bcf 95 }
Yamasaki Taro 38:67754c11cf6f 96 if(ConfigFlag)
Yamasaki Taro 38:67754c11cf6f 97 {
Yamasaki Taro 38:67754c11cf6f 98 while (wireless.readable() > 0)
Yamasaki Taro 38:67754c11cf6f 99 {
Yamasaki Taro 31:22dcdffbe5c2 100 pc.putc(wireless.getc());
Yamasaki Taro 31:22dcdffbe5c2 101 }
Yamasaki Taro 25:389d96280bcf 102 continue;
Yamasaki Taro 13:19fb33032ebb 103 }
Yamasaki Taro 13:19fb33032ebb 104 // -----------------------------------------------------------------------------------------
Yamasaki Taro 25:389d96280bcf 105
Yamasaki Taro 25:389d96280bcf 106 int time = timer.read_ms();
Yamasaki Taro 60:9375c061be43 107 if(time - dt >= 5000)
Yamasaki Taro 38:67754c11cf6f 108 {
Yamasaki Taro 25:389d96280bcf 109 // Debug and Config section-----------------------------------------------------------------
Yamasaki Taro 38:67754c11cf6f 110 if (pc.readable() == 0 && wireless.readable() == 0)
Yamasaki Taro 38:67754c11cf6f 111 {
Yamasaki Taro 58:582b730cb591 112 pc.printf("%d\t%d\t%d\r\n", timer.read_ms(), press_bit1, press_bit2);
Yamasaki Taro 25:389d96280bcf 113 }
Yamasaki Taro 25:389d96280bcf 114 // -----------------------------------------------------------------------------------------
Yamasaki Taro 25:389d96280bcf 115
Yamasaki Taro 52:e71a3d4d96ca 116 wireless.printf("Tank %d APL %s Valve %s.\r\n", press_bit1, APLFlug ? "on":"off" , IsValveOpened ? "open":"close" );
Yamasaki Taro 25:389d96280bcf 117 dt = time;
Yamasaki Taro 25:389d96280bcf 118 }
Yamasaki Taro 35:c6457c5ce996 119 //valvcontroler auto pressure limitation----------------------------------------------------
Yamasaki Taro 42:51976ccf669d 120 if(wireless.readable() > 0)
Yamasaki Taro 42:51976ccf669d 121 {
Yamasaki Taro 44:3be8f867063e 122 // This support only single lettar.
Yamasaki Taro 45:7e9d6dc429e4 123 char up_msg = wireless.getc();
Yamasaki Taro 44:3be8f867063e 124
Yamasaki Taro 50:c9f29b839c32 125 //wireless.printf("Message = %c.",up_msg);
Yamasaki Taro 48:70d45f006192 126
Yamasaki Taro 45:7e9d6dc429e4 127 if (up_msg == 'o') //open
Yamasaki Taro 44:3be8f867063e 128 {
Yamasaki Taro 50:c9f29b839c32 129 ValveOpen();
Yamasaki Taro 44:3be8f867063e 130 APLFlug = false;
Yamasaki Taro 44:3be8f867063e 131 }
Yamasaki Taro 45:7e9d6dc429e4 132 else if (up_msg == 'c') //close
Yamasaki Taro 44:3be8f867063e 133 {
Yamasaki Taro 50:c9f29b839c32 134 ValveClose();
Yamasaki Taro 44:3be8f867063e 135 APLFlug = false;
Yamasaki Taro 44:3be8f867063e 136 }
Yamasaki Taro 47:4bef9e4ebbc8 137 else
Yamasaki Taro 44:3be8f867063e 138 {
Yamasaki Taro 53:860d4d4742a9 139 if (// These must be just responses.
Yamasaki Taro 46:64cd35651ce0 140 up_msg != 'O'
Yamasaki Taro 46:64cd35651ce0 141 && up_msg != 'K'
Yamasaki Taro 46:64cd35651ce0 142 && up_msg != 'N'
Yamasaki Taro 46:64cd35651ce0 143 && up_msg != 'G'
Yamasaki Taro 46:64cd35651ce0 144 && up_msg != ' '
Yamasaki Taro 46:64cd35651ce0 145 && up_msg != '0'
Yamasaki Taro 46:64cd35651ce0 146 && up_msg != '1'
Yamasaki Taro 46:64cd35651ce0 147 && up_msg != '2'
Yamasaki Taro 46:64cd35651ce0 148 && up_msg != '3'
Yamasaki Taro 46:64cd35651ce0 149 && up_msg != '4'
Yamasaki Taro 46:64cd35651ce0 150 && up_msg != '5'
Yamasaki Taro 46:64cd35651ce0 151 && up_msg != '6'
Yamasaki Taro 46:64cd35651ce0 152 && up_msg != '7'
Yamasaki Taro 46:64cd35651ce0 153 && up_msg != '8'
Yamasaki Taro 46:64cd35651ce0 154 && up_msg != '9'
Yamasaki Taro 50:c9f29b839c32 155 && up_msg != '\0'
Yamasaki Taro 50:c9f29b839c32 156 && up_msg != '\r'
Yamasaki Taro 50:c9f29b839c32 157 && up_msg != '\n'
Yamasaki Taro 46:64cd35651ce0 158 ){
Yamasaki Taro 47:4bef9e4ebbc8 159 wireless.printf("You send invaild command.\r\n");
Yamasaki Taro 44:3be8f867063e 160 }
Yamasaki Taro 44:3be8f867063e 161 }
Yamasaki Taro 42:51976ccf669d 162 }
Yamasaki Taro 38:67754c11cf6f 163 if(APLFlug)
Yamasaki Taro 38:67754c11cf6f 164 {
Yamasaki Taro 38:67754c11cf6f 165 if(press_bit1 > Threshold)
Yamasaki Taro 38:67754c11cf6f 166 {
Yamasaki Taro 50:c9f29b839c32 167 ValveOpen();
Yamasaki Taro 35:c6457c5ce996 168 }
Yamasaki Taro 35:c6457c5ce996 169 else{
Yamasaki Taro 50:c9f29b839c32 170 ValveClose();
Yamasaki Taro 35:c6457c5ce996 171 }
Yamasaki Taro 29:30fdcbbbe79a 172 }
Yamasaki Taro 31:22dcdffbe5c2 173 //------------------------------------------------------------------------------------------
Yamasaki Taro 58:582b730cb591 174 fprintf(fp, "%d,%d,%d\r\n", time, press_bit1, press_bit2);
Yamasaki Taro 25:389d96280bcf 175
Yamasaki Taro 25:389d96280bcf 176 if(sd_timer.read_ms() > 20*1000) {
Yamasaki Taro 25:389d96280bcf 177 if(fp) {
Yamasaki Taro 25:389d96280bcf 178 fclose(fp);
Yamasaki Taro 25:389d96280bcf 179 fp = fopen(file_name, "a");
Yamasaki Taro 25:389d96280bcf 180 }
Yamasaki Taro 25:389d96280bcf 181 }
Yamasaki Taro 4:83855f14a087 182 }
Yamasaki Taro 1:655abe8ab309 183 }
Yamasaki Taro 43:09551ed0f46b 184 // If you feel this ugly, please refactor THIS !!.