library for m3Dpi robot, based on the Pololu 3pi and m3pi. m3Dpi has multiple distance sensors, gyroscope, compass and accelerometer sensor to be fully aware of its environment. With the addition of xbee or nrf24n01 module it has wireless communication capabilities.

Dependencies:   m3pi ADXL345_I2C HMC5583L ITG3200 PCA9547 TLC59116 VL6180x RGB-fun xbee

Dependents:   m3Dpi-helloworld

Committer:
sillevl
Date:
Wed Jan 20 17:54:16 2016 +0000
Revision:
12:4cb092df6958
Parent:
11:6f2440be5aa4
update library to forked project

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sillevl 0:9f02ae958e20 1
sillevl 0:9f02ae958e20 2 #include "M3Dpi.h"
sillevl 0:9f02ae958e20 3
sillevl 0:9f02ae958e20 4 M3Dpi::M3Dpi() :
sillevl 10:4200a8140b10 5 i2c(SDA,SCL),
sillevl 0:9f02ae958e20 6 status(STATUS_RED,STATUS_GREEN,STATUS_BLUE),
sillevl 10:4200a8140b10 7 compass(i2c),
sillevl 10:4200a8140b10 8 gyro(i2c),
sillevl 10:4200a8140b10 9 accelerometer(i2c),
sillevl 10:4200a8140b10 10 leds(i2c),
sillevl 10:4200a8140b10 11 distance(i2c),
sillevl 0:9f02ae958e20 12 xbee(XBEE_TX, XBEE_RX, XBEE_RESET)
sillevl 0:9f02ae958e20 13 {
sillevl 11:6f2440be5aa4 14
sillevl 11:6f2440be5aa4 15 i2c.frequency(100000);
sillevl 11:6f2440be5aa4 16
sillevl 0:9f02ae958e20 17 xbee.baud(XBEE_BAUD);
sillevl 0:9f02ae958e20 18 xbee.reset();
sillevl 0:9f02ae958e20 19
sillevl 0:9f02ae958e20 20 gyro.setLpBandwidth(LPFBW_42HZ);
sillevl 0:9f02ae958e20 21
sillevl 0:9f02ae958e20 22 //Go into standby mode to configure the device.
sillevl 0:9f02ae958e20 23 accelerometer.setPowerControl(0x00);
sillevl 0:9f02ae958e20 24 wait(.001);
sillevl 0:9f02ae958e20 25 //Full resolution, +/-16g, 4mg/LSB.
sillevl 0:9f02ae958e20 26 accelerometer.setDataFormatControl(0x0B);
sillevl 0:9f02ae958e20 27 wait(.001);
sillevl 0:9f02ae958e20 28 //3.2kHz data rate.
sillevl 0:9f02ae958e20 29 accelerometer.setDataRate(ADXL345_3200HZ);
sillevl 0:9f02ae958e20 30 wait(.001);
sillevl 0:9f02ae958e20 31 //Measurement mode.
sillevl 0:9f02ae958e20 32 accelerometer.setPowerControl(0x08);
sillevl 0:9f02ae958e20 33 wait(.001);
sillevl 0:9f02ae958e20 34 }
sillevl 0:9f02ae958e20 35
sillevl 0:9f02ae958e20 36 void M3Dpi::setStatus(Color* color)
sillevl 0:9f02ae958e20 37 {
sillevl 0:9f02ae958e20 38 status.setColor(color);
sillevl 0:9f02ae958e20 39 }
sillevl 0:9f02ae958e20 40
sillevl 0:9f02ae958e20 41 void M3Dpi::setStatus(int color)
sillevl 0:9f02ae958e20 42 {
sillevl 0:9f02ae958e20 43 status.setColor(color);
sillevl 0:9f02ae958e20 44 }
sillevl 0:9f02ae958e20 45
sillevl 0:9f02ae958e20 46
sillevl 0:9f02ae958e20 47 void M3Dpi::setLeds(int* colors)
sillevl 0:9f02ae958e20 48 {
sillevl 0:9f02ae958e20 49 leds.setAll(colors);
sillevl 0:9f02ae958e20 50 }
sillevl 0:9f02ae958e20 51
sillevl 4:b2fe3a2545bf 52 m3dpi::Distance M3Dpi::getDistance()
sillevl 0:9f02ae958e20 53 {
sillevl 4:b2fe3a2545bf 54 return distance.getAllDistance();
sillevl 0:9f02ae958e20 55 }
sillevl 0:9f02ae958e20 56
sillevl 4:b2fe3a2545bf 57 m3dpi::Direction M3Dpi::getDirection()
sillevl 0:9f02ae958e20 58 {
sillevl 4:b2fe3a2545bf 59 m3dpi::Direction direction;
sillevl 0:9f02ae958e20 60 coord c;
sillevl 0:9f02ae958e20 61 c = compass.getCompass();
sillevl 4:b2fe3a2545bf 62 direction.x = c.x;
sillevl 4:b2fe3a2545bf 63 direction.y = c.y;
sillevl 4:b2fe3a2545bf 64 direction.z = c.z;
sillevl 4:b2fe3a2545bf 65 return direction;
sillevl 0:9f02ae958e20 66 }
sillevl 0:9f02ae958e20 67
sillevl 4:b2fe3a2545bf 68 m3dpi::Rotation M3Dpi::getRotation()
sillevl 0:9f02ae958e20 69 {
sillevl 4:b2fe3a2545bf 70 m3dpi::Rotation rotation;
sillevl 4:b2fe3a2545bf 71 rotation.x = gyro.getGyroX();
sillevl 4:b2fe3a2545bf 72 rotation.y = gyro.getGyroY();
sillevl 4:b2fe3a2545bf 73 rotation.z = gyro.getGyroZ();
sillevl 4:b2fe3a2545bf 74 return rotation;
sillevl 0:9f02ae958e20 75 }
sillevl 0:9f02ae958e20 76
sillevl 4:b2fe3a2545bf 77 m3dpi::Acceleration M3Dpi::getAcceleration()
sillevl 0:9f02ae958e20 78 {
sillevl 4:b2fe3a2545bf 79 m3dpi::Acceleration acc;
sillevl 0:9f02ae958e20 80 int values[3] = {0};
sillevl 0:9f02ae958e20 81 accelerometer.getOutput(values);
sillevl 4:b2fe3a2545bf 82 acc.x = (int16_t) values[0];
sillevl 4:b2fe3a2545bf 83 acc.y = (int16_t) values[1];
sillevl 4:b2fe3a2545bf 84 acc.z = (int16_t) values[2];
sillevl 4:b2fe3a2545bf 85 return acc;
sillevl 0:9f02ae958e20 86 }
sillevl 0:9f02ae958e20 87
sillevl 0:9f02ae958e20 88 int M3Dpi::_putc(int c)
sillevl 0:9f02ae958e20 89 {
sillevl 0:9f02ae958e20 90 return xbee.putc(c);
sillevl 0:9f02ae958e20 91 }
sillevl 0:9f02ae958e20 92
sillevl 0:9f02ae958e20 93 int M3Dpi::_getc()
sillevl 0:9f02ae958e20 94 {
sillevl 0:9f02ae958e20 95 return xbee.getc();
sillevl 0:9f02ae958e20 96 }
sillevl 0:9f02ae958e20 97
sillevl 4:b2fe3a2545bf 98 time_t M3Dpi::getTime()
sillevl 0:9f02ae958e20 99 {
sillevl 4:b2fe3a2545bf 100 return time(NULL);
sillevl 0:9f02ae958e20 101 }