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:
Sat Dec 19 10:42:51 2015 +0000
Revision:
10:4200a8140b10
Parent:
4:b2fe3a2545bf
Child:
11:6f2440be5aa4
use single I2C instance shared with all i2c devices

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