From 23d19edaa1767e3f13000a28bc0f769965a84174 Mon Sep 17 00:00:00 2001 From: Demo User Date: Tue, 25 Feb 2020 12:21:04 -0600 Subject: [PATCH] optimization 1 --- daq | Bin 13696 -> 13748 bytes daq.c | 61 +++++++++++++++++++++++++++++++++++++++------------------- 2 files changed, 41 insertions(+), 20 deletions(-) diff --git a/daq b/daq index 39786ef175dd39933c1d6e8b78d16208c370db3c..3db01afdd59a56022554f6810523dd79be978493 100755 GIT binary patch delta 2482 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 diff --git a/daq.c b/daq.c index 8f03b2b..89f06dc 100644 --- a/daq.c +++ b/daq.c @@ -12,7 +12,7 @@ #define data_file_path "/var/lib/cloud9/daq-serial-bbb/data.dat" #define GC0017 4 //co2 -#define CM31911 1 //co +#define CM31911 1 //co, t #define OX0052 2 //o2 #define Rep_Dev_ID "Y\r\n" @@ -23,6 +23,7 @@ #define Temperature "T\r\n" #define get_readigns "Q\r\n" #define percent_oxigen "%\r\n" +#define ppm_oxigen "O\r\n" int sensConf(unsigned char uartNumber, int baudRate, unsigned char mode[], unsigned char response[]); @@ -43,15 +44,15 @@ int main(int argc, char *argv[]){ } //configuración de sensores - //printf("Configuring CO2 sensor\n"); - //sensConf(GC0017, B9600, Pulling_Mode, " K 00002\r\n"); - //printf("Configuring CO sensor\n"); - //sensConf(CM31911, B9600, Pulling_Mode, "K 00002\r\n"); + printf("Configuring CO2 sensor\n"); + sensConf(GC0017, B9600, Pulling_Mode, " K 00002\r\n"); + printf("Configuring CO sensor\n"); + sensConf(CM31911, B9600, Pulling_Mode, "K 00002\r\n"); printf("Configuring O2 sensor\n"); sensConf(OX0052, B9600, OX_P_Mode, "M 01\r\n"); //adquisición - T = atoi(argv[1]); + T = atoi(argv[1]);//str to int t = atoi(argv[2]); printf("Starting data acquisition with duration of %dh and every %ds\n", T, t); DAQ(T, t); @@ -107,6 +108,13 @@ int measure(unsigned char uartNumber, unsigned char command[], int multiplier, i return measure; } +int read_measure(unsigned char uartNumber, int multiplier, int excess){ + int measure; + uartReceive(uartNumber); + measure = (str2int(&receive[uartNumber]) - excess)*multiplier ; + return measure; +} + int str2int(unsigned char *ptr){ int number = 0; @@ -127,32 +135,45 @@ int DAQ(int t_hrs, int tm_s) int co2, co, o2, temp; clock_t start_t, end_t; time_t new_time, prev_time, t0; - double dif; - - + double tm_ms = tm_s*1e6 - 0.20e6; + double dif = tm_ms; + //registro datos de inicio dfp = fopen(data_file_path, "w"); // open file for writing time_t curtime; time(&curtime); - fprintf(dfp, "%sStarting DAQ\ntime(s)\t\tCO2(ppm)\t\tCO(ppm)\t\tO2(ppm)\t\tTemperaure(ºC*10)\n", ctime(&curtime)); // send the value to the file + fprintf(dfp, "%sStarting DAQ\ntime(s)\tCO2(ppm)\tCO(ppm)\tO2(ppm)\tTemperaure(ºC*10)\n", ctime(&curtime)); // send the value to the file fclose(dfp); // close the file using the file pointer //ciclo - t0 = (prev_time=time(NULL)); + t0 = time(NULL) + tm_s; + new_time = t0; for(int i = 0; i < (t_hrs*3600); i=i+tm_s){ - while((prev_time+tm_s) != (new_time = time(NULL))); + + if (dif <= 0) printf("T=%d Communication time exceded.\n", (int)(new_time-t0)); + else usleep((int)dif); + + if (time(NULL) < new_time) while(new_time != time(NULL)); + else printf("T=%d time error.\n", (int)(new_time-t0)); + start_t = clock(); - //co2 = measure(GC0017, fil_gas_con, 10, 0); co = measure(CM31911, fil_gas_con, 1, 0); - o2 = measure(OX0052, percent_oxigen, 1, 0);///*temp = measure(CM31911, Temperature, 1, 1000); + new_time = time(NULL); + uartTransmit(CM31911, fil_gas_con); + uartTransmit(GC0017, fil_gas_con); + co = read_measure(CM31911, 1, 0); + uartTransmit(CM31911, Temperature); + uartTransmit(OX0052, ppm_oxigen); + co2 = read_measure(GC0017, 10, 0); + o2 = read_measure(OX0052, 1, 0); + temp = read_measure(CM31911, 1, 1000); + dfp = fopen(data_file_path, "a"); // open file for writing - fprintf(dfp, "%ld \t\t%d\t\t%d\t\t%d\t\t%d\n", new_time-t0, co2, co, o2, temp); // send the value to the file + fprintf(dfp, "%d \t%d\t%d\t%d\t%d\n", (int)(new_time-t0), co2, co, o2, temp); // send the value to the file fclose(dfp); // close the file using the file pointer - prev_time = new_time; + new_time += tm_s; end_t = clock(); - dif = (double)(end_t - start_t)*1e6 / CLOCKS_PER_SEC; - dif = tm_s*1e6 - dif - .15e6; - if (dif < 0) dif = 0; - usleep((int)dif); + + dif = tm_ms - ((double)(end_t - start_t)*1e6 / CLOCKS_PER_SEC); } return 0;