Base program for project 2 NMHU

Dependencies:   SLCD mbed-rtos mbed

Fork of rtos_basic by mbed official

Committer:
scohennm
Date:
Sun Feb 22 18:31:04 2015 +0000
Revision:
7:93ca18251991
Parent:
3:c92e21f305d8
Random LED flasher and LCD. display using RTOS library. NMHU project 2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 1:491820ee784d 1 #include "mbed.h"
emilmont 1:491820ee784d 2 #include "rtos.h"
scohennm 7:93ca18251991 3 #include "SLCD.h"
scohennm 7:93ca18251991 4
scohennm 7:93ca18251991 5 #define RANDLIMIT 2000
scohennm 7:93ca18251991 6 #define RANDOFFSET 200
scohennm 7:93ca18251991 7 #define T1INTERVAL 750 // ms
scohennm 7:93ca18251991 8 #define T2INTERVAL 500 // ms
scohennm 7:93ca18251991 9 #define BUTTON_INT 100 //ms
scohennm 7:93ca18251991 10 #define NUMSTATES 2
scohennm 7:93ca18251991 11 #define GDISPLAY 0
scohennm 7:93ca18251991 12 #define RDISPLAY 1
scohennm 7:93ca18251991 13 #define LCDLEN 10
scohennm 7:93ca18251991 14 #define LEDON 0
scohennm 7:93ca18251991 15 #define LEDOFF 1
scohennm 7:93ca18251991 16
scohennm 7:93ca18251991 17 SLCD slcd; //define LCD display
emilmont 1:491820ee784d 18
scohennm 7:93ca18251991 19 DigitalOut gLed(LED_GREEN);
scohennm 7:93ca18251991 20 DigitalOut rLed(LED_RED);
scohennm 7:93ca18251991 21 int LButtonState;
scohennm 7:93ca18251991 22 DigitalIn LftButton(PTC3);
scohennm 7:93ca18251991 23 int displayState;
scohennm 7:93ca18251991 24 char LCDActual[LCDLEN];
scohennm 7:93ca18251991 25
scohennm 7:93ca18251991 26
scohennm 7:93ca18251991 27 void LCDMess(char *lMess){
scohennm 7:93ca18251991 28 slcd.Home();
scohennm 7:93ca18251991 29 slcd.clear();
scohennm 7:93ca18251991 30 slcd.printf(lMess);
scohennm 7:93ca18251991 31 }
scohennm 7:93ca18251991 32 void LCDdis_thread(void const *args){
scohennm 7:93ca18251991 33 while(true) {
scohennm 7:93ca18251991 34 LCDMess(LCDActual);
scohennm 7:93ca18251991 35 Thread::wait(BUTTON_INT);
scohennm 7:93ca18251991 36 }
scohennm 7:93ca18251991 37 }
scohennm 7:93ca18251991 38 void button_thread(void const *args) {
scohennm 7:93ca18251991 39 int LButtonState;
emilmont 1:491820ee784d 40 while (true) {
scohennm 7:93ca18251991 41 LButtonState = !LftButton;
scohennm 7:93ca18251991 42 if (LButtonState) { //Change data that is displayed cycle through states
scohennm 7:93ca18251991 43 displayState++;
scohennm 7:93ca18251991 44 displayState = displayState % NUMSTATES;
scohennm 7:93ca18251991 45 }
scohennm 7:93ca18251991 46 Thread::wait(BUTTON_INT);
scohennm 7:93ca18251991 47 }
scohennm 7:93ca18251991 48 }
scohennm 7:93ca18251991 49
scohennm 7:93ca18251991 50
scohennm 7:93ca18251991 51 void gLed_thread(void const *args) {
scohennm 7:93ca18251991 52 int interval;
scohennm 7:93ca18251991 53 while (true) {
scohennm 7:93ca18251991 54 gLed = !gLed;
scohennm 7:93ca18251991 55 interval = rand()% RANDLIMIT + RANDOFFSET;
scohennm 7:93ca18251991 56 if(displayState == GDISPLAY) {
scohennm 7:93ca18251991 57 sprintf (LCDActual, "Y.%3d", interval/10);
scohennm 7:93ca18251991 58 }
scohennm 7:93ca18251991 59 Thread::wait(interval);
emilmont 1:491820ee784d 60 }
emilmont 1:491820ee784d 61 }
emilmont 1:491820ee784d 62
emilmont 1:491820ee784d 63 int main() {
scohennm 7:93ca18251991 64 srand(time(NULL));
scohennm 7:93ca18251991 65 int interval;
scohennm 7:93ca18251991 66 Thread gthread(gLed_thread);
scohennm 7:93ca18251991 67 Thread bthread(button_thread);
scohennm 7:93ca18251991 68 Thread lthread(LCDdis_thread);
emilmont 1:491820ee784d 69
scohennm 7:93ca18251991 70 rLed = LEDON;
scohennm 7:93ca18251991 71 gLed = LEDOFF;
scohennm 7:93ca18251991 72
scohennm 7:93ca18251991 73 while (true) { // Red LED thread
scohennm 7:93ca18251991 74 rLed = !rLed;
scohennm 7:93ca18251991 75 interval = rand()% RANDLIMIT + RANDOFFSET;
scohennm 7:93ca18251991 76 if(displayState == RDISPLAY) {
scohennm 7:93ca18251991 77 sprintf (LCDActual, "R.%d",interval/10);
scohennm 7:93ca18251991 78 }
scohennm 7:93ca18251991 79 Thread::wait(interval);
emilmont 1:491820ee784d 80 }
emilmont 1:491820ee784d 81 }