valve measurement board

Dependencies:   mbed ads1115_test SDFileSystem

main.cpp

Committer:
Yamasaki Taro
Date:
2021-03-07
Branch:
PressureResponse
Revision:
27:7fc02e4852cf
Parent:
26:23325c50bfc8
Child:
29:30fdcbbbe79a

File content as of revision 27:7fc02e4852cf:

#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

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);
			}
			// -----------------------------------------------------------------------------------------

			wireless.printf("Tank Pressure is %d now.\r\n",press_bit1);
			dt = time;
		}
		//valvcontroler---------------------
		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");
			}
		}
	}
}