rough draft - doesn't work

Dependencies:   TextLCD mbed-rtos mbed

main.cpp

Committer:
xueliz
Date:
2014-10-03
Revision:
3:6fad2a5b72e5
Parent:
2:91cb258f9745
Child:
4:f6eee8bb51c2

File content as of revision 3:6fad2a5b72e5:

#include "mbed.h"
#include "rtos.h"
#include "TextLCD.h"

#define RUN 0x1 
#define STOP 0x0

TextLCD lcd(p15, p16, p17, p18, p19, p20, TextLCD::LCD16x2);
Serial pc (USBTX, USBRX);
DigitalOut myled(LED1);

 

// global vars 
int mm [] = {0, 0};
int ss [] = {0, 0};
int MM [] = {0, 0};
int run_status = STOP;

// functions
void update_display(void const *args);
void update_mm(void const *args);
void update_ss(void const *args);
void update_MM(void const *args);

int main() {
    
    Thread thread_display(update_display);
    Thread thread_mm(update_mm);
    Thread thread_ss(update_ss);
    Thread thread_MM(update_MM);
    char input = 'z';

    while(1) {
        if ( input == 's') { 
            if (run_status==STOP) {
                thread_mm.signal_set(RUN);
                thread_ss.signal_set(RUN);
                thread_MM.signal_set(RUN);
                thread_display.signal_set(RUN);
                run_status = RUN;
            }
        }
        if ( input == 'p') {
            if (run_status==RUN) {
                run_status = STOP;
            }
        }
        if ( input == 'r') {
            if (run_status == 0) {
                mm[0] = mm[1] = 0;
                ss[0] = ss[1] = 0;
                MM[0] = MM[1] = 0;
                thread_display.signal_set(RUN);
            }
        }
        
        input = pc.getc();
    }

}

void update_display(void const *args) {
    while (1) {
        lcd.printf("%d%d:%d%d:%d%d\n\n", MM[1], MM[0],ss[1],ss[0],mm[1],mm[0]);
        Thread::signal_wait(RUN);
        while (run_status) {        
            lcd.printf("%d%d:%d%d:%d%d\n\n", MM[1], MM[0],ss[1],ss[0],mm[1],mm[0]);
            Thread::wait(10);
        }
    }
}

void update_mm(void const *args) {
    while(1){
        Thread::signal_wait(RUN);
        while (run_status) {
            Thread::wait(10);
            mm[0]++;
            if (mm[0] >= 10) {
                mm[0] = 0;
                mm[1]++;
            }
            if (mm[1] >= 10) {
                mm[0] = 0;
                mm[1] = 0;
            }   
        }
    }
}

void update_ss(void const *args) {
     while(1) {
        Thread::signal_wait(RUN);
        while (run_status) {
            Thread::wait(1000);
            ss[0]++;
            if (ss[0] >= 10) {
                ss[0] = 0;
                ss[1]++;
            }
            if (ss[1] >= 6) {
                ss[0] = 0;
                ss[1] = 0;
            }
        }
    }
}

void update_MM(void const *args) {
     while(1) {
        Thread::signal_wait(RUN);
        while (run_status) {
            Thread::wait(60000);
            MM[0]++;
            if (MM[0] >= 10) {
                MM[0] = 0;
                MM[1]++;
            }
            if (MM[1] >= 6) {
                MM[0] = 0;
                MM[1] = 0;
            }
        }
    }
}