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:   m3Dpi mbed-rtos mbed MbedJSONValue

Committer:
sillevl
Date:
Sat Dec 19 15:27:15 2015 +0000
Revision:
13:d6374484b953
Parent:
11:ccb8653e285f
Child:
14:06576ab99415
add binary reporter;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sillevl 7:9068fc754a0b 1 #include "mbed.h"
sillevl 1:6f620263c9f8 2 #include "M3Dpi.h"
sillevl 7:9068fc754a0b 3 #include "jsonReporter.h"
sillevl 13:d6374484b953 4 #include "binaryReporter.h"
sillevl 6:414e1fea64f3 5
sillevl 13:d6374484b953 6 const char M3DPI_ID = "1234567890";
sillevl 6:414e1fea64f3 7
sillevl 7:9068fc754a0b 8 M3Dpi robot;
sillevl 7:9068fc754a0b 9 Serial pc(USBTX,USBRX);
sillevl 13:d6374484b953 10 Reporter* report = new BinaryReporter(&pc, M3DPI_ID);
sillevl 11:ccb8653e285f 11
sillevl 11:ccb8653e285f 12 m3dpi::Distance distance;
sillevl 11:ccb8653e285f 13 m3dpi::Direction direction;
sillevl 11:ccb8653e285f 14 m3dpi::Rotation rotation;
sillevl 11:ccb8653e285f 15 m3dpi::Acceleration acceleration;
sillevl 6:414e1fea64f3 16
sillevl 6:414e1fea64f3 17
sillevl 6:414e1fea64f3 18 void setLeds(m3dpi::Distance distance)
sillevl 6:414e1fea64f3 19 {
sillevl 6:414e1fea64f3 20 int colors[8] = {distance.front, distance.front_right, distance.right, distance.back_right, distance.back, distance.back_left, distance.left, distance.front_left};
sillevl 6:414e1fea64f3 21 // shift distance value to get red colors
sillevl 6:414e1fea64f3 22 for(int i = 0; i < 8; i++){
sillevl 6:414e1fea64f3 23 colors[i] = colors[i] << 16;
sillevl 6:414e1fea64f3 24 }
sillevl 6:414e1fea64f3 25 robot.setLeds(colors);
sillevl 6:414e1fea64f3 26 }
sillevl 6:414e1fea64f3 27
sillevl 11:ccb8653e285f 28 void read_sensors_thread()
sillevl 6:414e1fea64f3 29 {
sillevl 7:9068fc754a0b 30 robot.setStatus(Color::GREEN);
sillevl 11:ccb8653e285f 31 ::distance = robot.getDistance();
sillevl 11:ccb8653e285f 32 direction = robot.getDirection();
sillevl 11:ccb8653e285f 33 rotation = robot.getRotation();
sillevl 11:ccb8653e285f 34 acceleration = robot.getAcceleration();
sillevl 11:ccb8653e285f 35 setLeds(::distance);
sillevl 11:ccb8653e285f 36 robot.setStatus(Color::BLACK);
sillevl 6:414e1fea64f3 37 }
sillevl 0:ab0ce9ab81bf 38
sillevl 1:6f620263c9f8 39 int main()
sillevl 6:414e1fea64f3 40 {
sillevl 1:6f620263c9f8 41 pc.baud(115200);
sillevl 11:ccb8653e285f 42
sillevl 11:ccb8653e285f 43 while(true){
sillevl 13:d6374484b953 44 Timer t; t.start();
sillevl 11:ccb8653e285f 45 read_sensors_thread();
sillevl 11:ccb8653e285f 46 report->distance(::distance);
sillevl 11:ccb8653e285f 47 report->direction(direction);
sillevl 11:ccb8653e285f 48 report->rotation(rotation);
sillevl 11:ccb8653e285f 49 report->acceleration(acceleration);
sillevl 13:d6374484b953 50 t.stop();pc.printf("Read and report time: %d us\r\n", t.read_us());
sillevl 11:ccb8653e285f 51 //pc.printf("report send time: %d us\n", t.read_us());
sillevl 11:ccb8653e285f 52 //report.time(robot.getTime());
sillevl 11:ccb8653e285f 53 wait_ms(500);
sillevl 11:ccb8653e285f 54 }
sillevl 0:ab0ce9ab81bf 55 }