iRobot Create demo

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }