This is the Control Logic for the Electronic control units built in FRDM K64F platform to upload sensor data to a business cloud in real-time, which is being developed for enhancing the the existing state of art Energy Audits in Industrial Assessment Center(IUPUI)
Dependencies: SDFileSystem mbed
Fork of SDFileSystem_HelloWorld by
main.cpp
- Committer:
- AbhiBjee
- Date:
- 2018-03-08
- Revision:
- 2:08a2e20c624a
- Parent:
- 0:bdbd3d6fc5d5
File content as of revision 2:08a2e20c624a:
#include "mbed.h" #include <math.h> #include <string.h> #include "SDFileSystem.h" #include <iostream> using namespace std; SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); Serial pc(USBTX, USBRX); // And a little feedback Timer t; Timer ReadClock; int bufcnt,lineCnt,prtCnt,ended,timeout,Multiplier,Port_SensorID[11]; float Port_Multiplier[11]; char buf[1024]; char snd[1024]; char text[1024]; //char SensorType[100]; char Port_Description[11][100]; char Board_specs[10][50];// Board_specs[1]= Board-id, Board_specs[2]=WIFI ssid, Board_specs[3]=Wifi-Password,Board_specs[4]=Database TableName. int brdspCnt=0; void SDcrdRead(); char readConfigText(); float UnitConversion(int Sens_ID); char *SensorName(int Sens_ID); FILE * fp; AnalogIn Port_1(PTB2);// Current Sensor -> Output 0-2.5V dc Measures 0-600Amps AnalogIn Port_2(PTB3);// Pressure Sensor -> Output 0-5V dc Measures 0-200Psig AnalogIn Port_3(PTB10);// Temperature Sensor -> Output 0-5V dc Measures 0-50 degree Celcius AnalogIn Port_4(PTB11);// CO2 Sensor -> Output 0-10V dc Measures 0-2000ppm AnalogIn Port_5(PTC11);// CO2 Sensor -> Output 0-10V dc Measures 0-2000ppm AnalogIn Port_6(PTC10);// CO2 Sensor -> Output 0-10V dc Measures 0-2000ppm AnalogIn Port_7(PTC2);// CO2 Sensor -> Output 0-10V dc Measures 0-2000ppm AnalogIn Port_8(PTC0);// CO2 Sensor -> Output 0-10V dc Measures 0-2000ppm AnalogIn Port_9(PTC9);// CO2 Sensor -> Output 0-10V dc Measures 0-2000ppm AnalogIn Port_10(PTC8);// CO2 Sensor -> Output 0-10V dc Measures 0-2000ppm float Port_1val,Port_2val,Port_3val,Port_4val,Port_5val,Port_6val,Port_7val,Port_8val,Port_9val,Port_10val; //float PressureVal,TempVal,CurrentVal,CO2Val; float AvgPort_1Val,AvgPort_2Val,AvgPort_3Val,AvgPort_4Val,AvgPort_5Val,AvgPort_6Val,AvgPort_7Val,AvgPort_8Val,AvgPort_9Val,AvgPort_10Val; float Port_1ValSum,Port_2ValSum,Port_3ValSum,Port_4ValSum,Port_5ValSum,Port_6ValSum,Port_7ValSum,Port_8ValSum,Port_9ValSum,Port_10ValSum; int Count,ClockOut; //DigitalIn OA2(D2); void SDcrdRead(void){ //FILE * fp; printf("\r\nReading from SD card...\r\n\n\n"); fp = fopen("/sd/IAC_Config_File.txt", "rb"); if (fp != NULL) { readConfigText(); fclose(fp); printf(" \r\n\r\n\r\nRead Successfully!\r\n\r\n\r\n"); printf(" \r\n\r\n\r\n ---- Config File ---- \r\n\r\n\r\n"); printf("%s\n", text); printf(" \r\n\r\n\r\n ---- End of Config File ---- \r\n\r\n\r\n"); } else { printf("\nReading Failed!\r\n"); } } char readConfigText() { memset(buf, '\0', sizeof(buf)); t.start(); ended=0; bufcnt=0; lineCnt=0; prtCnt =0; while(true) { char C = fgetc(fp); //if(t.read() <= timeout) { buf[bufcnt] = C; bufcnt++; //printf(buf); if(feof(fp)){ break; } if(C == '\n'){ //buf[bufcnt] = '\0'; lineCnt++; strcpy(snd,buf); strcat(text,snd); if(buf[0]=='B'){ const char s[2] = ":"; char *token; /* get the first token */ token = strtok(buf, s); /* get the other tokens there*/ while( token != NULL ) { brdspCnt++; strcpy(Board_specs[brdspCnt],token); printf( " Boardspec[%d] = %s\r\n\n",brdspCnt, Board_specs[brdspCnt] ); token = strtok(NULL, s); } } else if(buf[0]=='P'){ prtCnt++; if (prtCnt<10){ Port_SensorID[prtCnt]=int(buf[9]-'0'); Port_Multiplier[prtCnt]= UnitConversion(Port_SensorID[prtCnt]); char *senStr = SensorName(Port_SensorID[prtCnt]); strcpy(Port_Description[prtCnt],senStr); printf("%d %0.2f %s\r\n",Port_SensorID[prtCnt],Port_Multiplier[prtCnt],Port_Description[prtCnt]); } else{ Port_SensorID[prtCnt]=int(buf[10]-'0'); Port_Multiplier[prtCnt]= UnitConversion(Port_SensorID[prtCnt]); char *senStr = SensorName(Port_SensorID[prtCnt]); strcpy(Port_Description[prtCnt],senStr); printf("%d %0.2f %s\r\n",Port_SensorID[prtCnt],Port_Multiplier[prtCnt],Port_Description[prtCnt]); } } //printf(text); memset(buf, '\0', sizeof(buf)); bufcnt = 0; } } printf("\r\n End of text file \r\n"); printf("\r\nLine Count %d\r\n",lineCnt); } float UnitConversion(int Sens_ID){ switch (Sens_ID){ case 0 : Multiplier = 0.0; break; case 1 : Multiplier = 2000.0; break; case 2 : Multiplier = 133.33; break; case 3 : Multiplier = 800.00; break; case 4 : Multiplier = 50.0; break; case 5 : Multiplier = 50.0; break; case 6 : Multiplier = 200.0; break; case 7 : Multiplier = 100.0; break; case 8 : Multiplier = 100; break; } return Multiplier; } char *SensorName(int Sens_ID){ static char *strng ; //memset(strng, '\0', sizeof(strng)); switch (Sens_ID){ case 0 : strng = "Null"; break; case 1 : strng = "Carbondioxide - Parts per million"; break; case 2 : strng = "Current 0-100 Ampere"; break; case 3 : strng = "Current 0-600 Ampere"; break; case 4 : strng = "Temperature 0-50 Degree Celsius"; break; case 5 : strng = "Temperature 0-50 Degree Celsius"; break; case 6 : strng = "Pressure (PSIG)"; break; case 7 : strng = "Humidity - Percentage"; break; case 8 : strng = "Compressed Airflow - Percentage"; break; } return strng; } int main(){ SDcrdRead(); while(true){ ClockOut = 5; ended=0; Count=0; Port_1ValSum = 0.0; Port_2ValSum = 0.0; Port_3ValSum = 0.0; Port_4ValSum = 0.0; Port_5ValSum = 0.0; Port_6ValSum = 0.0; Port_7ValSum = 0.0; Port_8ValSum = 0.0; Port_9ValSum = 0.0; Port_10ValSum = 0.0; while (ended!=1) { ReadClock.start(); Port_1val = Port_1.read()*Port_Multiplier[1]; Port_2val = Port_2.read()*Port_Multiplier[2]; Port_3val = Port_3.read()*Port_Multiplier[3]; Port_4val = Port_4.read()*Port_Multiplier[4]; Port_5val = Port_5.read()*Port_Multiplier[5]; Port_6val = Port_6.read()*Port_Multiplier[6]; Port_7val = Port_7.read()*Port_Multiplier[7]; Port_8val = Port_8.read()*Port_Multiplier[8]; Port_9val = Port_9.read()*Port_Multiplier[9]; Port_10val = Port_10.read()*Port_Multiplier[10]; Port_1ValSum += Port_1val; Port_2ValSum += Port_2val; Port_3ValSum += Port_3val; Port_4ValSum += Port_4val; Port_5ValSum += Port_5val; Port_6ValSum += Port_6val; Port_7ValSum += Port_7val; Port_8ValSum += Port_8val; Port_9ValSum += Port_9val; Port_10ValSum += Port_10val; Count++; //printf(" %f %f %f %f \r\n", CurrentVal, PressureVal, TempVal, CO2Val); printf(" %f %f %f %f %f %f %f %f %f %f\r\n", Port_1val, Port_2val, Port_3val, Port_4val,Port_5val, Port_6val, Port_7val, Port_8val,Port_9val, Port_10val); wait(0.002f); if(ReadClock.read() > ClockOut) { ended = 1; ReadClock.stop(); ReadClock.reset(); } } AvgPort_1Val=Port_1ValSum/Count; //AvgPort_1Val =ceilf(AvgPort_1Val * 10) / 10; AvgPort_2Val=Port_2ValSum/Count; //AvgPort_2Val =ceilf(AvgPort_2Val * 10) / 10; AvgPort_3Val=Port_3ValSum/Count; //AvgPort_3Val =ceilf(AvgPort_3Val * 10) / 10; AvgPort_4Val=Port_4ValSum/Count; //AvgPort_4Val =ceilf(AvgPort_4Val * 10) / 10; AvgPort_5Val=Port_5ValSum/Count; //AvgPort_5Val =ceilf(AvgPort_5Val * 10) / 10; AvgPort_6Val=Port_6ValSum/Count; //AvgPort_6Val =ceilf(AvgPort_6Val * 10) / 10; AvgPort_7Val=Port_7ValSum/Count; //AvgPort_7Val =ceilf(AvgPort_7Val * 10) / 10; AvgPort_8Val=Port_8ValSum/Count; //AvgPort_8Val =ceilf(AvgPort_8Val * 10) / 10; AvgPort_9Val=Port_9ValSum/Count; //AvgPort_9Val =ceilf(AvgPort_9Val * 10) / 10; AvgPort_10Val=Port_10ValSum/Count; //AvgPort_10Val =ceilf(AvgPort_10Val * 10) / 10; printf("%f %f %f %f %f %f %f %f %f %f %d \r\n", AvgPort_1Val,AvgPort_2Val,AvgPort_3Val,AvgPort_4Val,AvgPort_5Val,AvgPort_6Val,AvgPort_7Val,AvgPort_8Val,AvgPort_9Val,AvgPort_10Val,Count); wait(2); } }