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:
Thu Dec 03 07:58:50 2015 +0000
Revision:
0:9f02ae958e20
Child:
4:b2fe3a2545bf
initial commit

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