Base program for project 2 NMHU
Dependencies: SLCD mbed-rtos mbed
Fork of rtos_basic by
main.cpp@7:93ca18251991, 2015-02-22 (annotated)
- 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?
User | Revision | Line number | New 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 | } |