#include "tilt.h" #include <windows.h> #include <sstream> #include <string> Tilt::Tilt(Sensor_port port, Connection *connection, unsigned char i2c_address):I2c(port,connection, LOWSPEED_9V, i2c_address){ } Tilt::~Tilt(){} void Tilt::init(bool reply){ Xyz_position pos; I2c::init(reply); read(pos); read(pos); this->has_init=true; } int Tilt::read(Result &result){ if(! (result.get_type() == XYZ_RESULT)){ return 0; } if(!this->has_init){ init(); } Result *temp = (Result *) &result; Xyz_position *position = (Xyz_position *) temp; unsigned char rx_buffer[I2C_BUFFER_SIZE]; unsigned char command[2]; command[0]= TILT_ADDRESS; command[1]= X_UPPER; i2c_write(&command[0], 2, 6); wait_for_bytes(6); i2c_read(&rx_buffer[0], 6); position->x=rx_buffer[1]; //load x axis upper 8 bits position->y=rx_buffer[2]; //load Y axis upper 8 bits position->z=rx_buffer[3]; //load z axis upper 8 bits if(position->x > 127) position->x -=256;//convert x to 10 bit value position->x=position->x*4 + rx_buffer[4]; if (position->y > 127) position->y-=256;//convert y to 10 bit value position->y=position->y*4 + rx_buffer[5]; if (position->z > 127) position->z-=256;//convert z to 10 bit value position->z=position->z*4 + rx_buffer[6]; return 1; } Sensor_type Tilt::get_type(){ return TILT; } std::string Tilt::print(){ Xyz_position position; read(position); std::stringstream out; out << "x=" << position.x << " y=" << position.y <<" z=" << position.z; return out.str(); }