b

Committer:
henryeherman
Date:
Wed Dec 01 03:29:25 2010 +0000
Revision:
0:4841f4169944

        

Who changed what in which revision?

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