Henry Herman
/
touchy_fg_bg
None
touchmachine.cpp@0:6ae7b9747a06, 2010-12-01 (annotated)
- Committer:
- henryeherman
- Date:
- Wed Dec 01 03:28:28 2010 +0000
- Revision:
- 0:6ae7b9747a06
A
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
henryeherman | 0:6ae7b9747a06 | 1 | #include "touchmachine.h" |
henryeherman | 0:6ae7b9747a06 | 2 | #include "mbed.h" |
henryeherman | 0:6ae7b9747a06 | 3 | #include "com.h" |
henryeherman | 0:6ae7b9747a06 | 4 | TouchButton touch0(p20,p19,p18, THRESHOLD, TIMER_THRESHOLD,"0"); |
henryeherman | 0:6ae7b9747a06 | 5 | TouchButton touch1(p17,p16,p15, THRESHOLD, TIMER_THRESHOLD,"1"); |
henryeherman | 0:6ae7b9747a06 | 6 | Handler handler("Serial"); |
henryeherman | 0:6ae7b9747a06 | 7 | |
henryeherman | 0:6ae7b9747a06 | 8 | void runser() { |
henryeherman | 0:6ae7b9747a06 | 9 | handler.run(); |
henryeherman | 0:6ae7b9747a06 | 10 | } |
henryeherman | 0:6ae7b9747a06 | 11 | |
henryeherman | 0:6ae7b9747a06 | 12 | TouchMachine::TouchMachine(char *c) { |
henryeherman | 0:6ae7b9747a06 | 13 | #ifdef DEBUGTM |
henryeherman | 0:6ae7b9747a06 | 14 | com.printf("INIT TM\r\n"); |
henryeherman | 0:6ae7b9747a06 | 15 | #endif |
henryeherman | 0:6ae7b9747a06 | 16 | touchState=WAITING; |
henryeherman | 0:6ae7b9747a06 | 17 | t0 = &touch0; |
henryeherman | 0:6ae7b9747a06 | 18 | t1 = &touch1; |
henryeherman | 0:6ae7b9747a06 | 19 | hand = &handler; |
henryeherman | 0:6ae7b9747a06 | 20 | com.attach(runser); |
henryeherman | 0:6ae7b9747a06 | 21 | |
henryeherman | 0:6ae7b9747a06 | 22 | }; |
henryeherman | 0:6ae7b9747a06 | 23 | |
henryeherman | 0:6ae7b9747a06 | 24 | void TouchMachine::check() { |
henryeherman | 0:6ae7b9747a06 | 25 | #ifdef DEBUGTM |
henryeherman | 0:6ae7b9747a06 | 26 | com.printf("CHECK BUTTONS\r\n"); |
henryeherman | 0:6ae7b9747a06 | 27 | #endif |
henryeherman | 0:6ae7b9747a06 | 28 | t0state = t0->checkState(); |
henryeherman | 0:6ae7b9747a06 | 29 | t1state = t1->checkState(); |
henryeherman | 0:6ae7b9747a06 | 30 | if (t0state && t1state) { |
henryeherman | 0:6ae7b9747a06 | 31 | #ifdef DEBUGTM1 |
henryeherman | 0:6ae7b9747a06 | 32 | com.printf("ERR-CHK\r\n"); |
henryeherman | 0:6ae7b9747a06 | 33 | #endif |
henryeherman | 0:6ae7b9747a06 | 34 | touchState=ERROR; |
henryeherman | 0:6ae7b9747a06 | 35 | }else if (t0state) { |
henryeherman | 0:6ae7b9747a06 | 36 | #ifdef DEBUGTM1 |
henryeherman | 0:6ae7b9747a06 | 37 | com.printf("ZERO-CHK\r\n"); |
henryeherman | 0:6ae7b9747a06 | 38 | #endif |
henryeherman | 0:6ae7b9747a06 | 39 | touchState=ZERO; |
henryeherman | 0:6ae7b9747a06 | 40 | } else if(t1state) { |
henryeherman | 0:6ae7b9747a06 | 41 | #ifdef DEBUGTM1 |
henryeherman | 0:6ae7b9747a06 | 42 | com.printf("ONE-CHK\r\n"); |
henryeherman | 0:6ae7b9747a06 | 43 | #endif |
henryeherman | 0:6ae7b9747a06 | 44 | touchState=ONE; |
henryeherman | 0:6ae7b9747a06 | 45 | } else { |
henryeherman | 0:6ae7b9747a06 | 46 | #ifdef DEBUGTM |
henryeherman | 0:6ae7b9747a06 | 47 | com.printf("WAIT-CHK\r\n"); |
henryeherman | 0:6ae7b9747a06 | 48 | #endif |
henryeherman | 0:6ae7b9747a06 | 49 | touchState=WAITING; |
henryeherman | 0:6ae7b9747a06 | 50 | } |
henryeherman | 0:6ae7b9747a06 | 51 | } |
henryeherman | 0:6ae7b9747a06 | 52 | |
henryeherman | 0:6ae7b9747a06 | 53 | bool TouchMachine::isMatch() { |
henryeherman | 0:6ae7b9747a06 | 54 | if (touchState==MATCH) { |
henryeherman | 0:6ae7b9747a06 | 55 | #ifdef DEBUGTM1 |
henryeherman | 0:6ae7b9747a06 | 56 | com.printf("MATCH-TM\r\n"); |
henryeherman | 0:6ae7b9747a06 | 57 | #endif |
henryeherman | 0:6ae7b9747a06 | 58 | return true; |
henryeherman | 0:6ae7b9747a06 | 59 | } |
henryeherman | 0:6ae7b9747a06 | 60 | return false; |
henryeherman | 0:6ae7b9747a06 | 61 | } |
henryeherman | 0:6ae7b9747a06 | 62 | |
henryeherman | 0:6ae7b9747a06 | 63 | bool TouchMachine::isOne() { |
henryeherman | 0:6ae7b9747a06 | 64 | if (touchState==ONE) { |
henryeherman | 0:6ae7b9747a06 | 65 | #ifdef DEBUGTM |
henryeherman | 0:6ae7b9747a06 | 66 | com.printf("ONE-TM\r\n"); |
henryeherman | 0:6ae7b9747a06 | 67 | #endif |
henryeherman | 0:6ae7b9747a06 | 68 | return true; |
henryeherman | 0:6ae7b9747a06 | 69 | } |
henryeherman | 0:6ae7b9747a06 | 70 | return false; |
henryeherman | 0:6ae7b9747a06 | 71 | } |
henryeherman | 0:6ae7b9747a06 | 72 | |
henryeherman | 0:6ae7b9747a06 | 73 | |
henryeherman | 0:6ae7b9747a06 | 74 | bool TouchMachine::isZero() { |
henryeherman | 0:6ae7b9747a06 | 75 | if (touchState==ZERO) { |
henryeherman | 0:6ae7b9747a06 | 76 | #ifdef DEBUGTM |
henryeherman | 0:6ae7b9747a06 | 77 | com.printf("ZERO-TM\r\n"); |
henryeherman | 0:6ae7b9747a06 | 78 | #endif |
henryeherman | 0:6ae7b9747a06 | 79 | return true; |
henryeherman | 0:6ae7b9747a06 | 80 | } |
henryeherman | 0:6ae7b9747a06 | 81 | return false; |
henryeherman | 0:6ae7b9747a06 | 82 | } |
henryeherman | 0:6ae7b9747a06 | 83 | |
henryeherman | 0:6ae7b9747a06 | 84 | bool TouchMachine::isWaiting() { |
henryeherman | 0:6ae7b9747a06 | 85 | if (touchState==WAITING) { |
henryeherman | 0:6ae7b9747a06 | 86 | #ifdef DEBUGTM |
henryeherman | 0:6ae7b9747a06 | 87 | com.printf("WAITING-TM\r\n"); |
henryeherman | 0:6ae7b9747a06 | 88 | #endif |
henryeherman | 0:6ae7b9747a06 | 89 | return true; |
henryeherman | 0:6ae7b9747a06 | 90 | } |
henryeherman | 0:6ae7b9747a06 | 91 | return false; |
henryeherman | 0:6ae7b9747a06 | 92 | } |
henryeherman | 0:6ae7b9747a06 | 93 | |
henryeherman | 0:6ae7b9747a06 | 94 | bool TouchMachine::isError() { |
henryeherman | 0:6ae7b9747a06 | 95 | if (touchState==ERROR) { |
henryeherman | 0:6ae7b9747a06 | 96 | #ifdef DEBUGTM |
henryeherman | 0:6ae7b9747a06 | 97 | com.printf("ERROR-TM\r\n"); |
henryeherman | 0:6ae7b9747a06 | 98 | #endif |
henryeherman | 0:6ae7b9747a06 | 99 | return true; |
henryeherman | 0:6ae7b9747a06 | 100 | } |
henryeherman | 0:6ae7b9747a06 | 101 | return false; |
henryeherman | 0:6ae7b9747a06 | 102 | } |
henryeherman | 0:6ae7b9747a06 | 103 | |
henryeherman | 0:6ae7b9747a06 | 104 | void TouchMachine::setError() { |
henryeherman | 0:6ae7b9747a06 | 105 | touchState=ERROR; |
henryeherman | 0:6ae7b9747a06 | 106 | } |
henryeherman | 0:6ae7b9747a06 | 107 | |
henryeherman | 0:6ae7b9747a06 | 108 | void TouchMachine::setMatch() { |
henryeherman | 0:6ae7b9747a06 | 109 | touchState=MATCH; |
henryeherman | 0:6ae7b9747a06 | 110 | } |
henryeherman | 0:6ae7b9747a06 | 111 | |
henryeherman | 0:6ae7b9747a06 | 112 | void TouchMachine::resetTouch() { |
henryeherman | 0:6ae7b9747a06 | 113 | #ifdef DEBUGTM1 |
henryeherman | 0:6ae7b9747a06 | 114 | com.printf("RESET FOR TOUCH\r\n"); |
henryeherman | 0:6ae7b9747a06 | 115 | #endif |
henryeherman | 0:6ae7b9747a06 | 116 | touchState=WAITING; |
henryeherman | 0:6ae7b9747a06 | 117 | loadMatchStr(); |
henryeherman | 0:6ae7b9747a06 | 118 | } |
henryeherman | 0:6ae7b9747a06 | 119 | |
henryeherman | 0:6ae7b9747a06 | 120 | char TouchMachine::getMatchChar(){ |
henryeherman | 0:6ae7b9747a06 | 121 | if(*pmatchstr!=NULL){ |
henryeherman | 0:6ae7b9747a06 | 122 | return *pmatchstr++; |
henryeherman | 0:6ae7b9747a06 | 123 | } |
henryeherman | 0:6ae7b9747a06 | 124 | return NULL; |
henryeherman | 0:6ae7b9747a06 | 125 | } |
henryeherman | 0:6ae7b9747a06 | 126 | |
henryeherman | 0:6ae7b9747a06 | 127 | char TouchMachine::nextMatchChar(){ |
henryeherman | 0:6ae7b9747a06 | 128 | return *(pmatchstr); |
henryeherman | 0:6ae7b9747a06 | 129 | } |
henryeherman | 0:6ae7b9747a06 | 130 | |
henryeherman | 0:6ae7b9747a06 | 131 | void TouchMachine::loadMatchStr(){ |
henryeherman | 0:6ae7b9747a06 | 132 | pmatchstr=hand->getMatchString(); |
henryeherman | 0:6ae7b9747a06 | 133 | #ifdef DEBUGTM1 |
henryeherman | 0:6ae7b9747a06 | 134 | com.printf("LOAD MATCH STR-%s\r\n",pmatchstr); |
henryeherman | 0:6ae7b9747a06 | 135 | #endif |
henryeherman | 0:6ae7b9747a06 | 136 | } |
henryeherman | 0:6ae7b9747a06 | 137 | |
henryeherman | 0:6ae7b9747a06 | 138 | void TouchMachine::touchError() { |
henryeherman | 0:6ae7b9747a06 | 139 | com.printf("TOUCH ERROR\r\n"); |
henryeherman | 0:6ae7b9747a06 | 140 | } |
henryeherman | 0:6ae7b9747a06 | 141 | |
henryeherman | 0:6ae7b9747a06 | 142 | void TouchMachine::touchMatch() { |
henryeherman | 0:6ae7b9747a06 | 143 | com.printf("***MATCH***\r\n"); |
henryeherman | 0:6ae7b9747a06 | 144 | } |
henryeherman | 0:6ae7b9747a06 | 145 | |
henryeherman | 0:6ae7b9747a06 | 146 | void TouchMachine::run() { |
henryeherman | 0:6ae7b9747a06 | 147 | while(1) { |
henryeherman | 0:6ae7b9747a06 | 148 | if (hand->isReady()) { |
henryeherman | 0:6ae7b9747a06 | 149 | resetTouch(); |
henryeherman | 0:6ae7b9747a06 | 150 | loadMatchStr(); |
henryeherman | 0:6ae7b9747a06 | 151 | checkTouchForMatch(); |
henryeherman | 0:6ae7b9747a06 | 152 | } |
henryeherman | 0:6ae7b9747a06 | 153 | } |
henryeherman | 0:6ae7b9747a06 | 154 | } |
henryeherman | 0:6ae7b9747a06 | 155 | |
henryeherman | 0:6ae7b9747a06 | 156 | void TouchMachine::checkTouchForMatch() { |
henryeherman | 0:6ae7b9747a06 | 157 | char c; |
henryeherman | 0:6ae7b9747a06 | 158 | while(( isWaiting() || isOne() || isZero())&& hand->isReady()) { |
henryeherman | 0:6ae7b9747a06 | 159 | check(); |
henryeherman | 0:6ae7b9747a06 | 160 | if(isOne() || isZero()) { |
henryeherman | 0:6ae7b9747a06 | 161 | |
henryeherman | 0:6ae7b9747a06 | 162 | c = getMatchChar(); |
henryeherman | 0:6ae7b9747a06 | 163 | #ifdef DEBUGTM1 |
henryeherman | 0:6ae7b9747a06 | 164 | com.printf("CHR TO MATCH %c\r\n",c); |
henryeherman | 0:6ae7b9747a06 | 165 | #endif |
henryeherman | 0:6ae7b9747a06 | 166 | switch(c) { |
henryeherman | 0:6ae7b9747a06 | 167 | case NULL: |
henryeherman | 0:6ae7b9747a06 | 168 | setMatch(); |
henryeherman | 0:6ae7b9747a06 | 169 | break; |
henryeherman | 0:6ae7b9747a06 | 170 | case ZEROCHR: |
henryeherman | 0:6ae7b9747a06 | 171 | if(!isZero()) |
henryeherman | 0:6ae7b9747a06 | 172 | setError(); |
henryeherman | 0:6ae7b9747a06 | 173 | |
henryeherman | 0:6ae7b9747a06 | 174 | break; |
henryeherman | 0:6ae7b9747a06 | 175 | case ONECHR: |
henryeherman | 0:6ae7b9747a06 | 176 | if(!isOne()) |
henryeherman | 0:6ae7b9747a06 | 177 | setError(); |
henryeherman | 0:6ae7b9747a06 | 178 | |
henryeherman | 0:6ae7b9747a06 | 179 | default: |
henryeherman | 0:6ae7b9747a06 | 180 | break; |
henryeherman | 0:6ae7b9747a06 | 181 | |
henryeherman | 0:6ae7b9747a06 | 182 | |
henryeherman | 0:6ae7b9747a06 | 183 | } |
henryeherman | 0:6ae7b9747a06 | 184 | } |
henryeherman | 0:6ae7b9747a06 | 185 | |
henryeherman | 0:6ae7b9747a06 | 186 | |
henryeherman | 0:6ae7b9747a06 | 187 | if(isError()) { |
henryeherman | 0:6ae7b9747a06 | 188 | touchError(); |
henryeherman | 0:6ae7b9747a06 | 189 | resetTouch(); |
henryeherman | 0:6ae7b9747a06 | 190 | } |
henryeherman | 0:6ae7b9747a06 | 191 | checkMatch(); |
henryeherman | 0:6ae7b9747a06 | 192 | if(isMatch()) { |
henryeherman | 0:6ae7b9747a06 | 193 | touchMatch(); |
henryeherman | 0:6ae7b9747a06 | 194 | resetTouch(); |
henryeherman | 0:6ae7b9747a06 | 195 | } |
henryeherman | 0:6ae7b9747a06 | 196 | waitForRelease(); |
henryeherman | 0:6ae7b9747a06 | 197 | |
henryeherman | 0:6ae7b9747a06 | 198 | } |
henryeherman | 0:6ae7b9747a06 | 199 | } |
henryeherman | 0:6ae7b9747a06 | 200 | |
henryeherman | 0:6ae7b9747a06 | 201 | void TouchMachine::waitForRelease() { |
henryeherman | 0:6ae7b9747a06 | 202 | while(!isWaiting() && hand->isReady()) { |
henryeherman | 0:6ae7b9747a06 | 203 | check(); |
henryeherman | 0:6ae7b9747a06 | 204 | } |
henryeherman | 0:6ae7b9747a06 | 205 | } |
henryeherman | 0:6ae7b9747a06 | 206 | |
henryeherman | 0:6ae7b9747a06 | 207 | void TouchMachine::checkMatch() { |
henryeherman | 0:6ae7b9747a06 | 208 | if(!isError() && nextMatchChar()==NULL) { |
henryeherman | 0:6ae7b9747a06 | 209 | setMatch(); |
henryeherman | 0:6ae7b9747a06 | 210 | } |
henryeherman | 0:6ae7b9747a06 | 211 | } |