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