Erik Kallen / PositionModule

Description: Position module

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers PositionModule.cpp Source File

PositionModule.cpp

00001 #include "PositionModule.h"
00002 #include "Point.h"
00003 
00004 PositionModule::PositionModule(PinName tx, PinName rx):_mouse(tx,rx) {
00005     _mouse.frequency(100000);
00006 }
00007 
00008 long PositionModule::getX() {
00009     updatePosition();
00010     return -_ypos;
00011 }
00012 
00013 long PositionModule::getY() {
00014     updatePosition();
00015     return -_xpos;    
00016 }
00017 
00018 void PositionModule::setZero() {
00019     char cmd[1] = {2};
00020     _mouse.write(4,cmd,1);
00021 }
00022 
00023 long PositionModule::getDistance() {
00024     updatePosition();
00025     return sqrt((long double)(getX()*getX())+(getY()*getY())); 
00026 }
00027 
00028 float PositionModule::getHeading() {
00029     return Point::XYToDegrees(Point(0,0),Point(getX(),getY()));
00030 }
00031 
00032 void PositionModule::updatePosition() {
00033     char * buf = new char[8];
00034      char cmd[1] = {3};
00035     _mouse.read(5,buf,8);
00036     _mouse.write(4,cmd,1);        
00037     _xpos = (long)((buf[0] << 24) + (buf[1] << 16) + ( buf[2] << 8) + buf[3]);
00038     _ypos = (long)((buf[4] << 24) + (buf[5] << 16) + ( buf[6] << 8) + buf[7]);
00039     wait(0.1);
00040 }