valve measurement board
Dependencies: mbed ads1115_test SDFileSystem
main.cpp@60:9375c061be43, 2021-03-15 (annotated)
- 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?
User | Revision | Line number | New 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 !!. |