Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@1:d82569d51964, 2016-11-06 (annotated)
- Committer:
- eseifert
- Date:
- Sun Nov 06 18:25:53 2016 +0000
- Revision:
- 1:d82569d51964
- Parent:
- 0:fb6ea61c315b
- Child:
- 2:f9713d90a13c
ok, now I'm done
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| eseifert | 0:fb6ea61c315b | 1 | #include "mbed.h" |
| eseifert | 0:fb6ea61c315b | 2 | #include "TSISensor.h" |
| eseifert | 0:fb6ea61c315b | 3 | #include "SLCD.h" |
| eseifert | 0:fb6ea61c315b | 4 | #define TSILIMIT 0.99 |
| eseifert | 0:fb6ea61c315b | 5 | #define LCDCHARLEN 10 |
| eseifert | 0:fb6ea61c315b | 6 | #define DATAINTERVAL 0.5 |
| eseifert | 0:fb6ea61c315b | 7 | #define PROGNAME "kl46z_recursive_count\n\r" |
| eseifert | 0:fb6ea61c315b | 8 | #define BUTTONTIME 0.2 |
| eseifert | 0:fb6ea61c315b | 9 | #define LCDTITLE "rCNT" |
| eseifert | 0:fb6ea61c315b | 10 | #define TITLEWAIT 2.0 |
| eseifert | 0:fb6ea61c315b | 11 | #define NUMBUTS 2 |
| eseifert | 0:fb6ea61c315b | 12 | #define LBUT PTC12 // port addresses for buttons |
| eseifert | 0:fb6ea61c315b | 13 | #define RBUT PTC3 |
| eseifert | 1:d82569d51964 | 14 | #define STOPPEDSTATE 0 |
| eseifert | 1:d82569d51964 | 15 | #define COUNTINGSTATE 1 |
| eseifert | 0:fb6ea61c315b | 16 | |
| eseifert | 0:fb6ea61c315b | 17 | DigitalOut gpo(D0); |
| eseifert | 0:fb6ea61c315b | 18 | DigitalOut led0(LED_RED); |
| eseifert | 0:fb6ea61c315b | 19 | SLCD slcd; |
| eseifert | 0:fb6ea61c315b | 20 | Serial pc(USBTX, USBRX); |
| eseifert | 0:fb6ea61c315b | 21 | PwmOut gled(LED_GREEN); |
| eseifert | 0:fb6ea61c315b | 22 | PwmOut rled(LED_RED); |
| eseifert | 0:fb6ea61c315b | 23 | TSISensor tsi; |
| eseifert | 0:fb6ea61c315b | 24 | Timer ButtonTimer; |
| eseifert | 0:fb6ea61c315b | 25 | DigitalIn buttons[NUMBUTS] = {LBUT, RBUT}; |
| eseifert | 0:fb6ea61c315b | 26 | |
| eseifert | 0:fb6ea61c315b | 27 | char lcdData[LCDCHARLEN]; |
| eseifert | 1:d82569d51964 | 28 | float tsidata = 0.0; |
| eseifert | 1:d82569d51964 | 29 | int count_num = 0; |
| eseifert | 1:d82569d51964 | 30 | int count_min = 0; |
| eseifert | 1:d82569d51964 | 31 | bool stateToggle = 0; |
| eseifert | 0:fb6ea61c315b | 32 | |
| eseifert | 0:fb6ea61c315b | 33 | void LCDMess(char *lMess){ |
| eseifert | 0:fb6ea61c315b | 34 | slcd.Home(); |
| eseifert | 0:fb6ea61c315b | 35 | slcd.clear(); |
| eseifert | 0:fb6ea61c315b | 36 | slcd.printf(lMess); |
| eseifert | 0:fb6ea61c315b | 37 | } |
| eseifert | 0:fb6ea61c315b | 38 | |
| eseifert | 0:fb6ea61c315b | 39 | void initialize_global_vars() |
| eseifert | 0:fb6ea61c315b | 40 | { |
| eseifert | 0:fb6ea61c315b | 41 | pc.printf(PROGNAME); |
| eseifert | 0:fb6ea61c315b | 42 | // set up DAQ timer |
| eseifert | 0:fb6ea61c315b | 43 | // set up DAQ timers |
| eseifert | 0:fb6ea61c315b | 44 | ButtonTimer.start(); |
| eseifert | 0:fb6ea61c315b | 45 | ButtonTimer.reset(); |
| eseifert | 0:fb6ea61c315b | 46 | } |
| eseifert | 0:fb6ea61c315b | 47 | |
| eseifert | 0:fb6ea61c315b | 48 | void showTitle() |
| eseifert | 0:fb6ea61c315b | 49 | { |
| eseifert | 0:fb6ea61c315b | 50 | LCDMess(LCDTITLE); |
| eseifert | 0:fb6ea61c315b | 51 | wait(TITLEWAIT); |
| eseifert | 0:fb6ea61c315b | 52 | return; |
| eseifert | 0:fb6ea61c315b | 53 | } |
| eseifert | 0:fb6ea61c315b | 54 | |
| eseifert | 0:fb6ea61c315b | 55 | void count_backwards(int cnt, int min){ |
| eseifert | 1:d82569d51964 | 56 | if(!buttons[1]){ |
| eseifert | 1:d82569d51964 | 57 | stateToggle = 0; |
| eseifert | 1:d82569d51964 | 58 | cnt = 0; |
| eseifert | 1:d82569d51964 | 59 | showTitle(); |
| eseifert | 1:d82569d51964 | 60 | } |
| eseifert | 0:fb6ea61c315b | 61 | gled = !gled; |
| eseifert | 0:fb6ea61c315b | 62 | pc.printf("\tT-%d\n\r", cnt); |
| eseifert | 0:fb6ea61c315b | 63 | sprintf (lcdData,"tz%d",cnt); |
| eseifert | 0:fb6ea61c315b | 64 | LCDMess(lcdData); |
| eseifert | 0:fb6ea61c315b | 65 | wait(DATAINTERVAL); |
| eseifert | 0:fb6ea61c315b | 66 | // tail recursion to correct the direction of counting |
| eseifert | 0:fb6ea61c315b | 67 | if(cnt > min){ |
| eseifert | 0:fb6ea61c315b | 68 | count_backwards(cnt-1,min); |
| eseifert | 0:fb6ea61c315b | 69 | } |
| eseifert | 0:fb6ea61c315b | 70 | } |
| eseifert | 0:fb6ea61c315b | 71 | |
| eseifert | 1:d82569d51964 | 72 | void showData(int cnt){ |
| eseifert | 1:d82569d51964 | 73 | sprintf (lcdData,"%d",cnt); |
| eseifert | 1:d82569d51964 | 74 | LCDMess(lcdData); |
| eseifert | 1:d82569d51964 | 75 | } |
| eseifert | 1:d82569d51964 | 76 | |
| eseifert | 0:fb6ea61c315b | 77 | int main() |
| eseifert | 0:fb6ea61c315b | 78 | { |
| eseifert | 0:fb6ea61c315b | 79 | initialize_global_vars(); |
| eseifert | 0:fb6ea61c315b | 80 | showTitle(); |
| eseifert | 0:fb6ea61c315b | 81 | pc.printf(PROGNAME); |
| eseifert | 0:fb6ea61c315b | 82 | while (true) { |
| eseifert | 0:fb6ea61c315b | 83 | rled = !rled; |
| eseifert | 0:fb6ea61c315b | 84 | tsidata = tsi.readPercentage(); |
| eseifert | 0:fb6ea61c315b | 85 | count_num = floor(tsidata*51); |
| eseifert | 0:fb6ea61c315b | 86 | if(count_num > 2){ |
| eseifert | 0:fb6ea61c315b | 87 | pc.printf("\n Count down from: %d\n\r", count_num); |
| eseifert | 1:d82569d51964 | 88 | showData(count_num); |
| eseifert | 0:fb6ea61c315b | 89 | } |
| eseifert | 0:fb6ea61c315b | 90 | wait(DATAINTERVAL); |
| eseifert | 0:fb6ea61c315b | 91 | if (ButtonTimer > BUTTONTIME) { |
| eseifert | 0:fb6ea61c315b | 92 | if(!buttons[0]){ |
| eseifert | 1:d82569d51964 | 93 | stateToggle = 1; |
| eseifert | 0:fb6ea61c315b | 94 | } |
| eseifert | 1:d82569d51964 | 95 | if(!buttons[1]){ |
| eseifert | 1:d82569d51964 | 96 | stateToggle = 0; |
| eseifert | 1:d82569d51964 | 97 | count_num = 0; |
| eseifert | 1:d82569d51964 | 98 | showTitle(); |
| eseifert | 1:d82569d51964 | 99 | } |
| eseifert | 0:fb6ea61c315b | 100 | } |
| eseifert | 0:fb6ea61c315b | 101 | ButtonTimer.reset(); |
| eseifert | 1:d82569d51964 | 102 | |
| eseifert | 1:d82569d51964 | 103 | switch (stateToggle) { |
| eseifert | 1:d82569d51964 | 104 | case STOPPEDSTATE: |
| eseifert | 1:d82569d51964 | 105 | showData(count_num); |
| eseifert | 1:d82569d51964 | 106 | rled = 1.0; |
| eseifert | 1:d82569d51964 | 107 | gled = 0.0; |
| eseifert | 1:d82569d51964 | 108 | break; |
| eseifert | 1:d82569d51964 | 109 | case COUNTINGSTATE: |
| eseifert | 1:d82569d51964 | 110 | if(stateToggle) { |
| eseifert | 1:d82569d51964 | 111 | count_backwards(count_num, count_min); |
| eseifert | 1:d82569d51964 | 112 | } |
| eseifert | 1:d82569d51964 | 113 | rled = 0.0; |
| eseifert | 1:d82569d51964 | 114 | gled = !gled; |
| eseifert | 1:d82569d51964 | 115 | break; |
| eseifert | 1:d82569d51964 | 116 | } |
| eseifert | 0:fb6ea61c315b | 117 | } |
| eseifert | 0:fb6ea61c315b | 118 | } |