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
M3Dpi.cpp@0:9f02ae958e20, 2015-12-03 (annotated)
- 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?
User | Revision | Line number | New 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 | } |