Ghost Mouse / Mbed 2 deprecated ghost_mouse

Dependencies:   mbed

Committer:
jennabarton
Date:
Fri Mar 31 23:40:20 2017 +0000
Revision:
7:6b27977d1800
Parent:
6:4ade0e1a3723
Child:
8:d27efcac2dd7
printing A/B depending on direction of movement

Who changed what in which revision?

UserRevisionLine numberNew contents of line
daviwang 0:1c15cf9cc4f9 1 #include "mbed.h"
daviwang 0:1c15cf9cc4f9 2
daviwang 0:1c15cf9cc4f9 3 DigitalOut myled(LED1);
daviwang 1:2e895e5272ab 4 Serial pc(USBTX, USBRX);
jennabarton 4:1f443e7a0122 5 Serial keyOut(p13, p14);
daviwang 1:2e895e5272ab 6 I2C camera1(p9, p10);
daviwang 1:2e895e5272ab 7
jennabarton 2:f501e506d62b 8 //initial camera data
daviwang 1:2e895e5272ab 9 int IRsensorAddress = 0xB0;
daviwang 1:2e895e5272ab 10 int slaveAddress;
daviwang 1:2e895e5272ab 11 char data_buf[16];
jennabarton 2:f501e506d62b 12 char s;
daviwang 1:2e895e5272ab 13 int i;
daviwang 1:2e895e5272ab 14
daviwang 1:2e895e5272ab 15
jennabarton 7:6b27977d1800 16 //previous point values
jennabarton 7:6b27977d1800 17 int prevX = 1023;
jennabarton 7:6b27977d1800 18 int prevY = 1023;
jennabarton 7:6b27977d1800 19
jennabarton 7:6b27977d1800 20
jennabarton 7:6b27977d1800 21
jennabarton 2:f501e506d62b 22 //point variables
jennabarton 2:f501e506d62b 23 int point1x = 0;
jennabarton 2:f501e506d62b 24 int point1y = 0;
jennabarton 2:f501e506d62b 25 int point2x = 0;
jennabarton 2:f501e506d62b 26 int point2y = 0;
jennabarton 2:f501e506d62b 27 int point3x = 0;
jennabarton 2:f501e506d62b 28 int point3y = 0;
jennabarton 2:f501e506d62b 29 int point4x = 0;
jennabarton 2:f501e506d62b 30 int point4y = 0;
jennabarton 2:f501e506d62b 31
jennabarton 2:f501e506d62b 32
jennabarton 2:f501e506d62b 33
daviwang 1:2e895e5272ab 34 //sensitivity
daviwang 1:2e895e5272ab 35 //Level 5: p0 = 0x96, p1 = 0xFE, p2 = 0xFE, p3 = 0x05
daviwang 1:2e895e5272ab 36 int sen0 = 0x96;
daviwang 1:2e895e5272ab 37 int sen1 = 0xFE;
daviwang 1:2e895e5272ab 38 int sen2 = 0xFE;
daviwang 1:2e895e5272ab 39 int sen3 = 0x00;
daviwang 1:2e895e5272ab 40
jennabarton 2:f501e506d62b 41 //matrices of x and y coordinates
jennabarton 2:f501e506d62b 42 int onex[4];
jennabarton 2:f501e506d62b 43 int oney[4];
daviwang 1:2e895e5272ab 44
daviwang 1:2e895e5272ab 45
jennabarton 4:1f443e7a0122 46
jennabarton 4:1f443e7a0122 47
daviwang 1:2e895e5272ab 48 void write2bytes(char data1, char data2){
daviwang 1:2e895e5272ab 49 char out[2];
daviwang 1:2e895e5272ab 50 out[0] = data1;
daviwang 1:2e895e5272ab 51 out[1] = data2;
daviwang 1:2e895e5272ab 52 camera1.write(slaveAddress, out, 2);
daviwang 1:2e895e5272ab 53 wait(0.01);
daviwang 1:2e895e5272ab 54 }
daviwang 1:2e895e5272ab 55
jennabarton 4:1f443e7a0122 56 void mouseCommand(uint8_t buttons, uint8_t x, uint8_t y) {
jennabarton 4:1f443e7a0122 57 keyOut.putc(0xFD);
jennabarton 4:1f443e7a0122 58 keyOut.putc(0x00);
jennabarton 4:1f443e7a0122 59 keyOut.putc(0x03);
jennabarton 4:1f443e7a0122 60 keyOut.putc(buttons);
jennabarton 4:1f443e7a0122 61 keyOut.putc(x);
jennabarton 4:1f443e7a0122 62 keyOut.putc(y);
jennabarton 4:1f443e7a0122 63 keyOut.putc(0x00);
jennabarton 4:1f443e7a0122 64 keyOut.putc(0x00);
jennabarton 4:1f443e7a0122 65 keyOut.putc(0x00);
jennabarton 4:1f443e7a0122 66 }
jennabarton 4:1f443e7a0122 67
jennabarton 4:1f443e7a0122 68 void keyCommand(uint8_t modifiers, uint8_t keycode1, uint8_t keycode2 = 0, uint8_t keycode3 = 0,
jennabarton 4:1f443e7a0122 69 uint8_t keycode4 = 0, uint8_t keycode5 = 0, uint8_t keycode6 = 0) {
jennabarton 4:1f443e7a0122 70 keyOut.putc(0xFD); // our command
jennabarton 4:1f443e7a0122 71 keyOut.putc(modifiers); // modifier!
jennabarton 4:1f443e7a0122 72 keyOut.putc(0x00); // 0x00
jennabarton 4:1f443e7a0122 73 keyOut.putc(keycode1); // key code #1
jennabarton 4:1f443e7a0122 74 keyOut.putc(keycode2); // key code #2
jennabarton 4:1f443e7a0122 75 keyOut.putc(keycode3); // key code #3
jennabarton 4:1f443e7a0122 76 keyOut.putc(keycode4); // key code #4
jennabarton 4:1f443e7a0122 77 keyOut.putc(keycode5); // key code #5
jennabarton 4:1f443e7a0122 78 keyOut.putc(keycode6); // key code #6
jennabarton 4:1f443e7a0122 79 }
jennabarton 4:1f443e7a0122 80
daviwang 1:2e895e5272ab 81 void initCamera(void){
daviwang 1:2e895e5272ab 82 // Initialize WiiMote Camera
daviwang 1:2e895e5272ab 83 write2bytes(0x30, 0x01);
daviwang 1:2e895e5272ab 84 write2bytes(0x00, 0x02);
daviwang 1:2e895e5272ab 85 write2bytes(0x00, 0x00);
daviwang 1:2e895e5272ab 86 write2bytes(0x71, 0x01);
daviwang 1:2e895e5272ab 87 write2bytes(0x00, sen0);
daviwang 1:2e895e5272ab 88 write2bytes(0x07, 0x00);
daviwang 1:2e895e5272ab 89 write2bytes(sen1, 0x1A);
daviwang 1:2e895e5272ab 90 write2bytes(sen2, sen3);
daviwang 1:2e895e5272ab 91 write2bytes(0x33, 0x03);
daviwang 1:2e895e5272ab 92 write2bytes(0x30, 0x08);
jennabarton 3:7b0c215eb6a7 93 //wait(0.1);
daviwang 1:2e895e5272ab 94
daviwang 1:2e895e5272ab 95 }
daviwang 0:1c15cf9cc4f9 96
jennabarton 2:f501e506d62b 97 void readCameraData(void){
jennabarton 2:f501e506d62b 98
jennabarton 2:f501e506d62b 99 //request data from camera
jennabarton 2:f501e506d62b 100 char out[1];
jennabarton 2:f501e506d62b 101 out[0] = 0x36;
jennabarton 2:f501e506d62b 102 camera1.write(slaveAddress, out, 1);
jennabarton 2:f501e506d62b 103 //wait(0.2); //do we need this?
jennabarton 2:f501e506d62b 104
jennabarton 2:f501e506d62b 105 //get data from camera
jennabarton 2:f501e506d62b 106 camera1.read(slaveAddress, data_buf, 16);
jennabarton 2:f501e506d62b 107
jennabarton 3:7b0c215eb6a7 108 // //print content of data buffer
jennabarton 3:7b0c215eb6a7 109 // for(int i = 0; i < 16; i++){
jennabarton 3:7b0c215eb6a7 110 // pc.printf(" data buf %d --> %c <-- \t as int --> %d <--\n", i, data_buf[i], (float) data_buf[i]);
jennabarton 3:7b0c215eb6a7 111 //
jennabarton 3:7b0c215eb6a7 112 // }
jennabarton 2:f501e506d62b 113
jennabarton 3:7b0c215eb6a7 114
jennabarton 2:f501e506d62b 115
jennabarton 7:6b27977d1800 116
jennabarton 2:f501e506d62b 117 //POINT 1
jennabarton 2:f501e506d62b 118 //get data
jennabarton 2:f501e506d62b 119 point1x = data_buf[1];
jennabarton 2:f501e506d62b 120 point1y = data_buf[2];
jennabarton 2:f501e506d62b 121 s = data_buf[3];
jennabarton 3:7b0c215eb6a7 122 //load x,y
jennabarton 3:7b0c215eb6a7 123 onex[0] = point1x + ((s & 0x30) << 4);
jennabarton 3:7b0c215eb6a7 124 oney[0] = point1y + ((s & 0xC0) << 2);
jennabarton 2:f501e506d62b 125
jennabarton 7:6b27977d1800 126 if(prevX != 1023 || prevY != 1023){
jennabarton 7:6b27977d1800 127 if(onex[0] - prevX > 5){
jennabarton 7:6b27977d1800 128 keyOut.putc(0x41);
jennabarton 7:6b27977d1800 129 } else if ((onex[0] - prevX) < -5){
jennabarton 7:6b27977d1800 130 keyOut.putc(0x42);
jennabarton 7:6b27977d1800 131
jennabarton 7:6b27977d1800 132 }
jennabarton 7:6b27977d1800 133 }
jennabarton 7:6b27977d1800 134
jennabarton 7:6b27977d1800 135 //update prev values
jennabarton 7:6b27977d1800 136 prevX = onex[0];
jennabarton 7:6b27977d1800 137 prevY = oney[0];
jennabarton 7:6b27977d1800 138
jennabarton 7:6b27977d1800 139
jennabarton 2:f501e506d62b 140 //POINT 2
jennabarton 2:f501e506d62b 141 //get data
jennabarton 2:f501e506d62b 142 point2x = data_buf[4];
jennabarton 2:f501e506d62b 143 point2y = data_buf[5];
jennabarton 2:f501e506d62b 144 s = data_buf[6];
jennabarton 2:f501e506d62b 145 //load x,y
jennabarton 2:f501e506d62b 146 onex[1] = point2x + ((s & 0x30) << 4);
jennabarton 2:f501e506d62b 147 oney[1] = point2y + ((s & 0xC0) << 2);
jennabarton 3:7b0c215eb6a7 148
jennabarton 2:f501e506d62b 149 //POINT 3
jennabarton 2:f501e506d62b 150 //get data
jennabarton 2:f501e506d62b 151 point3x = data_buf[7];
jennabarton 2:f501e506d62b 152 point3y = data_buf[8];
jennabarton 2:f501e506d62b 153 s = data_buf[9];
jennabarton 2:f501e506d62b 154 //load x,y
jennabarton 2:f501e506d62b 155 onex[2] = point3x + ((s & 0x30) << 4);
jennabarton 2:f501e506d62b 156 oney[2] = point3y + ((s & 0xC0) << 2);
jennabarton 2:f501e506d62b 157
jennabarton 2:f501e506d62b 158 //POINT 4
jennabarton 2:f501e506d62b 159 //get data
jennabarton 2:f501e506d62b 160 point4x = data_buf[10];
jennabarton 2:f501e506d62b 161 point4y = data_buf[11];
jennabarton 2:f501e506d62b 162 s = data_buf[12];
jennabarton 2:f501e506d62b 163 //load x,y
jennabarton 2:f501e506d62b 164 onex[3] = point4x + ((s & 0x30) << 4);
jennabarton 2:f501e506d62b 165 oney[3] = point4y + ((s & 0xC0) << 2);
jennabarton 2:f501e506d62b 166
jennabarton 2:f501e506d62b 167 }
jennabarton 2:f501e506d62b 168
jennabarton 2:f501e506d62b 169 void printCamData(int xcor[4], int ycor[4]){
jennabarton 2:f501e506d62b 170 for(int i = 0; i<4; i++){
jennabarton 2:f501e506d62b 171 int x = xcor[i];
jennabarton 2:f501e506d62b 172 int y = ycor[i];
jennabarton 2:f501e506d62b 173 //determine what to print
jennabarton 2:f501e506d62b 174 //x coordinate
jennabarton 3:7b0c215eb6a7 175 pc.printf(" %d,", x);
jennabarton 2:f501e506d62b 176
jennabarton 2:f501e506d62b 177 //y coordinate
jennabarton 3:7b0c215eb6a7 178 pc.printf(" %d\t", y);
jennabarton 4:1f443e7a0122 179
jennabarton 7:6b27977d1800 180 //print A if x is less than 800
jennabarton 7:6b27977d1800 181 // if(x < 800 ){
jennabarton 7:6b27977d1800 182 // keyOut.putc(0x41);
jennabarton 7:6b27977d1800 183 // }
jennabarton 2:f501e506d62b 184 }
jennabarton 2:f501e506d62b 185
jennabarton 2:f501e506d62b 186 //new line and delay
jennabarton 2:f501e506d62b 187 pc.printf("\n");
jennabarton 3:7b0c215eb6a7 188 //wait(0.01);
jennabarton 2:f501e506d62b 189 }
jennabarton 2:f501e506d62b 190
jennabarton 4:1f443e7a0122 191
jennabarton 4:1f443e7a0122 192
jennabarton 4:1f443e7a0122 193
jennabarton 4:1f443e7a0122 194
daviwang 0:1c15cf9cc4f9 195 int main() {
daviwang 1:2e895e5272ab 196 myled = 0;
jennabarton 3:7b0c215eb6a7 197 //slaveAddress = IRsensorAddress >> 1;
jennabarton 3:7b0c215eb6a7 198 slaveAddress = IRsensorAddress;
daviwang 1:2e895e5272ab 199 initCamera();
daviwang 1:2e895e5272ab 200
jennabarton 3:7b0c215eb6a7 201 //update baud rate
jennabarton 3:7b0c215eb6a7 202 pc.baud(115200);
jennabarton 3:7b0c215eb6a7 203
jennabarton 4:1f443e7a0122 204 //click the left button and drag the mouse down 50 units
jennabarton 4:1f443e7a0122 205 //mouseCommand(0x1, 0, -50);
jennabarton 5:34c72bf980fa 206 // keyCommand(0, 4);
jennabarton 4:1f443e7a0122 207
jennabarton 4:1f443e7a0122 208
daviwang 1:2e895e5272ab 209
daviwang 0:1c15cf9cc4f9 210 while(1) {
jennabarton 7:6b27977d1800 211 wait(0.04);
jennabarton 2:f501e506d62b 212 myled = 1 - myled;
jennabarton 2:f501e506d62b 213
jennabarton 2:f501e506d62b 214 //get the camera data
jennabarton 2:f501e506d62b 215 readCameraData();
daviwang 1:2e895e5272ab 216
jennabarton 2:f501e506d62b 217 //print points
jennabarton 3:7b0c215eb6a7 218 printCamData(onex, oney);
daviwang 1:2e895e5272ab 219
jennabarton 5:34c72bf980fa 220 //testing infinite print
jennabarton 6:4ade0e1a3723 221 //keyOut.putc(0x41);
jennabarton 5:34c72bf980fa 222
jennabarton 4:1f443e7a0122 223
daviwang 0:1c15cf9cc4f9 224 }
daviwang 0:1c15cf9cc4f9 225 }