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:
2018-08-03
Revision:
15:db753c75e53f
Parent:
14:1363e4b2fbac

File content as of revision 15:db753c75e53f:

#ifndef __XYZ_SENSOR_PLATFORM_H
#define __XYZ_SENSOR_PLATFORM_H

/*** Includes ----------------------------------------------------------------- ***/
//#include "mbed.h"
#include "mag_ring.h"
#include "motor.h"
#include "motor_targets.h"
#define MOTOR_INITIAL
#define CALIBRATION_TIME 100

/*** Typedefs ----------------------------------------------------------------- ***/
typedef struct {
    int32_t AXIS_X;
    int32_t AXIS_Y;
    int32_t AXIS_Z;
} AxesRaw_TypeDef;

typedef struct {
    AxesRaw_TypeDef Magnetic[NUMBER_OF_MAGNETOMETERS];
} MagneticArray_TypeDef;

class XYZSensorPlatform
{
public:
    XYZSensorPlatform();
    void init(void);
    void reset(void);
    
    void go_forward();
    void go_backward();
    void go_up();
    void go_down();
    void go_right();
    void go_left();
    
    bool isMoving(){ return motorX->moving() || motorY->moving() || motorZ->moving(); }
    
    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 setPosition(float x, float y, float z) {
        motorX->setPosition(x);
        motorY->setPosition(y);
        motorZ->setPosition(z);
    }
        
    
    void to(float x, float y, float z) ;

    MagneticArray_TypeDef get_mag() {
        MagneticArray_TypeDef ret;
        magnetometer->get_m_axes((int32_t *)&ret);
        return ret;
    }
    
    int get_mag_raw(int16_t ret[][3]) {
        return sensor->get_m_axes_raw(ret);
    }
    
    int get_mag_raw(int magIndex, int16_t *ret) {
        return sensor->get_m_axes_raw(magIndex, ret);
    }
    
    void resetMagnetometer(int magIndex)
    {
        sensor->resetMagnetometer(magIndex);
    }
    /*
    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 setSensorSpiFrequency(int hz){ sensor->setSpiFrequency(hz); }
private:
    void checkMovedTimes();
    Motor *motorX, *motorY, *motorZ;
    float x,y,z;
    int _movedTimes;
    InterruptIn xZero, xEnd, yZero, yEnd, zZero, zEnd;
    MagRing *sensor;
    //GyroSensor *gyroscope;
    //MotionSensor *accelerometer;
    MagneticSensor *magnetometer;
    //TempSensor *temp_sensor;
};
#endif // __XYZ_SENSOR_PLATFORM_H