XYZ platform including 3 motors and 8 magnetometers (LIS3MDL).

Fork of XYZ_sensor_Platform by Shih-Ho Hsieh

xyz_sensor_platform.h

Committer:
hober
Date:
2017-11-14
Revision:
5:eddad24530e3
Parent:
4:229de5852b9e
Child:
7:0ad7d240be7a

File content as of revision 5:eddad24530e3:

#ifndef __XYZ_SENSOR_PLATFORM_H
#define __XYZ_SENSOR_PLATFORM_H

/*** Includes ----------------------------------------------------------------- ***/
//#include "mbed.h"
#include "altimu_10_v5.h"
#include "motor.h"
#include "motor_targets.h"
//#define MOTOR_INITIAL
/*** Typedefs ----------------------------------------------------------------- ***/
typedef struct {
    int32_t AXIS_X;
    int32_t AXIS_Y;
    int32_t AXIS_Z;
} AxesRaw_TypeDef;

class XYZSensorPlatform
{
public:
    XYZSensorPlatform();
    void init(void);
    
    void go_forward() {
        motorY->go(NON_MOTOR_SIDE);
    }
    
    void go_backward() {
        motorX->go(MOTOR_SIDE);
    }
    
    void go_up() {
        motorZ->go(MOTOR_SIDE);
    }
    
    void go_down() {
        motorZ->go(NON_MOTOR_SIDE);
    }
    
    void go_right() {
        motorY->go(MOTOR_SIDE);
    }
    
    void go_left() {
        motorY->go(NON_MOTOR_SIDE);
    }
    
    void set_speed(float speed) {
        motorX->setSpeed(speed);
        motorY->setSpeed(speed);
        motorZ->setSpeed(speed);
    }
    
    float speed() {
        return motorX->speed();
    }
    
    void position(float* pos) {
        pos[0] = motorX->position();
        pos[1] = motorY->position();
        pos[2] = motorZ->position();
    }
    
    void reset() {
        motorX->reset();
        motorY->reset();
        motorZ->reset();
    }
    void to(float x, float y, float z) {
        motorX->to(x);
        motorY->to(y);
        motorZ->to(z);
    }

    AxesRaw_TypeDef get_mag() {
        AxesRaw_TypeDef ret;
        magnetometer->get_m_axes((int32_t *)&ret);
        return ret;
    }
    
    int get_mag_raw(int16_t *ret) {
        return magnetometer->get_m_axes_raw(ret);
    }
    
    AxesRaw_TypeDef get_acc() {
        AxesRaw_TypeDef ret;
        accelerometer->get_x_axes((int32_t *)&ret);
        return ret;
    }
    
    AxesRaw_TypeDef get_gyr() {
        AxesRaw_TypeDef ret;
        gyroscope->get_g_axes((int32_t *)&ret);
        return ret;
    }
    
    void setSensorI2cFrequency(int hz){ sensor->setI2cFrequency(hz); }
private:
    void x_zero();
    void x_end();
    void y_zero();
    void y_end();
    void z_zero();
    void z_end();
    Motor *motorX, *motorY, *motorZ;
    float x,y,z;
    InterruptIn xZero, xEnd, yZero, yEnd, zZero, zEnd;
    AltIMU_10_v5 *sensor;
    GyroSensor *gyroscope;
    MotionSensor *accelerometer;
    MagneticSensor *magnetometer;
    TempSensor *temp_sensor;
};
#endif // __XYZ_SENSOR_PLATFORM_H