Ghost Mouse / Mbed 2 deprecated ghost_mouse

Dependencies:   mbed

Committer:
jennabarton
Date:
Fri Mar 31 22:24:46 2017 +0000
Revision:
2:f501e506d62b
Parent:
1:2e895e5272ab
Child:
3:7b0c215eb6a7
adding parsing of input; ; BUG: buffer is empty

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);
daviwang 1:2e895e5272ab 5
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 2:f501e506d62b 16 //point variables
jennabarton 2:f501e506d62b 17 int point1x = 0;
jennabarton 2:f501e506d62b 18 int point1y = 0;
jennabarton 2:f501e506d62b 19 int point2x = 0;
jennabarton 2:f501e506d62b 20 int point2y = 0;
jennabarton 2:f501e506d62b 21 int point3x = 0;
jennabarton 2:f501e506d62b 22 int point3y = 0;
jennabarton 2:f501e506d62b 23 int point4x = 0;
jennabarton 2:f501e506d62b 24 int point4y = 0;
jennabarton 2:f501e506d62b 25
jennabarton 2:f501e506d62b 26
jennabarton 2:f501e506d62b 27
daviwang 1:2e895e5272ab 28 //sensitivity
daviwang 1:2e895e5272ab 29 //Level 5: p0 = 0x96, p1 = 0xFE, p2 = 0xFE, p3 = 0x05
daviwang 1:2e895e5272ab 30 int sen0 = 0x96;
daviwang 1:2e895e5272ab 31 int sen1 = 0xFE;
daviwang 1:2e895e5272ab 32 int sen2 = 0xFE;
daviwang 1:2e895e5272ab 33 int sen3 = 0x00;
daviwang 1:2e895e5272ab 34
jennabarton 2:f501e506d62b 35 //matrices of x and y coordinates
jennabarton 2:f501e506d62b 36 int onex[4];
jennabarton 2:f501e506d62b 37 int oney[4];
daviwang 1:2e895e5272ab 38
daviwang 1:2e895e5272ab 39
daviwang 1:2e895e5272ab 40 void write2bytes(char data1, char data2){
daviwang 1:2e895e5272ab 41 char out[2];
daviwang 1:2e895e5272ab 42 out[0] = data1;
daviwang 1:2e895e5272ab 43 out[1] = data2;
daviwang 1:2e895e5272ab 44 camera1.write(slaveAddress, out, 2);
daviwang 1:2e895e5272ab 45 wait(0.01);
daviwang 1:2e895e5272ab 46 }
daviwang 1:2e895e5272ab 47
daviwang 1:2e895e5272ab 48 void initCamera(void){
daviwang 1:2e895e5272ab 49 // Initialize WiiMote Camera
daviwang 1:2e895e5272ab 50 write2bytes(0x30, 0x01);
daviwang 1:2e895e5272ab 51 write2bytes(0x00, 0x02);
daviwang 1:2e895e5272ab 52 write2bytes(0x00, 0x00);
daviwang 1:2e895e5272ab 53 write2bytes(0x71, 0x01);
daviwang 1:2e895e5272ab 54 write2bytes(0x00, sen0);
daviwang 1:2e895e5272ab 55 write2bytes(0x07, 0x00);
daviwang 1:2e895e5272ab 56 write2bytes(sen1, 0x1A);
daviwang 1:2e895e5272ab 57 write2bytes(sen2, sen3);
daviwang 1:2e895e5272ab 58 write2bytes(0x33, 0x03);
daviwang 1:2e895e5272ab 59 write2bytes(0x30, 0x08);
daviwang 1:2e895e5272ab 60 wait(0.1);
daviwang 1:2e895e5272ab 61
daviwang 1:2e895e5272ab 62 }
daviwang 0:1c15cf9cc4f9 63
jennabarton 2:f501e506d62b 64 void readCameraData(void){
jennabarton 2:f501e506d62b 65
jennabarton 2:f501e506d62b 66 //request data from camera
jennabarton 2:f501e506d62b 67 char out[1];
jennabarton 2:f501e506d62b 68 out[0] = 0x36;
jennabarton 2:f501e506d62b 69 camera1.write(slaveAddress, out, 1);
jennabarton 2:f501e506d62b 70 //wait(0.2); //do we need this?
jennabarton 2:f501e506d62b 71
jennabarton 2:f501e506d62b 72 //get data from camera
jennabarton 2:f501e506d62b 73 camera1.read(slaveAddress, data_buf, 16);
jennabarton 2:f501e506d62b 74
jennabarton 2:f501e506d62b 75 //print content of data buffer
jennabarton 2:f501e506d62b 76 for(int i = 0; i < 16; i++){
jennabarton 2:f501e506d62b 77 pc.printf(" data buf %d --> %c <-- \t as int --> %d <--\n", i, data_buf[i], (float) data_buf[i]);
jennabarton 2:f501e506d62b 78
jennabarton 2:f501e506d62b 79 }
jennabarton 2:f501e506d62b 80
jennabarton 2:f501e506d62b 81
jennabarton 2:f501e506d62b 82
jennabarton 2:f501e506d62b 83
jennabarton 2:f501e506d62b 84 //POINT 1
jennabarton 2:f501e506d62b 85 //get data
jennabarton 2:f501e506d62b 86 point1x = data_buf[1];
jennabarton 2:f501e506d62b 87 point1y = data_buf[2];
jennabarton 2:f501e506d62b 88 s = data_buf[3];
jennabarton 2:f501e506d62b 89 //load x,y
jennabarton 2:f501e506d62b 90 point1x += (s & 0x30) << 4;
jennabarton 2:f501e506d62b 91 point1y += (s & 0xC0) << 2;
jennabarton 2:f501e506d62b 92
jennabarton 2:f501e506d62b 93 pc.printf("point1x %d <-- here\n", point1x);
jennabarton 2:f501e506d62b 94
jennabarton 2:f501e506d62b 95 onex[0] = point1x;
jennabarton 2:f501e506d62b 96 oney[0] = point1y;
jennabarton 2:f501e506d62b 97
jennabarton 2:f501e506d62b 98 //onex[0] = point1x + ((s & 0x30) << 4);
jennabarton 2:f501e506d62b 99 //oney[0] = point1y + ((s & 0xC0) << 2);
jennabarton 2:f501e506d62b 100
jennabarton 2:f501e506d62b 101
jennabarton 2:f501e506d62b 102
jennabarton 2:f501e506d62b 103
jennabarton 2:f501e506d62b 104
jennabarton 2:f501e506d62b 105 //POINT 2
jennabarton 2:f501e506d62b 106 //get data
jennabarton 2:f501e506d62b 107 point2x = data_buf[4];
jennabarton 2:f501e506d62b 108 point2y = data_buf[5];
jennabarton 2:f501e506d62b 109 s = data_buf[6];
jennabarton 2:f501e506d62b 110 //load x,y
jennabarton 2:f501e506d62b 111 onex[1] = point2x + ((s & 0x30) << 4);
jennabarton 2:f501e506d62b 112 oney[1] = point2y + ((s & 0xC0) << 2);
jennabarton 2:f501e506d62b 113
jennabarton 2:f501e506d62b 114
jennabarton 2:f501e506d62b 115 //POINT 3
jennabarton 2:f501e506d62b 116 //get data
jennabarton 2:f501e506d62b 117 point3x = data_buf[7];
jennabarton 2:f501e506d62b 118 point3y = data_buf[8];
jennabarton 2:f501e506d62b 119 s = data_buf[9];
jennabarton 2:f501e506d62b 120 //load x,y
jennabarton 2:f501e506d62b 121 onex[2] = point3x + ((s & 0x30) << 4);
jennabarton 2:f501e506d62b 122 oney[2] = point3y + ((s & 0xC0) << 2);
jennabarton 2:f501e506d62b 123
jennabarton 2:f501e506d62b 124
jennabarton 2:f501e506d62b 125 //POINT 4
jennabarton 2:f501e506d62b 126 //get data
jennabarton 2:f501e506d62b 127 point4x = data_buf[10];
jennabarton 2:f501e506d62b 128 point4y = data_buf[11];
jennabarton 2:f501e506d62b 129 s = data_buf[12];
jennabarton 2:f501e506d62b 130 //load x,y
jennabarton 2:f501e506d62b 131 onex[3] = point4x + ((s & 0x30) << 4);
jennabarton 2:f501e506d62b 132 oney[3] = point4y + ((s & 0xC0) << 2);
jennabarton 2:f501e506d62b 133
jennabarton 2:f501e506d62b 134 }
jennabarton 2:f501e506d62b 135
jennabarton 2:f501e506d62b 136 void printCamData(int xcor[4], int ycor[4]){
jennabarton 2:f501e506d62b 137 for(int i = 0; i<4; i++){
jennabarton 2:f501e506d62b 138 int x = xcor[i];
jennabarton 2:f501e506d62b 139 int y = ycor[i];
jennabarton 2:f501e506d62b 140 //determine what to print
jennabarton 2:f501e506d62b 141 //x coordinate
jennabarton 2:f501e506d62b 142 if(x < 1000){
jennabarton 2:f501e506d62b 143 pc.printf("");
jennabarton 2:f501e506d62b 144 }
jennabarton 2:f501e506d62b 145 if(x < 100){
jennabarton 2:f501e506d62b 146 pc.printf("");
jennabarton 2:f501e506d62b 147 }
jennabarton 2:f501e506d62b 148 if(x < 10){
jennabarton 2:f501e506d62b 149 pc.printf(" %d,", x);
jennabarton 2:f501e506d62b 150 }
jennabarton 2:f501e506d62b 151
jennabarton 2:f501e506d62b 152 //y coordinate
jennabarton 2:f501e506d62b 153 if(y < 1000){
jennabarton 2:f501e506d62b 154 pc.printf("");
jennabarton 2:f501e506d62b 155 }
jennabarton 2:f501e506d62b 156 if(y < 100){
jennabarton 2:f501e506d62b 157 pc.printf("");
jennabarton 2:f501e506d62b 158 }
jennabarton 2:f501e506d62b 159 if(y < 10){
jennabarton 2:f501e506d62b 160 pc.printf(" %d", y);
jennabarton 2:f501e506d62b 161 }
jennabarton 2:f501e506d62b 162
jennabarton 2:f501e506d62b 163 pc.printf("\t");
jennabarton 2:f501e506d62b 164 }
jennabarton 2:f501e506d62b 165
jennabarton 2:f501e506d62b 166 //new line and delay
jennabarton 2:f501e506d62b 167 pc.printf("\n");
jennabarton 2:f501e506d62b 168 wait(0.1);
jennabarton 2:f501e506d62b 169 }
jennabarton 2:f501e506d62b 170
daviwang 0:1c15cf9cc4f9 171 int main() {
daviwang 1:2e895e5272ab 172 myled = 0;
daviwang 1:2e895e5272ab 173 slaveAddress = IRsensorAddress >> 1;
daviwang 1:2e895e5272ab 174 initCamera();
daviwang 1:2e895e5272ab 175
daviwang 1:2e895e5272ab 176
daviwang 0:1c15cf9cc4f9 177 while(1) {
jennabarton 2:f501e506d62b 178 myled = 1 - myled;
jennabarton 2:f501e506d62b 179
jennabarton 2:f501e506d62b 180 //get the camera data
jennabarton 2:f501e506d62b 181 readCameraData();
daviwang 1:2e895e5272ab 182
jennabarton 2:f501e506d62b 183 //print points
jennabarton 2:f501e506d62b 184 printCamData(onex, oney);
jennabarton 2:f501e506d62b 185
daviwang 1:2e895e5272ab 186
jennabarton 2:f501e506d62b 187
jennabarton 2:f501e506d62b 188
jennabarton 2:f501e506d62b 189
jennabarton 2:f501e506d62b 190
daviwang 1:2e895e5272ab 191
daviwang 0:1c15cf9cc4f9 192 }
daviwang 0:1c15cf9cc4f9 193 }