Base program for project 2 NMHU

Dependencies:   SLCD mbed-rtos mbed

Fork of rtos_basic by mbed official

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 #include "SLCD.h"
00004 
00005 #define RANDLIMIT 2000
00006 #define RANDOFFSET 200
00007 #define T1INTERVAL 750 // ms
00008 #define T2INTERVAL 500 // ms
00009 #define BUTTON_INT 100 //ms
00010 #define NUMSTATES 2
00011 #define GDISPLAY 0
00012 #define RDISPLAY 1
00013 #define LCDLEN 10
00014 #define LEDON 0
00015 #define LEDOFF 1
00016 
00017 SLCD slcd; //define LCD display
00018  
00019 DigitalOut gLed(LED_GREEN);
00020 DigitalOut rLed(LED_RED);
00021 int LButtonState;
00022 DigitalIn LftButton(PTC3);
00023 int displayState;
00024 char LCDActual[LCDLEN];
00025 
00026 
00027 void LCDMess(char *lMess){
00028         slcd.Home();
00029         slcd.clear();
00030         slcd.printf(lMess);
00031 } 
00032 void LCDdis_thread(void const *args){
00033     while(true) {
00034         LCDMess(LCDActual);
00035         Thread::wait(BUTTON_INT);
00036     }
00037 }
00038 void button_thread(void const *args) {
00039     int LButtonState;
00040     while (true) {
00041         LButtonState = !LftButton;
00042         if (LButtonState) {  //Change data that is displayed cycle through states 
00043             displayState++;
00044             displayState = displayState % NUMSTATES;  
00045         }
00046         Thread::wait(BUTTON_INT);
00047     }
00048 }
00049 
00050 
00051 void gLed_thread(void const *args) {
00052     int interval;
00053     while (true) {
00054         gLed = !gLed;
00055         interval = rand()% RANDLIMIT + RANDOFFSET;  
00056         if(displayState == GDISPLAY) {
00057             sprintf (LCDActual, "Y.%3d", interval/10);
00058         }         
00059         Thread::wait(interval);
00060     }
00061 }
00062  
00063 int main() {
00064     srand(time(NULL));
00065     int interval;
00066     Thread gthread(gLed_thread);
00067     Thread bthread(button_thread);
00068     Thread lthread(LCDdis_thread);
00069     
00070     rLed = LEDON;
00071     gLed = LEDOFF;
00072     
00073     while (true) { // Red LED thread
00074         rLed = !rLed;
00075         interval = rand()% RANDLIMIT + RANDOFFSET; 
00076         if(displayState == RDISPLAY) {
00077             sprintf (LCDActual, "R.%d",interval/10);
00078         }      
00079         Thread::wait(interval);
00080     }
00081 }