Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: m3Dpi mbed-rtos mbed MbedJSONValue
main.cpp@17:b73fcdb828f3, 2017-08-30 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |
