Ghost Mouse / Mbed 2 deprecated ghost_mouse

Dependencies:   mbed

Committer:
jennabarton
Date:
Wed Apr 05 00:46:12 2017 +0000
Revision:
15:54cee979f202
Parent:
14:568d4dac4fb6
Child:
16:6b4a71e6f75a
ISR too long

Who changed what in which revision?

UserRevisionLine numberNew contents of line
daviwang 0:1c15cf9cc4f9 1 #include "mbed.h"
daviwang 0:1c15cf9cc4f9 2
jennabarton 8:d27efcac2dd7 3 //******************************************************************
jennabarton 8:d27efcac2dd7 4 // All variables defined below
jennabarton 8:d27efcac2dd7 5 //******************************************************************
jennabarton 8:d27efcac2dd7 6
jennabarton 8:d27efcac2dd7 7 //communication
daviwang 0:1c15cf9cc4f9 8 DigitalOut myled(LED1);
daviwang 1:2e895e5272ab 9 Serial pc(USBTX, USBRX);
jennabarton 4:1f443e7a0122 10 Serial keyOut(p13, p14);
daviwang 1:2e895e5272ab 11 I2C camera1(p9, p10);
daviwang 1:2e895e5272ab 12
jennabarton 2:f501e506d62b 13 //initial camera data
daviwang 1:2e895e5272ab 14 int IRsensorAddress = 0xB0;
daviwang 1:2e895e5272ab 15 int slaveAddress;
daviwang 1:2e895e5272ab 16 char data_buf[16];
jennabarton 2:f501e506d62b 17 char s;
daviwang 1:2e895e5272ab 18 int i;
daviwang 1:2e895e5272ab 19
jennabarton 2:f501e506d62b 20 //point variables
jennabarton 2:f501e506d62b 21 int point1x = 0;
jennabarton 2:f501e506d62b 22 int point1y = 0;
jennabarton 2:f501e506d62b 23 int point2x = 0;
jennabarton 2:f501e506d62b 24 int point2y = 0;
jennabarton 2:f501e506d62b 25 int point3x = 0;
jennabarton 2:f501e506d62b 26 int point3y = 0;
jennabarton 2:f501e506d62b 27 int point4x = 0;
jennabarton 2:f501e506d62b 28 int point4y = 0;
jennabarton 2:f501e506d62b 29
daviwang 1:2e895e5272ab 30 //sensitivity
daviwang 1:2e895e5272ab 31 //Level 5: p0 = 0x96, p1 = 0xFE, p2 = 0xFE, p3 = 0x05
jennabarton 8:d27efcac2dd7 32 //highest sensitivity to more accurately detect points
daviwang 1:2e895e5272ab 33 int sen0 = 0x96;
daviwang 1:2e895e5272ab 34 int sen1 = 0xFE;
daviwang 1:2e895e5272ab 35 int sen2 = 0xFE;
daviwang 1:2e895e5272ab 36 int sen3 = 0x00;
daviwang 1:2e895e5272ab 37
jennabarton 12:e127fa20d609 38 //previous point values
jennabarton 12:e127fa20d609 39 int prevX = 1023;
jennabarton 12:e127fa20d609 40 int prevY = 1023;
jennabarton 12:e127fa20d609 41
jennabarton 8:d27efcac2dd7 42 //matrices of x and y coordinates from the first camera
jennabarton 2:f501e506d62b 43 int onex[4];
jennabarton 2:f501e506d62b 44 int oney[4];
daviwang 1:2e895e5272ab 45
jennabarton 12:e127fa20d609 46 //matrices of x and y coordinates from prev point
jennabarton 12:e127fa20d609 47 int prevx[4];
jennabarton 12:e127fa20d609 48 int prevy[4];
jennabarton 12:e127fa20d609 49
jennabarton 12:e127fa20d609 50 //movement
jennabarton 12:e127fa20d609 51 int deadzone = 5;
jennabarton 12:e127fa20d609 52
jennabarton 12:e127fa20d609 53 //counts for clicks
jennabarton 12:e127fa20d609 54 int clickDeadzone = 10;
jennabarton 12:e127fa20d609 55 int fingerDownCount = 0;
jennabarton 12:e127fa20d609 56 int fingerUpCount = 0;
jennabarton 12:e127fa20d609 57 int minLeftClickDur = 4;
jennabarton 12:e127fa20d609 58 int minRightClickDur = 10;
jennabarton 12:e127fa20d609 59 int delayForClick = 2;
jennabarton 12:e127fa20d609 60 int instabilityLimit = 3;
jennabarton 12:e127fa20d609 61 int instabilityCount = 0;
jennabarton 13:4f2181174071 62
jennabarton 13:4f2181174071 63
jennabarton 14:568d4dac4fb6 64 //MOUSE STATE
jennabarton 14:568d4dac4fb6 65 //implemented for ticker behavior
jennabarton 14:568d4dac4fb6 66 //ticker depends on these values to update the state/location of the mouse
jennabarton 14:568d4dac4fb6 67 Ticker mouseStateTicker;
jennabarton 14:568d4dac4fb6 68 int updatex[4];
jennabarton 14:568d4dac4fb6 69 int updatey[4];
jennabarton 14:568d4dac4fb6 70 bool toLeftClick = false;
jennabarton 14:568d4dac4fb6 71 bool toRightClick = false;
jennabarton 14:568d4dac4fb6 72
jennabarton 14:568d4dac4fb6 73
jennabarton 14:568d4dac4fb6 74
jennabarton 13:4f2181174071 75
jennabarton 8:d27efcac2dd7 76 //******************************************************************
jennabarton 8:d27efcac2dd7 77 // All methods defined below
jennabarton 8:d27efcac2dd7 78 //******************************************************************
daviwang 1:2e895e5272ab 79
jennabarton 12:e127fa20d609 80 //takes in values for the movement in the x and y direction
jennabarton 12:e127fa20d609 81 //also can indicate whether you want to "click"
jennabarton 12:e127fa20d609 82 //NOTE: hard coded wait of 0.1
jennabarton 10:d67a15ba5748 83 void mouseCommand(char buttons, char x, char y) {
jennabarton 10:d67a15ba5748 84 keyOut.putc(0xFD);
jennabarton 10:d67a15ba5748 85 keyOut.putc(0x00);
jennabarton 10:d67a15ba5748 86 keyOut.putc(0x03);
jennabarton 10:d67a15ba5748 87 keyOut.putc(buttons);
jennabarton 10:d67a15ba5748 88 keyOut.putc(x);
jennabarton 10:d67a15ba5748 89 keyOut.putc(y);
jennabarton 10:d67a15ba5748 90 keyOut.putc(0x00);
jennabarton 10:d67a15ba5748 91 keyOut.putc(0x00);
jennabarton 10:d67a15ba5748 92 keyOut.putc(0x00);
jennabarton 10:d67a15ba5748 93
jennabarton 10:d67a15ba5748 94 //delay for pushing data
jennabarton 15:54cee979f202 95 //wait(0.1); //how large does this need to be?
jennabarton 10:d67a15ba5748 96 }
jennabarton 10:d67a15ba5748 97
jennabarton 4:1f443e7a0122 98
jennabarton 14:568d4dac4fb6 99
jennabarton 14:568d4dac4fb6 100 //the interrupt to update mouse state
jennabarton 14:568d4dac4fb6 101 //run every 100 us
jennabarton 14:568d4dac4fb6 102 void updateMouseState(){
jennabarton 14:568d4dac4fb6 103
jennabarton 14:568d4dac4fb6 104 //move mouse
jennabarton 14:568d4dac4fb6 105 //handles only single finger actions
jennabarton 15:54cee979f202 106 //TODO: uncomment
jennabarton 14:568d4dac4fb6 107 mouseCommand(0, (char) updatex[0], (char) updatey[0]);
jennabarton 14:568d4dac4fb6 108
jennabarton 14:568d4dac4fb6 109 //clear out changes
jennabarton 14:568d4dac4fb6 110 updatex[0] = 0;
jennabarton 14:568d4dac4fb6 111 updatey[0] = 0;
jennabarton 14:568d4dac4fb6 112
jennabarton 14:568d4dac4fb6 113 //click
jennabarton 15:54cee979f202 114 //TODO: uncomment
jennabarton 15:54cee979f202 115 // if(toLeftClick){
jennabarton 15:54cee979f202 116 // //send command to
jennabarton 15:54cee979f202 117 // mouseCommand(0x01, 0 , 0);
jennabarton 15:54cee979f202 118 //
jennabarton 15:54cee979f202 119 // } else if (toRightClick){
jennabarton 15:54cee979f202 120 // mouseCommand(0x02, 0 , 0);
jennabarton 15:54cee979f202 121 // }
jennabarton 14:568d4dac4fb6 122
jennabarton 14:568d4dac4fb6 123 //fip clicking to false
jennabarton 14:568d4dac4fb6 124 toLeftClick = false;
jennabarton 14:568d4dac4fb6 125 toRightClick = false;
jennabarton 14:568d4dac4fb6 126
jennabarton 14:568d4dac4fb6 127 }
jennabarton 14:568d4dac4fb6 128
jennabarton 14:568d4dac4fb6 129
jennabarton 12:e127fa20d609 130 //moves mouse on screen from one finger input
jennabarton 12:e127fa20d609 131 //param
jennabarton 12:e127fa20d609 132 // current point (currx, curry)
jennabarton 12:e127fa20d609 133 // previous point (prevx, prevy)
jennabarton 14:568d4dac4fb6 134 //TODO: implement additional param to indicate which finger you are looking at
jennabarton 14:568d4dac4fb6 135 // current implementation defaults to zero (finger one)
jennabarton 12:e127fa20d609 136 void oneFingerResponse(int currx, int curry, int prevx, int prevy){
jennabarton 12:e127fa20d609 137 //look at delta btwn prev val and current
jennabarton 12:e127fa20d609 138 //TODO: moving average
jennabarton 12:e127fa20d609 139 if((prevx != 1023 || prevy != 1023) && (currx != 1023 && curry != 1023)){
jennabarton 12:e127fa20d609 140 int diffX = currx - prevx;
jennabarton 12:e127fa20d609 141 int diffY = -1*(curry - prevy);
jennabarton 12:e127fa20d609 142
jennabarton 12:e127fa20d609 143 //fix diffX
jennabarton 12:e127fa20d609 144 if(diffX > deadzone){
jennabarton 12:e127fa20d609 145 diffX -= deadzone;
jennabarton 12:e127fa20d609 146 } else if (diffX < -1*deadzone){
jennabarton 12:e127fa20d609 147 diffX += deadzone;
jennabarton 12:e127fa20d609 148 } else{
jennabarton 12:e127fa20d609 149 diffX = 0;
jennabarton 12:e127fa20d609 150 }
jennabarton 12:e127fa20d609 151 //fix diffY
jennabarton 12:e127fa20d609 152 if(diffY > deadzone){
jennabarton 12:e127fa20d609 153 diffY -= deadzone;
jennabarton 12:e127fa20d609 154 } else if (diffX < -1*deadzone){
jennabarton 12:e127fa20d609 155 diffY += deadzone;
jennabarton 12:e127fa20d609 156 } else{
jennabarton 12:e127fa20d609 157 diffY = 0;
jennabarton 12:e127fa20d609 158 }
jennabarton 12:e127fa20d609 159
jennabarton 14:568d4dac4fb6 160
jennabarton 14:568d4dac4fb6 161 //mouseCommand(0, (char) diffX, (char) diffY);
jennabarton 14:568d4dac4fb6 162 //TODO: this is defaulting to first finger - need to fix this
jennabarton 14:568d4dac4fb6 163 //update target position to move x and y
jennabarton 14:568d4dac4fb6 164 updatex[0] = diffX;
jennabarton 14:568d4dac4fb6 165 updatey[0] = diffY;
jennabarton 12:e127fa20d609 166 }
jennabarton 12:e127fa20d609 167 }
jennabarton 12:e127fa20d609 168
jennabarton 12:e127fa20d609 169
jennabarton 12:e127fa20d609 170 //writes two bytes to the camera
jennabarton 12:e127fa20d609 171 void write2bytes(char data1, char data2){
jennabarton 12:e127fa20d609 172 char out[2];
jennabarton 12:e127fa20d609 173 out[0] = data1;
jennabarton 12:e127fa20d609 174 out[1] = data2;
jennabarton 12:e127fa20d609 175 camera1.write(slaveAddress, out, 2);
jennabarton 12:e127fa20d609 176 wait(0.01);
jennabarton 12:e127fa20d609 177 }
jennabarton 12:e127fa20d609 178
jennabarton 12:e127fa20d609 179
jennabarton 12:e127fa20d609 180
jennabarton 8:d27efcac2dd7 181 // Initialize WiiMote Camera
daviwang 1:2e895e5272ab 182 void initCamera(void){
daviwang 1:2e895e5272ab 183 write2bytes(0x30, 0x01);
daviwang 1:2e895e5272ab 184 write2bytes(0x00, 0x02);
daviwang 1:2e895e5272ab 185 write2bytes(0x00, 0x00);
daviwang 1:2e895e5272ab 186 write2bytes(0x71, 0x01);
daviwang 1:2e895e5272ab 187 write2bytes(0x07, 0x00);
daviwang 1:2e895e5272ab 188 write2bytes(sen1, 0x1A);
daviwang 1:2e895e5272ab 189 write2bytes(sen2, sen3);
daviwang 1:2e895e5272ab 190 write2bytes(0x33, 0x03);
daviwang 1:2e895e5272ab 191 write2bytes(0x30, 0x08);
jennabarton 3:7b0c215eb6a7 192 //wait(0.1);
daviwang 1:2e895e5272ab 193
daviwang 1:2e895e5272ab 194 }
daviwang 0:1c15cf9cc4f9 195
jennabarton 12:e127fa20d609 196
jennabarton 12:e127fa20d609 197 //update counts for click
jennabarton 12:e127fa20d609 198 void updateClickState(int currx, int curry, int prevx, int prevy){
jennabarton 12:e127fa20d609 199 bool xStable = false;
jennabarton 12:e127fa20d609 200 bool yStable = false;
jennabarton 12:e127fa20d609 201
jennabarton 12:e127fa20d609 202 //TODO: update to handle cases where just one is 1023
jennabarton 12:e127fa20d609 203 if(currx != 1023 || curry != 1023){
jennabarton 12:e127fa20d609 204 //check x stability
jennabarton 12:e127fa20d609 205 if( currx > prevx ){
jennabarton 12:e127fa20d609 206 if(currx-prevx < clickDeadzone){
jennabarton 12:e127fa20d609 207 //barely moved in x dir
jennabarton 12:e127fa20d609 208 xStable = true;
jennabarton 12:e127fa20d609 209 }
jennabarton 12:e127fa20d609 210 } else if( currx < prevx) {
jennabarton 12:e127fa20d609 211 if(prevx-currx < clickDeadzone){
jennabarton 12:e127fa20d609 212 //barely moved in x dir
jennabarton 12:e127fa20d609 213 xStable = true;
jennabarton 12:e127fa20d609 214 }
jennabarton 12:e127fa20d609 215 } else {
jennabarton 12:e127fa20d609 216 //no movement in x
jennabarton 12:e127fa20d609 217 xStable = true;
jennabarton 12:e127fa20d609 218 }
jennabarton 12:e127fa20d609 219
jennabarton 12:e127fa20d609 220 //check y stability
jennabarton 12:e127fa20d609 221 if( curry > prevy ){
jennabarton 12:e127fa20d609 222 if(curry-prevy < clickDeadzone){
jennabarton 12:e127fa20d609 223 //barely moved in y dir
jennabarton 12:e127fa20d609 224 yStable = true;
jennabarton 12:e127fa20d609 225 }
jennabarton 12:e127fa20d609 226 } else if( curry < prevy) {
jennabarton 12:e127fa20d609 227 if(prevy-curry < clickDeadzone){
jennabarton 12:e127fa20d609 228 //barely moved in y dir
jennabarton 12:e127fa20d609 229 yStable = true;
jennabarton 12:e127fa20d609 230 }
jennabarton 12:e127fa20d609 231 } else {
jennabarton 12:e127fa20d609 232 //no movement in y
jennabarton 12:e127fa20d609 233 yStable = true;
jennabarton 12:e127fa20d609 234 }
jennabarton 12:e127fa20d609 235
jennabarton 12:e127fa20d609 236 //update finger down count
jennabarton 12:e127fa20d609 237 if(xStable && yStable){
jennabarton 12:e127fa20d609 238 //both are stable
jennabarton 12:e127fa20d609 239 fingerDownCount++;
jennabarton 12:e127fa20d609 240
jennabarton 12:e127fa20d609 241 } else{
jennabarton 12:e127fa20d609 242 //unstable, increase instability count
jennabarton 12:e127fa20d609 243 instabilityCount++;
jennabarton 12:e127fa20d609 244 if(instabilityCount > instabilityLimit){
jennabarton 12:e127fa20d609 245 //too many instable points, reset to zero
jennabarton 12:e127fa20d609 246 fingerDownCount = 0;
jennabarton 12:e127fa20d609 247 instabilityCount = 0;
jennabarton 12:e127fa20d609 248 }
jennabarton 12:e127fa20d609 249 }
jennabarton 12:e127fa20d609 250
jennabarton 12:e127fa20d609 251 } else {
jennabarton 12:e127fa20d609 252 //both are up, increment up count
jennabarton 12:e127fa20d609 253 fingerUpCount++;
jennabarton 12:e127fa20d609 254 if(fingerUpCount >= delayForClick && fingerDownCount >= minLeftClickDur){
jennabarton 12:e127fa20d609 255 //finger was down for long enough to be a click
jennabarton 12:e127fa20d609 256 //finger was lifted for long enough to indicate click
jennabarton 12:e127fa20d609 257 if(fingerDownCount >= minRightClickDur){
jennabarton 12:e127fa20d609 258 //initiate right click
jennabarton 14:568d4dac4fb6 259 //mouseCommand(0x02, 0 , 0);
jennabarton 14:568d4dac4fb6 260
jennabarton 14:568d4dac4fb6 261 //indicate that you want to right click
jennabarton 14:568d4dac4fb6 262 toRightClick = true;
jennabarton 12:e127fa20d609 263
jennabarton 12:e127fa20d609 264 //TODO: remove. for debugging purposes only
jennabarton 15:54cee979f202 265 pc.printf("#########RIGHT mouse click \t");
jennabarton 12:e127fa20d609 266 } else {
jennabarton 12:e127fa20d609 267 //initiate left click
jennabarton 14:568d4dac4fb6 268 //mouseCommand(0x01, 0 , 0);
jennabarton 14:568d4dac4fb6 269
jennabarton 14:568d4dac4fb6 270 //indicate that you want to left click
jennabarton 14:568d4dac4fb6 271 toLeftClick = true;
jennabarton 12:e127fa20d609 272
jennabarton 12:e127fa20d609 273 //TODO: remove. for debugging purposes only
jennabarton 15:54cee979f202 274 pc.printf("********LEFT mouse click \t");
jennabarton 12:e127fa20d609 275 }
jennabarton 12:e127fa20d609 276
jennabarton 12:e127fa20d609 277 //reset counters
jennabarton 12:e127fa20d609 278 fingerUpCount = 0;
jennabarton 12:e127fa20d609 279 fingerDownCount = 0;
jennabarton 12:e127fa20d609 280
jennabarton 12:e127fa20d609 281 }
jennabarton 12:e127fa20d609 282 }
jennabarton 12:e127fa20d609 283
jennabarton 12:e127fa20d609 284
jennabarton 12:e127fa20d609 285 }
jennabarton 12:e127fa20d609 286
jennabarton 12:e127fa20d609 287
jennabarton 8:d27efcac2dd7 288 //get data from camera one
jennabarton 8:d27efcac2dd7 289 //populates onex and oney with values depending on the measured points
jennabarton 8:d27efcac2dd7 290 //NOTE: 1023 means nothing was detected
jennabarton 2:f501e506d62b 291 void readCameraData(void){
jennabarton 2:f501e506d62b 292
jennabarton 15:54cee979f202 293 pc.printf("in read camera data \n");
jennabarton 15:54cee979f202 294
jennabarton 2:f501e506d62b 295 //request data from camera
jennabarton 2:f501e506d62b 296 char out[1];
jennabarton 2:f501e506d62b 297 out[0] = 0x36;
jennabarton 2:f501e506d62b 298 camera1.write(slaveAddress, out, 1);
jennabarton 2:f501e506d62b 299 //wait(0.2); //do we need this?
jennabarton 2:f501e506d62b 300
jennabarton 2:f501e506d62b 301 //get data from camera
jennabarton 2:f501e506d62b 302 camera1.read(slaveAddress, data_buf, 16);
jennabarton 8:d27efcac2dd7 303
jennabarton 2:f501e506d62b 304 //POINT 1
jennabarton 2:f501e506d62b 305 //get data
jennabarton 2:f501e506d62b 306 point1x = data_buf[1];
jennabarton 2:f501e506d62b 307 point1y = data_buf[2];
jennabarton 2:f501e506d62b 308 s = data_buf[3];
jennabarton 3:7b0c215eb6a7 309 //load x,y
jennabarton 3:7b0c215eb6a7 310 onex[0] = point1x + ((s & 0x30) << 4);
jennabarton 3:7b0c215eb6a7 311 oney[0] = point1y + ((s & 0xC0) << 2);
jennabarton 2:f501e506d62b 312
jennabarton 8:d27efcac2dd7 313
jennabarton 11:cd450ce343a8 314 //>>>>>>>>>>>>>>>>>Begin unfinished code for moving
jennabarton 11:cd450ce343a8 315
jennabarton 12:e127fa20d609 316 oneFingerResponse(onex[0], oney[0], prevX, prevY);
jennabarton 12:e127fa20d609 317 updateClickState(onex[0], oney[0], prevX, prevY);
jennabarton 11:cd450ce343a8 318
jennabarton 7:6b27977d1800 319
jennabarton 7:6b27977d1800 320 //update prev values
jennabarton 7:6b27977d1800 321 prevX = onex[0];
jennabarton 7:6b27977d1800 322 prevY = oney[0];
jennabarton 7:6b27977d1800 323
jennabarton 7:6b27977d1800 324
jennabarton 8:d27efcac2dd7 325 //<<<<<<<<<<<<<<<<End unfinished code for moving averages
jennabarton 8:d27efcac2dd7 326
jennabarton 2:f501e506d62b 327 //POINT 2
jennabarton 2:f501e506d62b 328 //get data
jennabarton 2:f501e506d62b 329 point2x = data_buf[4];
jennabarton 2:f501e506d62b 330 point2y = data_buf[5];
jennabarton 2:f501e506d62b 331 s = data_buf[6];
jennabarton 2:f501e506d62b 332 //load x,y
jennabarton 2:f501e506d62b 333 onex[1] = point2x + ((s & 0x30) << 4);
jennabarton 2:f501e506d62b 334 oney[1] = point2y + ((s & 0xC0) << 2);
jennabarton 3:7b0c215eb6a7 335
jennabarton 2:f501e506d62b 336 //POINT 3
jennabarton 2:f501e506d62b 337 //get data
jennabarton 2:f501e506d62b 338 point3x = data_buf[7];
jennabarton 2:f501e506d62b 339 point3y = data_buf[8];
jennabarton 2:f501e506d62b 340 s = data_buf[9];
jennabarton 2:f501e506d62b 341 //load x,y
jennabarton 2:f501e506d62b 342 onex[2] = point3x + ((s & 0x30) << 4);
jennabarton 2:f501e506d62b 343 oney[2] = point3y + ((s & 0xC0) << 2);
jennabarton 2:f501e506d62b 344
jennabarton 2:f501e506d62b 345 //POINT 4
jennabarton 2:f501e506d62b 346 //get data
jennabarton 2:f501e506d62b 347 point4x = data_buf[10];
jennabarton 2:f501e506d62b 348 point4y = data_buf[11];
jennabarton 2:f501e506d62b 349 s = data_buf[12];
jennabarton 2:f501e506d62b 350 //load x,y
jennabarton 2:f501e506d62b 351 onex[3] = point4x + ((s & 0x30) << 4);
jennabarton 2:f501e506d62b 352 oney[3] = point4y + ((s & 0xC0) << 2);
jennabarton 2:f501e506d62b 353
jennabarton 2:f501e506d62b 354 }
jennabarton 2:f501e506d62b 355
jennabarton 8:d27efcac2dd7 356 //print to serial monitor the coordinates of the points stored in
jennabarton 8:d27efcac2dd7 357 //the passed x and y arrays
jennabarton 2:f501e506d62b 358 void printCamData(int xcor[4], int ycor[4]){
jennabarton 2:f501e506d62b 359 for(int i = 0; i<4; i++){
jennabarton 2:f501e506d62b 360 int x = xcor[i];
jennabarton 2:f501e506d62b 361 int y = ycor[i];
jennabarton 2:f501e506d62b 362 //determine what to print
jennabarton 2:f501e506d62b 363 //x coordinate
jennabarton 3:7b0c215eb6a7 364 pc.printf(" %d,", x);
jennabarton 2:f501e506d62b 365
jennabarton 2:f501e506d62b 366 //y coordinate
jennabarton 8:d27efcac2dd7 367 pc.printf(" %d\t", y);
jennabarton 2:f501e506d62b 368 }
jennabarton 2:f501e506d62b 369
jennabarton 2:f501e506d62b 370 //new line and delay
jennabarton 2:f501e506d62b 371 pc.printf("\n");
jennabarton 3:7b0c215eb6a7 372 //wait(0.01);
jennabarton 2:f501e506d62b 373 }
jennabarton 2:f501e506d62b 374
jennabarton 4:1f443e7a0122 375
jennabarton 4:1f443e7a0122 376
jennabarton 4:1f443e7a0122 377
jennabarton 8:d27efcac2dd7 378 //entrance to the code
daviwang 0:1c15cf9cc4f9 379 int main() {
jennabarton 15:54cee979f202 380
jennabarton 15:54cee979f202 381 //set values initially to zero
jennabarton 15:54cee979f202 382 updatex[0] = 0;
jennabarton 15:54cee979f202 383 updatey[0] = 0;
jennabarton 15:54cee979f202 384
daviwang 1:2e895e5272ab 385 myled = 0;
jennabarton 3:7b0c215eb6a7 386 //slaveAddress = IRsensorAddress >> 1;
jennabarton 3:7b0c215eb6a7 387 slaveAddress = IRsensorAddress;
daviwang 1:2e895e5272ab 388 initCamera();
daviwang 1:2e895e5272ab 389
jennabarton 3:7b0c215eb6a7 390 //update baud rate
jennabarton 3:7b0c215eb6a7 391 pc.baud(115200);
jennabarton 3:7b0c215eb6a7 392
jennabarton 14:568d4dac4fb6 393 //attach ticker for interrupt
jennabarton 15:54cee979f202 394 mouseStateTicker.attach_us(&updateMouseState, 100);
jennabarton 14:568d4dac4fb6 395
jennabarton 8:d27efcac2dd7 396 //loop to search for new info using the camera
daviwang 0:1c15cf9cc4f9 397 while(1) {
jennabarton 15:54cee979f202 398
jennabarton 15:54cee979f202 399 pc.printf("while\n");
jennabarton 8:d27efcac2dd7 400
jennabarton 8:d27efcac2dd7 401 //toggle test LED
jennabarton 2:f501e506d62b 402 myled = 1 - myled;
jennabarton 2:f501e506d62b 403
jennabarton 15:54cee979f202 404 pc.printf("while2\n");
jennabarton 15:54cee979f202 405
jennabarton 15:54cee979f202 406
jennabarton 2:f501e506d62b 407 //get the camera data
jennabarton 2:f501e506d62b 408 readCameraData();
daviwang 1:2e895e5272ab 409
jennabarton 14:568d4dac4fb6 410 //printing mouse state -- FOR DEBUGGING
jennabarton 15:54cee979f202 411 // pc.printf("update mouse %d, %d", updatex[0], updatey[0]);
jennabarton 15:54cee979f202 412 // pc.printf("\tclick left %s", toLeftClick ? "true" : "false");
jennabarton 15:54cee979f202 413 // pc.printf("\tclick right %s\n", toRightClick ? "true" : "false");
jennabarton 14:568d4dac4fb6 414
jennabarton 2:f501e506d62b 415 //print points
jennabarton 15:54cee979f202 416 printCamData(onex, oney);
daviwang 1:2e895e5272ab 417
jennabarton 8:d27efcac2dd7 418 //uncomment below to test infinite print
jennabarton 6:4ade0e1a3723 419 //keyOut.putc(0x41);
jennabarton 10:d67a15ba5748 420
jennabarton 4:1f443e7a0122 421
jennabarton 12:e127fa20d609 422 //uncomment below to infinitely move mouse in a square
jennabarton 10:d67a15ba5748 423 // double delay = 0.1;
jennabarton 10:d67a15ba5748 424 // int change = 75;
jennabarton 10:d67a15ba5748 425 // mouseCommand(0,0, (char) -1*change);
jennabarton 10:d67a15ba5748 426 // wait(delay);
jennabarton 10:d67a15ba5748 427 // mouseCommand(0,(char) -1*change,0);
jennabarton 10:d67a15ba5748 428 // wait(delay);
jennabarton 10:d67a15ba5748 429 // mouseCommand(0,0, (char) change);
jennabarton 10:d67a15ba5748 430 // wait(delay);
jennabarton 10:d67a15ba5748 431 // mouseCommand(0,(char) change,0);
jennabarton 10:d67a15ba5748 432 // wait(delay);
jennabarton 9:55473409c585 433
jennabarton 9:55473409c585 434
daviwang 0:1c15cf9cc4f9 435 }
daviwang 0:1c15cf9cc4f9 436 }