valve measurement board

Dependencies:   mbed ads1115_test SDFileSystem

Committer:
Yamasaki Taro
Date:
Fri Mar 05 18:17:03 2021 +0900
Branch:
PressureResponse
Revision:
19:470db6fd39fa
Parent:
18:c0ad74e109a4
Child:
20:d9d7cbb06979
Patch for com trouble in config feature

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 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 12:8a4212e2642a 25 DigitalOut valve_controler1(p18);
Yamasaki Taro 12:8a4212e2642a 26 DigitalOut valve_controler2(p19);
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 {
tanahashi 0:cb9da8306a40 47 timer.start();
Yamasaki Taro 3:a8e9c68ea80b 48 wireless.baud(115200);
Yamasaki Taro 1:655abe8ab309 49
tanahashi 0:cb9da8306a40 50 uint16_t data[2];
tanahashi 0:cb9da8306a40 51 ads1115.setGain(GAIN_TWOTHIRDS);
tanahashi 0:cb9da8306a40 52 TempK.format(16, 0);
tanahashi 0:cb9da8306a40 53 TempK.frequency(5000000);
tanahashi 0:cb9da8306a40 54
tanahashi 0:cb9da8306a40 55 char file_name_format[] = "/sd/IZU2020_VALVE_MEASUREMENT_%d.dat";
tanahashi 0:cb9da8306a40 56 int file_number = 1;
tanahashi 0:cb9da8306a40 57 while(1) {
tanahashi 0:cb9da8306a40 58 sprintf(file_name, file_name_format, file_number);
tanahashi 0:cb9da8306a40 59 fp = fopen(file_name, "r");
tanahashi 0:cb9da8306a40 60 if(fp != NULL) {
tanahashi 0:cb9da8306a40 61 fclose(fp);
tanahashi 0:cb9da8306a40 62 file_number++;
tanahashi 0:cb9da8306a40 63 } else {
tanahashi 0:cb9da8306a40 64 sprintf(file_name, file_name_format, file_number);
tanahashi 0:cb9da8306a40 65 break;
tanahashi 0:cb9da8306a40 66 }
tanahashi 0:cb9da8306a40 67 }
tanahashi 0:cb9da8306a40 68 fp = fopen(file_name, "w");
tanahashi 0:cb9da8306a40 69 sd_timer.start();
tanahashi 0:cb9da8306a40 70
Yamasaki Taro 1:655abe8ab309 71 int dt = 0;
tanahashi 0:cb9da8306a40 72 while(1) {
tanahashi 0:cb9da8306a40 73
tanahashi 0:cb9da8306a40 74 press_bit1 = ads1115.readADC_SingleEnded(1);
tanahashi 0:cb9da8306a40 75 press_bit2 = ads1115.readADC_SingleEnded(3);
tanahashi 0:cb9da8306a40 76
tanahashi 0:cb9da8306a40 77 ss1 = 0;
tanahashi 0:cb9da8306a40 78 data[0] = TempK.write(0x00);
tanahashi 0:cb9da8306a40 79 data[1] = TempK.write(0x00);
tanahashi 0:cb9da8306a40 80 ss1 = 1;
tanahashi 0:cb9da8306a40 81 data[0] &= 0xfffc;
tanahashi 0:cb9da8306a40 82 temp1 = (float)((int16_t)data[0]) * TEMP_LSB;
tanahashi 0:cb9da8306a40 83
tanahashi 0:cb9da8306a40 84 ss2 = 0;
tanahashi 0:cb9da8306a40 85 data[0] = TempK.write(0x00);
tanahashi 0:cb9da8306a40 86 data[1] = TempK.write(0x00);
tanahashi 0:cb9da8306a40 87 ss2 = 1;
tanahashi 0:cb9da8306a40 88 data[0] &= 0xfffc;
tanahashi 0:cb9da8306a40 89 temp2 = (float)((int16_t)data[0]) * TEMP_LSB;
tanahashi 0:cb9da8306a40 90
Yamasaki Taro 14:afe1cd8732e6 91 // Debug and Config section-----------------------------------------------------------------
Yamasaki Taro 14:afe1cd8732e6 92 if (pc.readable() > 0){
Yamasaki Taro 17:528afcef65e8 93 wireless.putc(pc.getc());
Yamasaki Taro 17:528afcef65e8 94 ConfigFlag = true;
Yamasaki Taro 14:afe1cd8732e6 95 }
Yamasaki Taro 18:c0ad74e109a4 96 char WirelessDebug_Buffer[BUFSIZ];
Yamasaki Taro 18:c0ad74e109a4 97 char idx = 0;
Yamasaki Taro 18:c0ad74e109a4 98 while (wireless.readable() > 0){
Yamasaki Taro 18:c0ad74e109a4 99 WirelessDebug_Buffer[idx] = wireless.getc();
Yamasaki Taro 18:c0ad74e109a4 100 idx++;
Yamasaki Taro 14:afe1cd8732e6 101 }
Yamasaki Taro 19:470db6fd39fa 102 pc.printf(WirelessDebug_Buffer);
Yamasaki Taro 17:528afcef65e8 103 if(ConfigFlag){
Yamasaki Taro 17:528afcef65e8 104 continue;
Yamasaki Taro 17:528afcef65e8 105 }
Yamasaki Taro 14:afe1cd8732e6 106 // -----------------------------------------------------------------------------------------
Yamasaki Taro 11:99a4552b4fa5 107
Yamasaki Taro 1:655abe8ab309 108 int time = timer.read_ms();
Yamasaki Taro 1:655abe8ab309 109 if(time - dt >= 100){
Yamasaki Taro 13:19fb33032ebb 110 // Debug and Config section-----------------------------------------------------------------
Yamasaki Taro 13:19fb33032ebb 111 if (pc.readable() == 0 && wireless.readable() == 0){
Yamasaki Taro 13:19fb33032ebb 112 pc.printf("%d\t%d\t%d\t%f\t%f\r\n", timer.read_ms(), press_bit1, press_bit2, temp1, temp2);
Yamasaki Taro 13:19fb33032ebb 113 }
Yamasaki Taro 13:19fb33032ebb 114 // -----------------------------------------------------------------------------------------
Yamasaki Taro 13:19fb33032ebb 115
Yamasaki Taro 14:afe1cd8732e6 116 // 無線機の電源供給のみを止めると、コレがpcの方にも漏れてくるのって、何なんだろう?
Yamasaki Taro 2:824e174ef9ea 117 wireless.printf("Tank Pressure is %d now.\r\n",press_bit1);
Yamasaki Taro 1:655abe8ab309 118 dt = time;
Yamasaki Taro 1:655abe8ab309 119 }
Yamasaki Taro 12:8a4212e2642a 120 //valvcontroler---------------------
Yamasaki Taro 12:8a4212e2642a 121 if(press_bit1 <= Threshold){
Yamasaki Taro 12:8a4212e2642a 122 valve_controler1 = 0;
Yamasaki Taro 12:8a4212e2642a 123 valve_controler2 = 0;
Yamasaki Taro 4:83855f14a087 124 }
Yamasaki Taro 12:8a4212e2642a 125 else{
Yamasaki Taro 12:8a4212e2642a 126 valve_controler1 = 1;
Yamasaki Taro 12:8a4212e2642a 127 valve_controler2 = 1;
Yamasaki Taro 12:8a4212e2642a 128 }
Yamasaki Taro 12:8a4212e2642a 129 //----------------------------------
Yamasaki Taro 1:655abe8ab309 130 fprintf(fp, "%d\t%d\t%d\t%f\t%f\r\n", time, press_bit1, press_bit2, temp1, temp2);
tanahashi 0:cb9da8306a40 131
tanahashi 0:cb9da8306a40 132 if(sd_timer.read_ms() > 20*1000) {
tanahashi 0:cb9da8306a40 133 if(fp) {
tanahashi 0:cb9da8306a40 134 fclose(fp);
tanahashi 0:cb9da8306a40 135 fp = fopen(file_name, "a");
tanahashi 0:cb9da8306a40 136 }
tanahashi 0:cb9da8306a40 137 }
tanahashi 0:cb9da8306a40 138 }
Yamasaki Taro 1:655abe8ab309 139 }