Upload New File

master
Sayeth Rodríguez 5 years ago
parent ddcfd51e75
commit 8796d6ae0f

152
daq.c

@ -0,0 +1,152 @@
/*
*/
#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include"uart.c"
#define data_file_path "/var/lib/cloud9/c9projets/newUART/data.dat"
#define GC0017 4 //co2
#define CM31911 1 //co
#define OX0052 2 //o2
#define Rep_Dev_ID "Y\r\n"
#define Pulling_Mode "K 2\r\n"
#define OX_P_Mode "K 1\r\n"
#define unf_gas_con "z\r\n"
#define fil_gas_con "Z\r\n"
#define Temperature "T\r\n"
#define get_readigns "Q\r\n"
#define percent_oxigen "%\r\n"
int sensConf(unsigned char uartNumber, int baudRate, unsigned char mode[], unsigned char response[]);
int measure(unsigned char uartNumber, unsigned char command[], int multiplier, int excess);
int str2int(unsigned char *ptr);
int DAQ(int t_hrs, int tm_s);
int main(){
//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 O2 sensor\n");
//sensConf(OX0052, B9600, OX_P_Mode, "??");
//adquisición
printf("Starting data acquisition\n");
DAQ(1, 3);
sleep(1);
//finalización
//deinit uart
uartClose(GC0017);
uartClose(CM31911);
uartClose(OX0052);
printf("Exiting of the program...\n");
return 0;
}
int sensConf(unsigned char uartNumber, int baudRate, unsigned char mode[], unsigned char response[]){
int count;
int i = 0;
uartConf(uartNumber, baudRate);
while( i < 10 ){
uartTransmit(uartNumber, mode);
tcdrain(uartFile[uartNumber]); //wait all data has been sent
printf("Command sended.\n");
//usleep(100000); //give the sensor a chance to respond
count = uartReceive(uartNumber);
if (count == 0) printf("There was no data available to read!\n");
else if (strcmp(receive[uartNumber], response) == 0) {
printf("Sensor configurated after %d tries.\n", i+1);
return 0;
} else {
printf("The following was read in [%d]: %s\n",count,receive[uartNumber]);
char *c = receive[uartNumber];
while (*c != '\0'){
printf("%d = '%c'\n",*c, *c);
c++;
}
}
i ++;
}
printf("CO2 Sensor configuration failed.\n");
return -1;
}
int measure(unsigned char uartNumber, unsigned char command[], int multiplier, int excess){
int measure;
uartTransmit(uartNumber, command);
uartReceive(uartNumber);
measure = (str2int(&receive[uartNumber]) - excess)*multiplier ;
return measure;
}
int str2int(unsigned char *ptr){
int number = 0;
while (*ptr != '\0') {
if ((*ptr >= '0') && (*ptr <= '9')) {
int dig = (*ptr) - '0';
number = number*10 + dig;
}
ptr++;
}
return number;
}
int DAQ(int t_hrs, int tm_s)
{
FILE* dfp; // create a file pointer dfp
int co2, co, o2, temp;
clock_t start_t, end_t;
time_t new_time, prev_time, t0;
double dif;
//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
fclose(dfp); // close the file using the file pointer
//ciclo
t0 = (prev_time=time(NULL));
for(int i = 0; i < (t_hrs*3600); i=i+tm_s){
while((prev_time+tm_s) != (new_time = time(NULL)));
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);
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
fclose(dfp); // close the file using the file pointer
prev_time = new_time;
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);
}
return 0;
}
Loading…
Cancel
Save