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

Fork of XYZ_sensor_Platform by Shih-Ho Hsieh

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?

UserRevisionLine numberNew 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