valve measurement board

Dependencies:   mbed ads1115_test SDFileSystem

main.cpp

Committer:
Yamasaki Taro
Date:
2021-03-05
Branch:
PressureResponse
Revision:
24:0b6a6ea42234
Parent:
23:87874dc35a82
Child:
25:389d96280bcf

File content as of revision 24:0b6a6ea42234:

#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;
	}
	while (wireless.readable() > 0){
			pc.putc(wireless.getc());
	}
	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");
            }
        }
    }
}