None

Dependencies:   mbed

Committer:
henryeherman
Date:
Wed Dec 01 03:28:28 2010 +0000
Revision:
0:6ae7b9747a06
A

Who changed what in which revision?

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