valve measurement board
Dependencies: mbed ads1115_test SDFileSystem
main.cpp@30:cf909d4c6710, 2021-03-07 (annotated)
- Committer:
- Yamasaki Taro
- Date:
- Sun Mar 07 03:18:08 2021 +0900
- Branch:
- PressureResponse
- Revision:
- 30:cf909d4c6710
- Parent:
- 29:30fdcbbbe79a
- Child:
- 31:22dcdffbe5c2
Improve pressure control
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 | 2:824e174ef9ea | 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 | |
tanahashi | 0:cb9da8306a40 | 45 | int main() |
tanahashi | 0:cb9da8306a40 | 46 | { |
Yamasaki Taro | 25:389d96280bcf | 47 | timer.start(); |
Yamasaki Taro | 25:389d96280bcf | 48 | wireless.baud(115200); |
Yamasaki Taro | 1:655abe8ab309 | 49 | |
Yamasaki Taro | 25:389d96280bcf | 50 | uint16_t data[2]; |
Yamasaki Taro | 25:389d96280bcf | 51 | ads1115.setGain(GAIN_TWOTHIRDS); |
Yamasaki Taro | 25:389d96280bcf | 52 | TempK.format(16, 0); |
Yamasaki Taro | 25:389d96280bcf | 53 | TempK.frequency(5000000); |
tanahashi | 0:cb9da8306a40 | 54 | |
Yamasaki Taro | 25:389d96280bcf | 55 | char file_name_format[] = "/sd/IZU2020_VALVE_MEASUREMENT_%d.dat"; |
Yamasaki Taro | 25:389d96280bcf | 56 | int file_number = 1; |
Yamasaki Taro | 25:389d96280bcf | 57 | while(1) { |
Yamasaki Taro | 25:389d96280bcf | 58 | sprintf(file_name, file_name_format, file_number); |
Yamasaki Taro | 25:389d96280bcf | 59 | fp = fopen(file_name, "r"); |
Yamasaki Taro | 25:389d96280bcf | 60 | if(fp != NULL) { |
Yamasaki Taro | 25:389d96280bcf | 61 | fclose(fp); |
Yamasaki Taro | 25:389d96280bcf | 62 | file_number++; |
Yamasaki Taro | 25:389d96280bcf | 63 | } else { |
Yamasaki Taro | 25:389d96280bcf | 64 | sprintf(file_name, file_name_format, file_number); |
Yamasaki Taro | 25:389d96280bcf | 65 | break; |
Yamasaki Taro | 25:389d96280bcf | 66 | } |
Yamasaki Taro | 25:389d96280bcf | 67 | } |
Yamasaki Taro | 25:389d96280bcf | 68 | fp = fopen(file_name, "w"); |
Yamasaki Taro | 25:389d96280bcf | 69 | sd_timer.start(); |
tanahashi | 0:cb9da8306a40 | 70 | |
Yamasaki Taro | 25:389d96280bcf | 71 | int dt = 0; |
Yamasaki Taro | 25:389d96280bcf | 72 | while(1) { |
tanahashi | 0:cb9da8306a40 | 73 | |
Yamasaki Taro | 25:389d96280bcf | 74 | press_bit1 = ads1115.readADC_SingleEnded(1); |
Yamasaki Taro | 25:389d96280bcf | 75 | press_bit2 = ads1115.readADC_SingleEnded(3); |
tanahashi | 0:cb9da8306a40 | 76 | |
Yamasaki Taro | 25:389d96280bcf | 77 | ss1 = 0; |
Yamasaki Taro | 25:389d96280bcf | 78 | data[0] = TempK.write(0x00); |
Yamasaki Taro | 25:389d96280bcf | 79 | data[1] = TempK.write(0x00); |
Yamasaki Taro | 25:389d96280bcf | 80 | ss1 = 1; |
Yamasaki Taro | 25:389d96280bcf | 81 | data[0] &= 0xfffc; |
Yamasaki Taro | 25:389d96280bcf | 82 | temp1 = (float)((int16_t)data[0]) * TEMP_LSB; |
tanahashi | 0:cb9da8306a40 | 83 | |
Yamasaki Taro | 25:389d96280bcf | 84 | ss2 = 0; |
Yamasaki Taro | 25:389d96280bcf | 85 | data[0] = TempK.write(0x00); |
Yamasaki Taro | 25:389d96280bcf | 86 | data[1] = TempK.write(0x00); |
Yamasaki Taro | 25:389d96280bcf | 87 | ss2 = 1; |
Yamasaki Taro | 25:389d96280bcf | 88 | data[0] &= 0xfffc; |
Yamasaki Taro | 25:389d96280bcf | 89 | temp2 = (float)((int16_t)data[0]) * TEMP_LSB; |
Yamasaki Taro | 25:389d96280bcf | 90 | |
Yamasaki Taro | 25:389d96280bcf | 91 | // Debug and Config section----------------------------------------------------------------- |
Yamasaki Taro | 25:389d96280bcf | 92 | if (pc.readable() > 0){ |
Yamasaki Taro | 25:389d96280bcf | 93 | wireless.putc(pc.getc()); |
Yamasaki Taro | 25:389d96280bcf | 94 | ConfigFlag = true; |
Yamasaki Taro | 25:389d96280bcf | 95 | } |
Yamasaki Taro | 25:389d96280bcf | 96 | while (wireless.readable() > 0){ |
Yamasaki Taro | 24:0b6a6ea42234 | 97 | pc.putc(wireless.getc()); |
Yamasaki Taro | 25:389d96280bcf | 98 | } |
Yamasaki Taro | 25:389d96280bcf | 99 | if(ConfigFlag){ |
Yamasaki Taro | 25:389d96280bcf | 100 | continue; |
Yamasaki Taro | 13:19fb33032ebb | 101 | } |
Yamasaki Taro | 13:19fb33032ebb | 102 | // ----------------------------------------------------------------------------------------- |
Yamasaki Taro | 25:389d96280bcf | 103 | |
Yamasaki Taro | 25:389d96280bcf | 104 | int time = timer.read_ms(); |
Yamasaki Taro | 25:389d96280bcf | 105 | if(time - dt >= 100){ |
Yamasaki Taro | 25:389d96280bcf | 106 | // Debug and Config section----------------------------------------------------------------- |
Yamasaki Taro | 25:389d96280bcf | 107 | if (pc.readable() == 0 && wireless.readable() == 0){ |
Yamasaki Taro | 25:389d96280bcf | 108 | 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 | 109 | } |
Yamasaki Taro | 25:389d96280bcf | 110 | // ----------------------------------------------------------------------------------------- |
Yamasaki Taro | 25:389d96280bcf | 111 | |
Yamasaki Taro | 25:389d96280bcf | 112 | wireless.printf("Tank Pressure is %d now.\r\n",press_bit1); |
Yamasaki Taro | 25:389d96280bcf | 113 | dt = time; |
Yamasaki Taro | 25:389d96280bcf | 114 | } |
Yamasaki Taro | 25:389d96280bcf | 115 | //valvcontroler--------------------- |
Yamasaki Taro | 29:30fdcbbbe79a | 116 | if(press_bit1 > Threshold){ |
Yamasaki Taro | 30:cf909d4c6710 | 117 | valve_controler1 = 1; |
Yamasaki Taro | 30:cf909d4c6710 | 118 | valve_controler2 = 1; |
Yamasaki Taro | 30:cf909d4c6710 | 119 | } |
Yamasaki Taro | 30:cf909d4c6710 | 120 | else{ |
Yamasaki Taro | 29:30fdcbbbe79a | 121 | valve_controler1 = 0; |
Yamasaki Taro | 29:30fdcbbbe79a | 122 | valve_controler2 = 0; |
Yamasaki Taro | 29:30fdcbbbe79a | 123 | } |
Yamasaki Taro | 25:389d96280bcf | 124 | //---------------------------------- |
Yamasaki Taro | 25:389d96280bcf | 125 | fprintf(fp, "%d\t%d\t%d\t%f\t%f\r\n", time, press_bit1, press_bit2, temp1, temp2); |
Yamasaki Taro | 25:389d96280bcf | 126 | |
Yamasaki Taro | 25:389d96280bcf | 127 | if(sd_timer.read_ms() > 20*1000) { |
Yamasaki Taro | 25:389d96280bcf | 128 | if(fp) { |
Yamasaki Taro | 25:389d96280bcf | 129 | fclose(fp); |
Yamasaki Taro | 25:389d96280bcf | 130 | fp = fopen(file_name, "a"); |
Yamasaki Taro | 25:389d96280bcf | 131 | } |
Yamasaki Taro | 25:389d96280bcf | 132 | } |
Yamasaki Taro | 4:83855f14a087 | 133 | } |
Yamasaki Taro | 1:655abe8ab309 | 134 | } |