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:
Wed Aug 30 11:54:19 2017 +0000
Revision:
17:b73fcdb828f3
Parent:
16:0043244f8a61
demo distance sensors

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sillevl 7:9068fc754a0b 1 #include "mbed.h"
sillevl 14:06576ab99415 2 #include "rtos.h"
sillevl 1:6f620263c9f8 3 #include "M3Dpi.h"
sillevl 7:9068fc754a0b 4 #include "jsonReporter.h"
sillevl 13:d6374484b953 5 #include "binaryReporter.h"
sillevl 6:414e1fea64f3 6
sillevl 14:06576ab99415 7 const char M3DPI_ID[] = "1234567890";
sillevl 6:414e1fea64f3 8
sillevl 7:9068fc754a0b 9 M3Dpi robot;
sillevl 7:9068fc754a0b 10 Serial pc(USBTX,USBRX);
sillevl 16:0043244f8a61 11 Reporter* report = new JsonReporter(&robot.xbee, M3DPI_ID);
sillevl 11:ccb8653e285f 12
sillevl 11:ccb8653e285f 13 m3dpi::Distance distance;
sillevl 11:ccb8653e285f 14 m3dpi::Direction direction;
sillevl 11:ccb8653e285f 15 m3dpi::Rotation rotation;
sillevl 11:ccb8653e285f 16 m3dpi::Acceleration acceleration;
sillevl 6:414e1fea64f3 17
sillevl 6:414e1fea64f3 18
sillevl 6:414e1fea64f3 19 void setLeds(m3dpi::Distance distance)
sillevl 6:414e1fea64f3 20 {
sillevl 6:414e1fea64f3 21 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 22 // shift distance value to get red colors
sillevl 6:414e1fea64f3 23 for(int i = 0; i < 8; i++){
sillevl 17:b73fcdb828f3 24 //colors[i] = ((~(colors[i]*2)) & 0xFF) << 16;
sillevl 17:b73fcdb828f3 25 if(colors[i] < 50) {colors[i] = Color::RED;}
sillevl 17:b73fcdb828f3 26 else if(colors[i] < 100) {colors[i] = Color::YELLOW;}
sillevl 17:b73fcdb828f3 27 else if(colors[i] < 150) {colors[i] = Color::GREEN;}
sillevl 17:b73fcdb828f3 28 else{colors[i] = Color::BLACK;}
sillevl 6:414e1fea64f3 29 }
sillevl 6:414e1fea64f3 30 robot.setLeds(colors);
sillevl 6:414e1fea64f3 31 }
sillevl 6:414e1fea64f3 32
sillevl 14:06576ab99415 33 void read_sensors_task(void const *name)
sillevl 6:414e1fea64f3 34 {
sillevl 14:06576ab99415 35 //Timer t; t.start();
sillevl 17:b73fcdb828f3 36 robot.setStatus(Color::BLACK);
sillevl 11:ccb8653e285f 37 ::distance = robot.getDistance();
sillevl 17:b73fcdb828f3 38 //direction = robot.getDirection();
sillevl 17:b73fcdb828f3 39 //rotation = robot.getRotation();
sillevl 17:b73fcdb828f3 40 //acceleration = robot.getAcceleration();
sillevl 11:ccb8653e285f 41 setLeds(::distance);
sillevl 17:b73fcdb828f3 42 robot.setStatus(Color::RED);
sillevl 14:06576ab99415 43 //t.stop();pc.printf("*** Sensor acquisition time: %d us\r\n", t.read_us());
sillevl 14:06576ab99415 44 }
sillevl 14:06576ab99415 45
sillevl 14:06576ab99415 46 void report_task(void const *name)
sillevl 14:06576ab99415 47 {
sillevl 14:06576ab99415 48 //Timer t; t.start();
sillevl 14:06576ab99415 49 report->distance(::distance);
sillevl 14:06576ab99415 50 report->direction(direction);
sillevl 14:06576ab99415 51 report->rotation(rotation);
sillevl 14:06576ab99415 52 report->acceleration(acceleration);
sillevl 14:06576ab99415 53 //t.stop();pc.printf("*** Report time: %d us\r\n", t.read_us());
sillevl 14:06576ab99415 54 }
sillevl 14:06576ab99415 55
sillevl 14:06576ab99415 56 void receive_task(void const *name)
sillevl 14:06576ab99415 57 {
sillevl 14:06576ab99415 58
sillevl 14:06576ab99415 59 }
sillevl 14:06576ab99415 60
sillevl 14:06576ab99415 61 void idle_task(void const *name)
sillevl 14:06576ab99415 62 {
sillevl 14:06576ab99415 63
sillevl 6:414e1fea64f3 64 }
sillevl 0:ab0ce9ab81bf 65
sillevl 1:6f620263c9f8 66 int main()
sillevl 6:414e1fea64f3 67 {
sillevl 1:6f620263c9f8 68 pc.baud(115200);
sillevl 14:06576ab99415 69
sillevl 14:06576ab99415 70 RtosTimer read_sensors_timer(read_sensors_task, osTimerPeriodic);
sillevl 14:06576ab99415 71 read_sensors_timer.start(50);
sillevl 14:06576ab99415 72
sillevl 14:06576ab99415 73 RtosTimer report_timer(report_task, osTimerPeriodic);
sillevl 17:b73fcdb828f3 74 // report_timer.start(500);
sillevl 14:06576ab99415 75
sillevl 17:b73fcdb828f3 76 // Thread receive_thread(receive_task);
sillevl 17:b73fcdb828f3 77 // Thread idle_thread(idle_task, NULL, osPriorityLow);
sillevl 14:06576ab99415 78
sillevl 14:06576ab99415 79 Thread::wait(osWaitForever);
sillevl 0:ab0ce9ab81bf 80 }