Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
main.cpp
- Committer:
- jennabarton
- Date:
- 2017-03-31
- Revision:
- 4:1f443e7a0122
- Parent:
- 3:7b0c215eb6a7
- Child:
- 5:34c72bf980fa
File content as of revision 4:1f443e7a0122:
#include "mbed.h"
DigitalOut myled(LED1);
Serial pc(USBTX, USBRX);
Serial keyOut(p13, p14);
I2C camera1(p9, p10);
//initial camera data
int IRsensorAddress = 0xB0;
int slaveAddress;
char data_buf[16];
char s;
int i;
//point variables
int point1x = 0;
int point1y = 0;
int point2x = 0;
int point2y = 0;
int point3x = 0;
int point3y = 0;
int point4x = 0;
int point4y = 0;
//sensitivity
//Level 5: p0 = 0x96, p1 = 0xFE, p2 = 0xFE, p3 = 0x05
int sen0 = 0x96;
int sen1 = 0xFE;
int sen2 = 0xFE;
int sen3 = 0x00;
//matrices of x and y coordinates
int onex[4];
int oney[4];
void write2bytes(char data1, char data2){
char out[2];
out[0] = data1;
out[1] = data2;
camera1.write(slaveAddress, out, 2);
wait(0.01);
}
void mouseCommand(uint8_t buttons, uint8_t x, uint8_t y) {
keyOut.putc(0xFD);
keyOut.putc(0x00);
keyOut.putc(0x03);
keyOut.putc(buttons);
keyOut.putc(x);
keyOut.putc(y);
keyOut.putc(0x00);
keyOut.putc(0x00);
keyOut.putc(0x00);
}
void keyCommand(uint8_t modifiers, uint8_t keycode1, uint8_t keycode2 = 0, uint8_t keycode3 = 0,
uint8_t keycode4 = 0, uint8_t keycode5 = 0, uint8_t keycode6 = 0) {
keyOut.putc(0xFD); // our command
keyOut.putc(modifiers); // modifier!
keyOut.putc(0x00); // 0x00
keyOut.putc(keycode1); // key code #1
keyOut.putc(keycode2); // key code #2
keyOut.putc(keycode3); // key code #3
keyOut.putc(keycode4); // key code #4
keyOut.putc(keycode5); // key code #5
keyOut.putc(keycode6); // key code #6
}
void initCamera(void){
// Initialize WiiMote Camera
write2bytes(0x30, 0x01);
write2bytes(0x00, 0x02);
write2bytes(0x00, 0x00);
write2bytes(0x71, 0x01);
write2bytes(0x00, sen0);
write2bytes(0x07, 0x00);
write2bytes(sen1, 0x1A);
write2bytes(sen2, sen3);
write2bytes(0x33, 0x03);
write2bytes(0x30, 0x08);
//wait(0.1);
}
void readCameraData(void){
//request data from camera
char out[1];
out[0] = 0x36;
camera1.write(slaveAddress, out, 1);
//wait(0.2); //do we need this?
//get data from camera
camera1.read(slaveAddress, data_buf, 16);
// //print content of data buffer
// for(int i = 0; i < 16; i++){
// pc.printf(" data buf %d --> %c <-- \t as int --> %d <--\n", i, data_buf[i], (float) data_buf[i]);
//
// }
//POINT 1
//get data
point1x = data_buf[1];
point1y = data_buf[2];
s = data_buf[3];
//load x,y
onex[0] = point1x + ((s & 0x30) << 4);
oney[0] = point1y + ((s & 0xC0) << 2);
//POINT 2
//get data
point2x = data_buf[4];
point2y = data_buf[5];
s = data_buf[6];
//load x,y
onex[1] = point2x + ((s & 0x30) << 4);
oney[1] = point2y + ((s & 0xC0) << 2);
//POINT 3
//get data
point3x = data_buf[7];
point3y = data_buf[8];
s = data_buf[9];
//load x,y
onex[2] = point3x + ((s & 0x30) << 4);
oney[2] = point3y + ((s & 0xC0) << 2);
//POINT 4
//get data
point4x = data_buf[10];
point4y = data_buf[11];
s = data_buf[12];
//load x,y
onex[3] = point4x + ((s & 0x30) << 4);
oney[3] = point4y + ((s & 0xC0) << 2);
}
void printCamData(int xcor[4], int ycor[4]){
for(int i = 0; i<4; i++){
int x = xcor[i];
int y = ycor[i];
//determine what to print
//x coordinate
pc.printf(" %d,", x);
//y coordinate
pc.printf(" %d\t", y);
if(x < 800 ){
keyOut.putc(0x41);
}
}
//new line and delay
pc.printf("\n");
//wait(0.01);
}
int main() {
myled = 0;
//slaveAddress = IRsensorAddress >> 1;
slaveAddress = IRsensorAddress;
initCamera();
//update baud rate
pc.baud(115200);
//click the left button and drag the mouse down 50 units
//mouseCommand(0x1, 0, -50);
keyCommand(0, 4);
while(1) {
wait(0.01);
myled = 1 - myled;
//get the camera data
readCameraData();
//print points
printCamData(onex, oney);
}
}

