
aaa
Fork of 0NicksCoursework-lg by
Components/components.cpp
- Committer:
- liam_grazier
- Date:
- 2018-01-09
- Revision:
- 8:582ac4c5a524
- Child:
- 9:e27b3f34de24
File content as of revision 8:582ac4c5a524:
#include "mbed.h" #include "components.hpp" #include "lglcd.h" #include "time.h" #include "stdio.h" #define RED_DONE 1 #define YELLOW_DONE 2 //Digital outputs DigitalIn onBoardSwitch(USER_BUTTON); DigitalOut onBoardLED(LED1); DigitalOut redLED(PE_15); DigitalOut yellowLED(PB_10); DigitalOut greenLED(PB_11); SDBlockDevice sd(PB_5, D12, D13, D10);// miso, sclk, cs Mutex Lock1; Mutex Lock2; Mutex Remove; //Inputs time_t rawtime; struct tm * timeinfo; int year, month ,day, hour, minute, second; char input = 0; char jtime[32]; char jdate[32]; char jdate1[32]; DigitalIn SW1(PE_12); DigitalIn SW2(PE_14); //Serial pc(USBTX, USBRX); AnalogIn adcIn(PA_0); //Environmental Sensor driver #ifdef BME BME280 sensor(D14, D15); #else BMP280 sensor(D14, D15); #endif lglcd mylcd(D7,D6,D5,D4,D3,D2); //POWER ON SELF TEST void post() { //posttest } void runanalysis(void){ while(1){ Lock1.lock(); double temp = sensor.getTemperature(); double pressure = sensor.getPressure(); double lightin = adcIn; char TEM[6]; char PRE[5]; char LIGHT[6]; //printf("REFRESH SENSORS\n\r"); sprintf(TEM,"%.2f", temp); sprintf(PRE,"%.2f", pressure); sprintf(LIGHT,"%.2f", lightin); mylcd.setline(1,1); mylcd.write("L:"); if(lightin > 0.7 && lightin < 0.9) { mylcd.setline(1,4); mylcd.write("|||||||||MAX"); } else if(lightin > 0.55 && lightin < 0.69) { mylcd.setline(1,4); mylcd.write("||||||| "); } else if(lightin > 0.5 && lightin < 0.54) { mylcd.setline(1,4); mylcd.write("||||| "); } else if(lightin > 0.4 && lightin < 0.54) { mylcd.setline(1,4); mylcd.write("||| "); } else if(lightin > 0.3 && lightin < 0.39) { mylcd.setline(1,4); mylcd.write("|| "); } else if(lightin > 0.06 && lightin < 0.29) { mylcd.setline(1,4); mylcd.write("LOW LIGHT "); } else if(lightin < 0.05) { mylcd.setline(1,4); mylcd.write(" "); mylcd.setline(1,4); mylcd.write("disconnected"); } mylcd.setline(2,1); mylcd.write("P:"); mylcd.write(PRE); mylcd.setline(2,10); mylcd.write("T:"); mylcd.write(TEM); wait(0.01); Lock1.unlock(); Thread::signal_wait(SIG_READY); } } void sdwrite(void) { while(1) { Lock2.lock(); double P = sensor.getPressure(); double L = adcIn; double t = sensor.getTemperature(); char tem[6]; char pre[5]; char light[6]; char com[1]; strcpy(com, ","); sprintf(pre,"%.2f", P); sprintf(tem,"%.2f",t); printf(tem); sprintf(light,"%.2f\n\r", L); time_t seconds = time(NULL); strftime(jdate1, 32, "%F", localtime(&seconds)); strftime(jdate, 32, "%F\n\r", localtime(&seconds)); strftime(jtime, 32, "%X\n\r", localtime(&seconds)); FATFileSystem fs("sd", &sd); char filename[32]; char suffix[4]; char prefix[4]; strcpy(prefix,"/sd/"); strcpy(suffix,".txt"); Lock1.lock(); sprintf(filename,"%s%s%s",prefix,jdate1,suffix); Lock1.unlock(); FILE* fp = fopen(filename,"a"); if (fp == NULL) { errorCode(FATAL); printf("SD FAIL\n\r"); mylcd.clear(); mylcd.setline(1,0); mylcd.write("SD FAIL"); } if (fp != NULL){ //printf("SD Success\n\r"); // fprintf(fp,"%s\n\r", "*C, mbar, light level 0-1 scale"); fprintf(fp,"%s",jdate);//date fprintf(fp,"%s",com); fprintf(fp,"%s",jtime);//time fprintf(fp,"%s",com); fprintf(fp,"%s",pre); fprintf(fp,"%s",com); fprintf(fp,"%s",tem); fprintf(fp,"%s",com); fprintf(fp,"%s\n\r",light); wait(0.01); } fclose(fp); Lock2.unlock(); Thread::signal_wait(SIG_READY2); } } void sdrun(void) { if ( sd.init() != 0) { printf("Init failed\n\r"); mylcd.clear(); mylcd.setline(1,1); mylcd.write("CANNOT INIT SD"); errorCode(FATAL); } if( sd.init() == 0){ printf("Init Success \n\r"); mylcd.clear(); mylcd.setline(1,1); mylcd.write("SD GOOD MAN"); wait(0.5); //flash the SD error / good code! } } void sdcheck(void){ if ( sd.init() != 0) { printf("Init failed \n\r"); mylcd.clear(); mylcd.setline(1,1); mylcd.write("CANNOT INIT SD\n\r"); errorCode(FATAL); } if( sd.init() == 0){ //printf("SD Good\n\r"); } } void sdremove(void) { while(1){ Thread::signal_wait(SIG_REMOVE); mylcd.clear(); Remove.lock(); sd.deinit(); mylcd.clear(); Lock1.lock(); mylcd.setline(2,0); greenLED = 1; mylcd.write("R"); Lock1.unlock(); printf("SD REMOVED\n\r"); errorCode(FATAL); Remove.unlock(); } } void lcdstart(void){ mylcd.clear(); mylcd.setline(1,1); mylcd.write("INIT. SYSTEM"); mylcd.setline(2,1); mylcd.write("ELEC351"); } void errorCode(ELEC350_ERROR_CODE err) { switch (err) { case OK: greenLED = 1; wait(1.0); greenLED = 0; return; case FATAL: while(1) { redLED = 1; wait(0.1); redLED = 0; wait(0.1); } } } ///dougs code void DispTime(void) { time_t Count = time(NULL); //Read the RTC Time printf("Current Time - %s\n\r", ctime(&Count)); //Print the current time } void setuptime(void) { /*Initialising the time for our program to easy edit*/ time ( &rawtime ); timeinfo = localtime ( &rawtime ); /*Setting the time to the deadline time*/ /*Same as button Code*/ //Set the initialisation time to: Tuesday 9th January 2018, 16:00:00. //set_time(1515513600); //Initialisation of the times. time ( &rawtime ); timeinfo = localtime ( &rawtime ); //Displays the initialisation time DispTime(); /*End the initialisation */ } void runtime(void){ while(1) //When added to the main code this will be changed to a while "SETDATE" { /*promts the user to input which edit they would like*/ printf ("What part do you want to edit? Time(T)/All(A).\n\r"); fflush(stdout); scanf ("%s",&input); /*Switch case input*/ switch(input) { case 'T': //Sequential Entering, Hour, Minute, Second respectively printf ("Enter hour:(00-23) \n\r"); fflush(stdout); scanf ("%d",&hour); printf ("Enter minute:(00-59) \n\r"); fflush(stdout); scanf ("%d",&minute); printf ("Enter second:(00-59) \n\r"); fflush(stdout); scanf ("%d",&second); break; /*Case A ----- All values Update sequence*/ case 'A': printf ("Enter year:(0-9999) \n\r"); fflush(stdout); scanf ("%d",&year); printf ("Enter month:(01-12) \n\r"); fflush(stdout); scanf ("%d",&month); printf ("Enter day:(01-31) \n\r"); fflush(stdout); scanf ("%d",&day); printf ("Enter hour:(00-23)\n\r"); fflush(stdout); scanf ("%d",&hour); printf ("Enter minute:(00-59) \n\r"); fflush(stdout); scanf ("%d",&minute); printf ("Enter second:(00-59) \n\r"); fflush(stdout); scanf ("%d",&second); break; /*default to reset ----- Month Update sequence*/ default: printf ("Invalid\n\r"); set_time(1515513600); } /*Updating all the timings after the user has input all the data*/ /*Put here as once the user has finished editing it does a batch update*/ timeinfo->tm_year = year - 1900; timeinfo->tm_mon = month - 1; timeinfo->tm_mday = day; timeinfo->tm_hour = hour; timeinfo->tm_min = minute; timeinfo->tm_sec = second; time_t CurrTime = mktime(timeinfo); //Convert the to UNIX time set_time(CurrTime); //Sets time using the UNIX time DispTime(); return; //Display the new time } } void rundate(void){ while(1) //When added to the main code this will be changed to a while "SETDATE" { /*promts the user to input which edit they would like*/ printf ("What part do you want to edit? Date(D)/All(A).\n\r"); fflush(stdout); scanf ("%s",&input); /*Switch case input*/ switch(input) { /*Case D ----- Date Update sequence*/ case 'D': //Sequential Entering, Day, Month, Year respectively printf ("Enter day:(01-31) \n\r"); fflush(stdout); scanf ("%d",&day); printf ("Enter month:(01-12) \n\r"); fflush(stdout); scanf ("%d",&month); printf ("Enter year:(1970-9999) \n\r"); fflush(stdout); scanf ("%d",&year); break; /*Case A ----- All values Update sequence*/ case 'A': printf ("Enter year:(0-9999) \n\r"); fflush(stdout); scanf ("%d",&year); printf ("Enter month:(01-12) \n\r"); fflush(stdout); scanf ("%d",&month); printf ("Enter day:(01-31) \n\r"); fflush(stdout); scanf ("%d",&day); printf ("Enter hour:(00-23)\n\r"); fflush(stdout); scanf ("%d",&hour); printf ("Enter minute:(00-59) \n\r"); fflush(stdout); scanf ("%d",&minute); printf ("Enter second:(00-59) \n\r"); fflush(stdout); scanf ("%d",&second); break; /*default to reset ----- Month Update sequence*/ default: printf ("Invalid\n\r"); set_time(1515513600); } /*Updating all the timings after the user has input all the data*/ /*Put here as once the user has finished editing it does a batch update*/ timeinfo->tm_year = year - 1900; timeinfo->tm_mon = month - 1; timeinfo->tm_mday = day; timeinfo->tm_hour = hour; timeinfo->tm_min = minute; timeinfo->tm_sec = second; time_t CurrTime = mktime(timeinfo); //Convert the to UNIX time set_time(CurrTime); //Sets time using the UNIX time DispTime(); return; //Display the new time } }