Final MEMBITT Code

Dependencies:   4DGL-uLCD-SE SDFileSystem mbed

Fork of reminder_main by Senior Design

main.cpp

Committer:
deronmai
Date:
2016-10-28
Revision:
0:fef6b4d65600
Child:
1:29de429a7e15

File content as of revision 0:fef6b4d65600:

#include "mbed.h"
#include <string>
#include <vector>

#include "utils.h"

DigitalOut myled(LED1);

Serial pc(USBTX, USBRX); // tx, rx .... for testing purposes (remove later)

// Global vars
time_t ct_time;
struct tm * timeinfo;

void clock_main(struct reminder *current_reminder);
int estimate_time(struct reminder current_reminder);

enum Day {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};

struct schedule {
    
    // will be ordered by time - should do this processing on the desktop
    vector<struct reminder> reminder_list;
};

int main() {
    
    
    // in real project, we will set the time via the internet
    set_time(1256729737);  // Set RTC time to Wed, 28 Oct 2009 11:35:37
    time_t clock;
    // localtime(


    reminder test_reminder;
    // test_reminder.tm_time.tm_sec = 0;
    test_reminder.tm_time.tm_min = 36;
    test_reminder.tm_time.tm_hour = 11;
    for (int i = 0; i < 7; i++) {
        if (i == 1 || i == 3 || i == 4 || i == 5) test_reminder.reminder_days[i] = 1; // set MWHF
        else test_reminder.reminder_days[i] = 0;
    }
    
    
    // test_reminder.tm_time.tm_mday = 1; // day of the month
    // test_reminder.tm_time.tm_mon = 0; // months since January
    // test_reminder.tm_time.tm_year = 0; // years since 1970
    schedule myschedule;
    myschedule.reminder_list.push_back(test_reminder);
    
    int flag = 0;
    
    Day currentDay = Wednesday;
    int sleep_time;
    while(1) {
        
        for (int i = 0; i < myschedule.reminder_list.size(); i++) {
            timeinfo = localtime (&clock); // ct_time not set right now
            time(&clock);
            pc.printf("Time as a basic string = %s\n\r", ctime(&clock));

            while (!flag) {
                if (myschedule.reminder_list[i].reminder_days[currentDay] != 1) {
                    // pc.printf("%i\n\r", myschedule.reminder_list[i].reminder_days[currentDay]);
                    i++; // current reminder not set to go off today; go to next reminder
                }
                // may need to check if the current reminder is not last one, otherwise out of bounds ERROR
                else {
                    sleep_time = estimate_time(myschedule.reminder_list[i]);
                    
                    pc.printf("sleep_time is %i\n\r", sleep_time);
                    flag = 1;
                    // sleep(sleep_time); // try and sleep here
                    // wait(sleep_time); // replace this wait function with a smart sleep to save power and then poll after that
                }
                //wait(1);
            }
            
            
            if (timeinfo->tm_min == myschedule.reminder_list[i].tm_time.tm_min && timeinfo->tm_hour == myschedule.reminder_list[i].tm_time.tm_hour) {
                myled = true;
            }
            wait(1);
        }
        /*
        myled = 1;
        wait(0.2);
        myled = 0;
        wait(0.2); 
        */
        
        
    }
}

int estimate_time(struct reminder current_reminder) {
    // estimates the remaining time until the next reminder so program can sleep till then to save battery
    
    int estimated_time = (60*timeinfo->tm_hour) - (60*current_reminder.tm_time.tm_hour) +
                        (timeinfo->tm_min - current_reminder.tm_time.tm_min) + 60;
                        // convert hours to min, find estimated time before reminder plus 1 hour (60 min)
                        
    return estimated_time;
                            
    
    //if (current_reminder.reminder_days[currentDay] == 1) // 
    
}


/*
void clock_main(struct reminder *current_reminder) {
    
}
*/