valve measurement board
Dependencies: mbed ads1115_test SDFileSystem
main.cpp
- Committer:
- Yamasaki Taro
- Date:
- 2021-03-07
- Branch:
- UplinkEnabled
- Revision:
- 36:a2eadc00dbf8
- Parent:
- 35:c6457c5ce996
- Child:
- 37:69eaa67338a9
File content as of revision 36:a2eadc00dbf8:
#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;//この値は適当。よく考えて決めること!! DigitalInOut valve_controler1(p18, PIN_OUTPUT, OpenDrain, 0); DigitalInOut valve_controler2(p19, PIN_OUTPUT, OpenDrain, 0); 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 bool APLFlug = true; // for valve controler void ValveOC(); // Wireless interruption for open/close valve int main() { timer.start(); wireless.baud(115200); wireless.attach(ValveOC,Serial::RxIrq); 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()); if(!ConfigFlag){ ConfigFlag = true; } } if(ConfigFlag){ while (wireless.readable() > 0){ pc.putc(wireless.getc()); } 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); } // ----------------------------------------------------------------------------------------- wireless.printf("Tank Pressure is %d now.\r\n",press_bit1); dt = time; } //valvcontroler auto pressure limitation---------------------------------------------------- if(APLFlug){ if(press_bit1 > Threshold){ valve_controler1 = 1; valve_controler2 = 1; } else{ valve_controler1 = 0; valve_controler2 = 0; } } //------------------------------------------------------------------------------------------ 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"); } } } } void ValveOC() { char message = wireless.getc(); if (message == 'o') { valve_controler1 = 1; valve_controler2 = 1; APLFlug = false; } else if (message == 'c') { valve_controler1 = 0; valve_controler2 = 0; APLFlug = false; } }