XYZ platform including 3 motors and 8 magnetometers (LIS3MDL).
Fork of XYZ_sensor_Platform by
xyz_sensor_platform.h@5:eddad24530e3, 2017-11-14 (annotated)
- Committer:
- hober
- Date:
- Tue Nov 14 07:59:42 2017 +0000
- Revision:
- 5:eddad24530e3
- Parent:
- 4:229de5852b9e
- Child:
- 7:0ad7d240be7a
20171114
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hober | 0:b9e728e5c47c | 1 | #ifndef __XYZ_SENSOR_PLATFORM_H |
hober | 0:b9e728e5c47c | 2 | #define __XYZ_SENSOR_PLATFORM_H |
hober | 0:b9e728e5c47c | 3 | |
hober | 0:b9e728e5c47c | 4 | /*** Includes ----------------------------------------------------------------- ***/ |
hober | 2:856f03e64695 | 5 | //#include "mbed.h" |
hober | 0:b9e728e5c47c | 6 | #include "altimu_10_v5.h" |
hober | 0:b9e728e5c47c | 7 | #include "motor.h" |
hober | 0:b9e728e5c47c | 8 | #include "motor_targets.h" |
hober | 3:2194b5b4f82a | 9 | //#define MOTOR_INITIAL |
hober | 0:b9e728e5c47c | 10 | /*** Typedefs ----------------------------------------------------------------- ***/ |
hober | 0:b9e728e5c47c | 11 | typedef struct { |
hober | 0:b9e728e5c47c | 12 | int32_t AXIS_X; |
hober | 0:b9e728e5c47c | 13 | int32_t AXIS_Y; |
hober | 0:b9e728e5c47c | 14 | int32_t AXIS_Z; |
hober | 0:b9e728e5c47c | 15 | } AxesRaw_TypeDef; |
hober | 0:b9e728e5c47c | 16 | |
hober | 0:b9e728e5c47c | 17 | class XYZSensorPlatform |
hober | 0:b9e728e5c47c | 18 | { |
hober | 0:b9e728e5c47c | 19 | public: |
hober | 0:b9e728e5c47c | 20 | XYZSensorPlatform(); |
hober | 0:b9e728e5c47c | 21 | void init(void); |
hober | 0:b9e728e5c47c | 22 | |
hober | 0:b9e728e5c47c | 23 | void go_forward() { |
hober | 3:2194b5b4f82a | 24 | motorY->go(NON_MOTOR_SIDE); |
hober | 0:b9e728e5c47c | 25 | } |
hober | 0:b9e728e5c47c | 26 | |
hober | 2:856f03e64695 | 27 | void go_backward() { |
hober | 3:2194b5b4f82a | 28 | motorX->go(MOTOR_SIDE); |
hober | 0:b9e728e5c47c | 29 | } |
hober | 0:b9e728e5c47c | 30 | |
hober | 0:b9e728e5c47c | 31 | void go_up() { |
hober | 3:2194b5b4f82a | 32 | motorZ->go(MOTOR_SIDE); |
hober | 0:b9e728e5c47c | 33 | } |
hober | 0:b9e728e5c47c | 34 | |
hober | 0:b9e728e5c47c | 35 | void go_down() { |
hober | 3:2194b5b4f82a | 36 | motorZ->go(NON_MOTOR_SIDE); |
hober | 0:b9e728e5c47c | 37 | } |
hober | 0:b9e728e5c47c | 38 | |
hober | 0:b9e728e5c47c | 39 | void go_right() { |
hober | 3:2194b5b4f82a | 40 | motorY->go(MOTOR_SIDE); |
hober | 0:b9e728e5c47c | 41 | } |
hober | 0:b9e728e5c47c | 42 | |
hober | 0:b9e728e5c47c | 43 | void go_left() { |
hober | 3:2194b5b4f82a | 44 | motorY->go(NON_MOTOR_SIDE); |
hober | 0:b9e728e5c47c | 45 | } |
hober | 0:b9e728e5c47c | 46 | |
hober | 0:b9e728e5c47c | 47 | void set_speed(float speed) { |
hober | 0:b9e728e5c47c | 48 | motorX->setSpeed(speed); |
hober | 0:b9e728e5c47c | 49 | motorY->setSpeed(speed); |
hober | 0:b9e728e5c47c | 50 | motorZ->setSpeed(speed); |
hober | 0:b9e728e5c47c | 51 | } |
hober | 0:b9e728e5c47c | 52 | |
hober | 0:b9e728e5c47c | 53 | float speed() { |
hober | 0:b9e728e5c47c | 54 | return motorX->speed(); |
hober | 0:b9e728e5c47c | 55 | } |
hober | 0:b9e728e5c47c | 56 | |
hober | 0:b9e728e5c47c | 57 | void position(float* pos) { |
hober | 0:b9e728e5c47c | 58 | pos[0] = motorX->position(); |
hober | 0:b9e728e5c47c | 59 | pos[1] = motorY->position(); |
hober | 0:b9e728e5c47c | 60 | pos[2] = motorZ->position(); |
hober | 0:b9e728e5c47c | 61 | } |
hober | 0:b9e728e5c47c | 62 | |
hober | 0:b9e728e5c47c | 63 | void reset() { |
hober | 0:b9e728e5c47c | 64 | motorX->reset(); |
hober | 0:b9e728e5c47c | 65 | motorY->reset(); |
hober | 0:b9e728e5c47c | 66 | motorZ->reset(); |
hober | 0:b9e728e5c47c | 67 | } |
hober | 0:b9e728e5c47c | 68 | void to(float x, float y, float z) { |
hober | 0:b9e728e5c47c | 69 | motorX->to(x); |
hober | 0:b9e728e5c47c | 70 | motorY->to(y); |
hober | 0:b9e728e5c47c | 71 | motorZ->to(z); |
hober | 0:b9e728e5c47c | 72 | } |
hober | 0:b9e728e5c47c | 73 | |
hober | 0:b9e728e5c47c | 74 | AxesRaw_TypeDef get_mag() { |
hober | 0:b9e728e5c47c | 75 | AxesRaw_TypeDef ret; |
hober | 0:b9e728e5c47c | 76 | magnetometer->get_m_axes((int32_t *)&ret); |
hober | 0:b9e728e5c47c | 77 | return ret; |
hober | 0:b9e728e5c47c | 78 | } |
hober | 0:b9e728e5c47c | 79 | |
hober | 3:2194b5b4f82a | 80 | int get_mag_raw(int16_t *ret) { |
hober | 3:2194b5b4f82a | 81 | return magnetometer->get_m_axes_raw(ret); |
hober | 3:2194b5b4f82a | 82 | } |
hober | 3:2194b5b4f82a | 83 | |
hober | 0:b9e728e5c47c | 84 | AxesRaw_TypeDef get_acc() { |
hober | 0:b9e728e5c47c | 85 | AxesRaw_TypeDef ret; |
hober | 0:b9e728e5c47c | 86 | accelerometer->get_x_axes((int32_t *)&ret); |
hober | 0:b9e728e5c47c | 87 | return ret; |
hober | 0:b9e728e5c47c | 88 | } |
hober | 0:b9e728e5c47c | 89 | |
hober | 0:b9e728e5c47c | 90 | AxesRaw_TypeDef get_gyr() { |
hober | 0:b9e728e5c47c | 91 | AxesRaw_TypeDef ret; |
hober | 0:b9e728e5c47c | 92 | gyroscope->get_g_axes((int32_t *)&ret); |
hober | 0:b9e728e5c47c | 93 | return ret; |
hober | 0:b9e728e5c47c | 94 | } |
hober | 5:eddad24530e3 | 95 | |
hober | 5:eddad24530e3 | 96 | void setSensorI2cFrequency(int hz){ sensor->setI2cFrequency(hz); } |
hober | 0:b9e728e5c47c | 97 | private: |
hober | 3:2194b5b4f82a | 98 | void x_zero(); |
hober | 3:2194b5b4f82a | 99 | void x_end(); |
hober | 3:2194b5b4f82a | 100 | void y_zero(); |
hober | 3:2194b5b4f82a | 101 | void y_end(); |
hober | 3:2194b5b4f82a | 102 | void z_zero(); |
hober | 3:2194b5b4f82a | 103 | void z_end(); |
hober | 0:b9e728e5c47c | 104 | Motor *motorX, *motorY, *motorZ; |
hober | 3:2194b5b4f82a | 105 | float x,y,z; |
hober | 4:229de5852b9e | 106 | InterruptIn xZero, xEnd, yZero, yEnd, zZero, zEnd; |
hober | 0:b9e728e5c47c | 107 | AltIMU_10_v5 *sensor; |
hober | 0:b9e728e5c47c | 108 | GyroSensor *gyroscope; |
hober | 0:b9e728e5c47c | 109 | MotionSensor *accelerometer; |
hober | 0:b9e728e5c47c | 110 | MagneticSensor *magnetometer; |
hober | 0:b9e728e5c47c | 111 | TempSensor *temp_sensor; |
hober | 0:b9e728e5c47c | 112 | }; |
hober | 0:b9e728e5c47c | 113 | #endif // __XYZ_SENSOR_PLATFORM_H |