Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Final351CW_FINAL 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
}
}
