valve measurement board
Dependencies: mbed ads1115_test SDFileSystem
main.cpp
- Committer:
- Yamasaki Taro
- Date:
- 2021-03-05
- Branch:
- PressureResponse
- Revision:
- 20:d9d7cbb06979
- Parent:
- 19:470db6fd39fa
- Child:
- 21:efccbeb67a15
File content as of revision 20:d9d7cbb06979:
#include "mbed.h" #include "SDFileSystem.h" #include "Adafruit_ADS1015.h" #define ADS1115_ADDR 0b1001000 #define TEMP_LSB 0.0625f Serial pc(USBTX, USBRX, 115200); // Serial wireless(p28,p27); I2C i2c(p9, p10); Adafruit_ADS1115 ads1115(&i2c, ADS1115_ADDR); SDFileSystem sd(p5, p6, p7, p8, "sd"); SPI TempK(p5, p6, p7); const int Threshold = 114514;//この値は適当。よく考えて決めること!! DigitalOut valve_controler1(p18); DigitalOut valve_controler2(p19); DigitalOut led1(LED1); DigitalOut ss1(p19); DigitalOut ss2(p20); Timer timer; Timer sd_timer; FILE *fp; char file_name[64]; int press_bit1, press_bit2; float temp1, temp2; bool ConfigFlag = false; // for debug int main() { timer.start(); wireless.baud(115200); uint16_t data[2]; ads1115.setGain(GAIN_TWOTHIRDS); TempK.format(16, 0); TempK.frequency(5000000); char file_name_format[] = "/sd/IZU2020_VALVE_MEASUREMENT_%d.dat"; int file_number = 1; while(1) { sprintf(file_name, file_name_format, file_number); fp = fopen(file_name, "r"); if(fp != NULL) { fclose(fp); file_number++; } else { sprintf(file_name, file_name_format, file_number); break; } } fp = fopen(file_name, "w"); sd_timer.start(); int dt = 0; while(1) { press_bit1 = ads1115.readADC_SingleEnded(1); press_bit2 = ads1115.readADC_SingleEnded(3); ss1 = 0; data[0] = TempK.write(0x00); data[1] = TempK.write(0x00); ss1 = 1; data[0] &= 0xfffc; temp1 = (float)((int16_t)data[0]) * TEMP_LSB; ss2 = 0; data[0] = TempK.write(0x00); data[1] = TempK.write(0x00); ss2 = 1; data[0] &= 0xfffc; temp2 = (float)((int16_t)data[0]) * TEMP_LSB; // Debug and Config section----------------------------------------------------------------- if (pc.readable() > 0){ wireless.putc(pc.getc()); ConfigFlag = true; } char WirelessDebug_Buffer[BUFSIZ]; char idx = 0; while (wireless.readable() > 0){ WirelessDebug_Buffer[idx] = wireless.getc(); idx++; } pc.printf("%s\r\n",WirelessDebug_Buffer); if(ConfigFlag){ continue; } // ----------------------------------------------------------------------------------------- int time = timer.read_ms(); if(time - dt >= 100){ // Debug and Config section----------------------------------------------------------------- if (pc.readable() == 0 && wireless.readable() == 0){ pc.printf("%d\t%d\t%d\t%f\t%f\r\n", timer.read_ms(), press_bit1, press_bit2, temp1, temp2); } // ----------------------------------------------------------------------------------------- // 無線機の電源供給のみを止めると、コレがpcの方にも漏れてくるのって、何なんだろう? wireless.printf("Tank Pressure is %d now.\r\n",press_bit1); dt = time; } //valvcontroler--------------------- if(press_bit1 <= Threshold){ valve_controler1 = 0; valve_controler2 = 0; } else{ valve_controler1 = 1; valve_controler2 = 1; } //---------------------------------- fprintf(fp, "%d\t%d\t%d\t%f\t%f\r\n", time, press_bit1, press_bit2, temp1, temp2); if(sd_timer.read_ms() > 20*1000) { if(fp) { fclose(fp); fp = fopen(file_name, "a"); } } } }