lye cypher / Mbed 2 deprecated kl46z_recursive_count

Dependencies:   SLCD TSI mbed

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?

UserRevisionLine numberNew 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 }