lye cypher
/
kl46z_recursive_count
SSD541_HW12.2
Diff: main.cpp
- Revision:
- 0:fb6ea61c315b
- Child:
- 1:d82569d51964
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Nov 06 16:54:17 2016 +0000 @@ -0,0 +1,91 @@ +#include "mbed.h" +#include "TSISensor.h" +#include "SLCD.h" +#define TSILIMIT 0.99 +#define LCDCHARLEN 10 +#define DATAINTERVAL 0.5 +#define PROGNAME "kl46z_recursive_count\n\r" +#define BUTTONTIME 0.2 +#define LCDTITLE "rCNT" +#define TITLEWAIT 2.0 +#define NUMBUTS 2 +#define LBUT PTC12 // port addresses for buttons +#define RBUT PTC3 + +DigitalOut gpo(D0); +DigitalOut led0(LED_RED); +SLCD slcd; +Serial pc(USBTX, USBRX); +PwmOut gled(LED_GREEN); +PwmOut rled(LED_RED); +TSISensor tsi; +Timer ButtonTimer; +DigitalIn buttons[NUMBUTS] = {LBUT, RBUT}; + +char lcdData[LCDCHARLEN]; +float tsidata = 0.0; +int count_num = 0; +int count_min = 0; + +void LCDMess(char *lMess){ + slcd.Home(); + slcd.clear(); + slcd.printf(lMess); +} + +void initialize_global_vars() +{ + pc.printf(PROGNAME); + // set up DAQ timer + // set up DAQ timers + ButtonTimer.start(); + ButtonTimer.reset(); +} + +void showTitle() +{ + LCDMess(LCDTITLE); + wait(TITLEWAIT); + return; +} + +void count_backwards(int cnt, int min){ + gled = !gled; + pc.printf("\tT-%d\n\r", cnt); + sprintf (lcdData,"tz%d",cnt); + LCDMess(lcdData); + wait(DATAINTERVAL); + // tail recursion to correct the direction of counting + if(cnt > min){ + count_backwards(cnt-1,min); + } +} + +int main() +{ + initialize_global_vars(); + showTitle(); + pc.printf(PROGNAME); + while (true) { + rled = !rled; + tsidata = tsi.readPercentage(); + count_num = floor(tsidata*51); + if(count_num > 2){ + pc.printf("\n Count down from: %d\n\r", count_num); + sprintf (lcdData,"%d",count_num); + LCDMess(lcdData); + } + wait(DATAINTERVAL); + if (ButtonTimer > BUTTONTIME) { + if(!buttons[0]){ + count_backwards(count_num, count_min); + showTitle(); + } + if(!buttons[1]){ + count_num = 0; + showTitle(); + } + } + ButtonTimer.reset(); + } +} \ No newline at end of file