jim hamblen
/
create_hack
iRobot Create demo
main.cpp@0:78d882d33841, 2014-10-16 (annotated)
- Committer:
- 4180_1
- Date:
- Thu Oct 16 19:31:06 2014 +0000
- Revision:
- 0:78d882d33841
Create Demo ver 1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
4180_1 | 0:78d882d33841 | 1 | #include "mbed.h" |
4180_1 | 0:78d882d33841 | 2 | |
4180_1 | 0:78d882d33841 | 3 | Serial device(p9, p10); // tx, rx |
4180_1 | 0:78d882d33841 | 4 | |
4180_1 | 0:78d882d33841 | 5 | // Definitions of iRobot Roomba SCI Command Numbers |
4180_1 | 0:78d882d33841 | 6 | // See the Create OpenInterface manual for a complete list |
4180_1 | 0:78d882d33841 | 7 | |
4180_1 | 0:78d882d33841 | 8 | |
4180_1 | 0:78d882d33841 | 9 | // Create Command // Arguments |
4180_1 | 0:78d882d33841 | 10 | const char Start = 128; |
4180_1 | 0:78d882d33841 | 11 | const char Control = 130; |
4180_1 | 0:78d882d33841 | 12 | const char FullMode = 132; |
4180_1 | 0:78d882d33841 | 13 | const char Drive = 137; // 4: [Vel. Hi] [Vel Low] [Rad. Hi] [Rad. Low] |
4180_1 | 0:78d882d33841 | 14 | const char Sensors = 142; // 1: Sensor Packet ID |
4180_1 | 0:78d882d33841 | 15 | const char CoverandDock = 143; // 0: Return to Charger |
4180_1 | 0:78d882d33841 | 16 | const char Clean = 135; // 0: Start Cleaning |
4180_1 | 0:78d882d33841 | 17 | const char PlaySong = 141; |
4180_1 | 0:78d882d33841 | 18 | const char Song = 140; |
4180_1 | 0:78d882d33841 | 19 | /* iRobot Roomba Sensor IDs */ |
4180_1 | 0:78d882d33841 | 20 | const char BumpsandDrops = 1; |
4180_1 | 0:78d882d33841 | 21 | |
4180_1 | 0:78d882d33841 | 22 | int speed = 400; |
4180_1 | 0:78d882d33841 | 23 | int radius = 0x8000; |
4180_1 | 0:78d882d33841 | 24 | void start(); |
4180_1 | 0:78d882d33841 | 25 | void forward(); |
4180_1 | 0:78d882d33841 | 26 | void reverse(); |
4180_1 | 0:78d882d33841 | 27 | void left(); |
4180_1 | 0:78d882d33841 | 28 | void right(); |
4180_1 | 0:78d882d33841 | 29 | void stop(); |
4180_1 | 0:78d882d33841 | 30 | void playsong(); |
4180_1 | 0:78d882d33841 | 31 | void charger(); |
4180_1 | 0:78d882d33841 | 32 | |
4180_1 | 0:78d882d33841 | 33 | // Demo to move around using basic commands |
4180_1 | 0:78d882d33841 | 34 | int main() { |
4180_1 | 0:78d882d33841 | 35 | // wait for Roomba to power up to accept serial commands |
4180_1 | 0:78d882d33841 | 36 | wait(5); |
4180_1 | 0:78d882d33841 | 37 | // set baud rate for Roomba factory default |
4180_1 | 0:78d882d33841 | 38 | device.baud(57600); |
4180_1 | 0:78d882d33841 | 39 | // Start command mode and select sensor data to send back |
4180_1 | 0:78d882d33841 | 40 | start(); |
4180_1 | 0:78d882d33841 | 41 | wait(.5); |
4180_1 | 0:78d882d33841 | 42 | // Send commands to move around |
4180_1 | 0:78d882d33841 | 43 | forward(); |
4180_1 | 0:78d882d33841 | 44 | wait(.5); |
4180_1 | 0:78d882d33841 | 45 | stop(); |
4180_1 | 0:78d882d33841 | 46 | wait(.1); |
4180_1 | 0:78d882d33841 | 47 | reverse(); |
4180_1 | 0:78d882d33841 | 48 | wait(.5); |
4180_1 | 0:78d882d33841 | 49 | left(); |
4180_1 | 0:78d882d33841 | 50 | wait(1); |
4180_1 | 0:78d882d33841 | 51 | stop(); |
4180_1 | 0:78d882d33841 | 52 | wait(.1); |
4180_1 | 0:78d882d33841 | 53 | right(); |
4180_1 | 0:78d882d33841 | 54 | wait(1); |
4180_1 | 0:78d882d33841 | 55 | stop(); |
4180_1 | 0:78d882d33841 | 56 | wait(.5); |
4180_1 | 0:78d882d33841 | 57 | // Play a song |
4180_1 | 0:78d882d33841 | 58 | playsong(); |
4180_1 | 0:78d882d33841 | 59 | wait(10); |
4180_1 | 0:78d882d33841 | 60 | // Search for battery charger IR beacon |
4180_1 | 0:78d882d33841 | 61 | charger(); |
4180_1 | 0:78d882d33841 | 62 | } |
4180_1 | 0:78d882d33841 | 63 | |
4180_1 | 0:78d882d33841 | 64 | |
4180_1 | 0:78d882d33841 | 65 | // Start - send start and safe mode, start streaming sensor data |
4180_1 | 0:78d882d33841 | 66 | void start() { |
4180_1 | 0:78d882d33841 | 67 | // device.printf("%c%c", Start, SafeMode); |
4180_1 | 0:78d882d33841 | 68 | device.putc(Start); |
4180_1 | 0:78d882d33841 | 69 | wait(.1); |
4180_1 | 0:78d882d33841 | 70 | device.putc(Control); |
4180_1 | 0:78d882d33841 | 71 | wait(.5); |
4180_1 | 0:78d882d33841 | 72 | // device.printf("%c%c", SensorStream, char(1)); |
4180_1 | 0:78d882d33841 | 73 | device.putc(Sensors); |
4180_1 | 0:78d882d33841 | 74 | device.putc(BumpsandDrops); |
4180_1 | 0:78d882d33841 | 75 | wait(.5); |
4180_1 | 0:78d882d33841 | 76 | } |
4180_1 | 0:78d882d33841 | 77 | // Stop - turn off drive motors |
4180_1 | 0:78d882d33841 | 78 | void stop() { |
4180_1 | 0:78d882d33841 | 79 | device.printf("%c%c%c%c%c", Drive, char(0), char(0), char(0), char(0)); |
4180_1 | 0:78d882d33841 | 80 | } |
4180_1 | 0:78d882d33841 | 81 | // Forward - turn on drive motors |
4180_1 | 0:78d882d33841 | 82 | void forward() { |
4180_1 | 0:78d882d33841 | 83 | device.printf("%c%c%c%c%c", Drive, char((speed>>8)&0xFF), char(speed&0xFF), |
4180_1 | 0:78d882d33841 | 84 | char((radius>>8)&0xFF), char(radius&0xFF)); |
4180_1 | 0:78d882d33841 | 85 | |
4180_1 | 0:78d882d33841 | 86 | } |
4180_1 | 0:78d882d33841 | 87 | // Reverse - reverse drive motors |
4180_1 | 0:78d882d33841 | 88 | void reverse() { |
4180_1 | 0:78d882d33841 | 89 | device.printf("%c%c%c%c%c", Drive, char(((-speed)>>8)&0xFF), char((-speed)&0xFF), |
4180_1 | 0:78d882d33841 | 90 | char(((radius)>>8)&0xFF), char((radius)&0xFF)); |
4180_1 | 0:78d882d33841 | 91 | |
4180_1 | 0:78d882d33841 | 92 | } |
4180_1 | 0:78d882d33841 | 93 | // Left - drive motors set to rotate to left |
4180_1 | 0:78d882d33841 | 94 | void left() { |
4180_1 | 0:78d882d33841 | 95 | device.printf("%c%c%c%c%c", Drive, char((speed>>8)&0xFF), char(speed&0xFF), |
4180_1 | 0:78d882d33841 | 96 | char(((1)>>8)&0xFF), char((1)&0xFF)); |
4180_1 | 0:78d882d33841 | 97 | } |
4180_1 | 0:78d882d33841 | 98 | // Right - drive motors set to rotate to right |
4180_1 | 0:78d882d33841 | 99 | void right() { |
4180_1 | 0:78d882d33841 | 100 | device.printf("%c%c%c%c%c", Drive, char(((speed)>>8)&0xFF), char((speed)&0xFF), |
4180_1 | 0:78d882d33841 | 101 | char((-1>>8)&0xFF), char(-1&0xFF)); |
4180_1 | 0:78d882d33841 | 102 | |
4180_1 | 0:78d882d33841 | 103 | } |
4180_1 | 0:78d882d33841 | 104 | // Charger - search and return to charger using IR beacons (if found) |
4180_1 | 0:78d882d33841 | 105 | void charger() { |
4180_1 | 0:78d882d33841 | 106 | device.printf("%c", Clean ); |
4180_1 | 0:78d882d33841 | 107 | wait(.2); |
4180_1 | 0:78d882d33841 | 108 | device.printf("%c", CoverandDock ); |
4180_1 | 0:78d882d33841 | 109 | } |
4180_1 | 0:78d882d33841 | 110 | // Play Song - define and play a song |
4180_1 | 0:78d882d33841 | 111 | void playsong() { // Send out notes & duration to define song and then play song |
4180_1 | 0:78d882d33841 | 112 | |
4180_1 | 0:78d882d33841 | 113 | device.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", |
4180_1 | 0:78d882d33841 | 114 | Song, char(0), char(16), char(91), char(24), char(89), char(12), char(87), char(36), char(87), |
4180_1 | 0:78d882d33841 | 115 | char(24), char(89), char(12), char(91), char(24), char(91), char(12), char(91), char(12), char(89), |
4180_1 | 0:78d882d33841 | 116 | char(12),char(87), char(12), char(89), char(12), char(91), char(12), char(89), char(12), char(87), |
4180_1 | 0:78d882d33841 | 117 | char(24), char(86), char(12), char(87), char(48)); |
4180_1 | 0:78d882d33841 | 118 | |
4180_1 | 0:78d882d33841 | 119 | wait(.2); |
4180_1 | 0:78d882d33841 | 120 | device.printf("%c%c", PlaySong, char(0)); |
4180_1 | 0:78d882d33841 | 121 | } |