Zachary Sunberg / Mbed 2 deprecated SAILORSbot

Dependencies:   mbed

Committer:
Zachary Sunberg
Date:
Tue Jul 21 15:16:19 2015 -0700
Revision:
7:7f94942cd50d
Parent:
6:9792935abfc3
Child:
8:f96af1d15e9e
Child:
11:8c63f72e76ac
recognizes l and r commands but ignores

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zsunberg 0:9f058fe8cab5 1 #include "robot.h"
zsunberg 1:a7aab5937375 2 #include <sstream>
zsunberg 1:a7aab5937375 3
Zachary Sunberg 4:70fea94b29ae 4 int mode;
Zachary Sunberg 4:70fea94b29ae 5 const int MANUAL_MODE = 0;
Zachary Sunberg 4:70fea94b29ae 6 const int LINE_FOLLOW_MODE = 1;
Zachary Sunberg 4:70fea94b29ae 7
zsunberg 1:a7aab5937375 8 volatile double leftspeed;
zsunberg 1:a7aab5937375 9 volatile double rightspeed;
zsunberg 1:a7aab5937375 10
zsunberg 1:a7aab5937375 11 char received[80];
zsunberg 1:a7aab5937375 12 int r_index;
Zachary Sunberg 4:70fea94b29ae 13 int sensors[5];
zsunberg 1:a7aab5937375 14
Zachary Sunberg 4:70fea94b29ae 15 // PUT GLOBAL CONSTANTS HERE
Zachary Sunberg 4:70fea94b29ae 16 //////////////////////////////
Zachary Sunberg 4:70fea94b29ae 17
Zachary Sunberg 4:70fea94b29ae 18 //////////////////////////////
zsunberg 0:9f058fe8cab5 19
zsunberg 1:a7aab5937375 20 /*
Zachary Sunberg 4:70fea94b29ae 21 * This function will be called at approximately 20 Hz when the control mode is LINE_FOLLOW_MODE
Zachary Sunberg 4:70fea94b29ae 22 */
Zachary Sunberg 5:70c86dbc8832 23 void line_follow_loop(){
Zachary Sunberg 4:70fea94b29ae 24 led4 = 1;
Zachary Sunberg 4:70fea94b29ae 25
Zachary Sunberg 4:70fea94b29ae 26 // set these variables to control the robot
Zachary Sunberg 4:70fea94b29ae 27 leftspeed = 0.0;
Zachary Sunberg 4:70fea94b29ae 28 rightspeed = 0.0;
Zachary Sunberg 4:70fea94b29ae 29
Zachary Sunberg 4:70fea94b29ae 30 // set mode to MANUAL_MODE when the end is detected
Zachary Sunberg 4:70fea94b29ae 31 // mode = MANUAL_MODE
Zachary Sunberg 4:70fea94b29ae 32
Zachary Sunberg 4:70fea94b29ae 33 led4 = 0;
Zachary Sunberg 4:70fea94b29ae 34 }
Zachary Sunberg 4:70fea94b29ae 35
Zachary Sunberg 4:70fea94b29ae 36
Zachary Sunberg 4:70fea94b29ae 37 // INPUT COMMANDS
Zachary Sunberg 4:70fea94b29ae 38 // l:<float> set left wheel speed (only effective in MANUAL_MODE)
Zachary Sunberg 4:70fea94b29ae 39 // r:<float> set right wheel speed (only effective in MANUAL_MODE)
Zachary Sunberg 4:70fea94b29ae 40 // c:<int> change mode
Zachary Sunberg 4:70fea94b29ae 41
Zachary Sunberg 4:70fea94b29ae 42 // OUTPUT MESSAGES
Zachary Sunberg 4:70fea94b29ae 43 // p:<float> line position
Zachary Sunberg 4:70fea94b29ae 44 // s:<int>,<int>,<int>,<int>,<int>
Zachary Sunberg 4:70fea94b29ae 45 // light sensor values
Zachary Sunberg 4:70fea94b29ae 46 // m:<int> mode
Zachary Sunberg 4:70fea94b29ae 47
zsunberg 1:a7aab5937375 48 int parse_command(const char* cmd)
zsunberg 1:a7aab5937375 49 {
zsunberg 1:a7aab5937375 50 if(cmd[1]==':'){
Zachary Sunberg 7:7f94942cd50d 51 if(cmd[0]=='l'){
Zachary Sunberg 7:7f94942cd50d 52 if(mode==MANUAL_MODE){
Zachary Sunberg 7:7f94942cd50d 53 leftspeed = atof(&cmd[2]);
Zachary Sunberg 7:7f94942cd50d 54 }
Zachary Sunberg 7:7f94942cd50d 55 }else if(cmd[0]=='r'){
Zachary Sunberg 7:7f94942cd50d 56 if(mode==MANUAL_MODE){
Zachary Sunberg 7:7f94942cd50d 57 rightspeed = atof(&cmd[2]);
Zachary Sunberg 7:7f94942cd50d 58 }
Zachary Sunberg 4:70fea94b29ae 59 }else if(cmd[0]=='c'){
Zachary Sunberg 4:70fea94b29ae 60 mode = atoi(&cmd[2]);
zsunberg 1:a7aab5937375 61 }else{
zsunberg 1:a7aab5937375 62 xbee.printf("%s\n",cmd);
zsunberg 1:a7aab5937375 63 }
zsunberg 1:a7aab5937375 64 }else{
zsunberg 1:a7aab5937375 65 xbee.printf("%s\n",cmd);
zsunberg 1:a7aab5937375 66 }
zsunberg 1:a7aab5937375 67 return 0;
zsunberg 1:a7aab5937375 68 }
zsunberg 0:9f058fe8cab5 69
zsunberg 0:9f058fe8cab5 70 void Rx_interrupt()
zsunberg 0:9f058fe8cab5 71 {
zsunberg 1:a7aab5937375 72 // assume recursive interrupt is not possible
zsunberg 0:9f058fe8cab5 73 led2 = 1;
zsunberg 1:a7aab5937375 74 char read;
zsunberg 0:9f058fe8cab5 75
zsunberg 0:9f058fe8cab5 76 while(xbee.readable()){
zsunberg 1:a7aab5937375 77 read = xbee.getc();
zsunberg 1:a7aab5937375 78 if(read=='\n'){
zsunberg 1:a7aab5937375 79 received[r_index]='\0'; // put a null character at the end
zsunberg 1:a7aab5937375 80 parse_command(received);
zsunberg 1:a7aab5937375 81 r_index=0;
zsunberg 0:9f058fe8cab5 82 } else {
zsunberg 1:a7aab5937375 83 if(r_index >= 80){
zsunberg 1:a7aab5937375 84 r_index=0;
zsunberg 1:a7aab5937375 85 }
zsunberg 1:a7aab5937375 86 received[r_index]=read;
zsunberg 1:a7aab5937375 87 r_index++;
zsunberg 0:9f058fe8cab5 88 }
zsunberg 0:9f058fe8cab5 89 }
zsunberg 0:9f058fe8cab5 90
zsunberg 1:a7aab5937375 91 led2=0;
zsunberg 1:a7aab5937375 92
zsunberg 0:9f058fe8cab5 93 return;
zsunberg 0:9f058fe8cab5 94 }
zsunberg 0:9f058fe8cab5 95
zsunberg 0:9f058fe8cab5 96 int main() {
zsunberg 0:9f058fe8cab5 97
zsunberg 0:9f058fe8cab5 98 xbee.attach(&Rx_interrupt, Serial::RxIrq);
zsunberg 0:9f058fe8cab5 99 xbeeReset = 0;
zsunberg 0:9f058fe8cab5 100 wait(2);
zsunberg 0:9f058fe8cab5 101 xbeeReset = 1;
zsunberg 1:a7aab5937375 102 pi.sensor_auto_calibrate();
zsunberg 1:a7aab5937375 103 r_index = 0;
zsunberg 1:a7aab5937375 104 received[0] = '\0';
zsunberg 0:9f058fe8cab5 105
zsunberg 0:9f058fe8cab5 106 while(1){
Zachary Sunberg 4:70fea94b29ae 107
zsunberg 0:9f058fe8cab5 108 led1 = 1;
Zachary Sunberg 3:47cd6b9e4dbb 109 wait_ms(25);
Zachary Sunberg 4:70fea94b29ae 110 if(mode==LINE_FOLLOW_MODE){
Zachary Sunberg 4:70fea94b29ae 111 line_follow_loop()
Zachary Sunberg 4:70fea94b29ae 112 }
Zachary Sunberg 6:9792935abfc3 113
Zachary Sunberg 6:9792935abfc3 114 // reversing these is more intuitive
Zachary Sunberg 6:9792935abfc3 115 // pi.left_motor(leftspeed);
Zachary Sunberg 6:9792935abfc3 116 // pi.right_motor(rightspeed);
Zachary Sunberg 7:7f94942cd50d 117 __disable_irq();
Zachary Sunberg 6:9792935abfc3 118 pi.left_motor(rightspeed);
Zachary Sunberg 6:9792935abfc3 119 pi.right_motor(leftspeed);
Zachary Sunberg 7:7f94942cd50d 120 __enable_irq();
Zachary Sunberg 4:70fea94b29ae 121
zsunberg 0:9f058fe8cab5 122 led1 = 0;
Zachary Sunberg 3:47cd6b9e4dbb 123 wait_ms(25);
zsunberg 1:a7aab5937375 124 pi.sensor_reading(sensors);
zsunberg 1:a7aab5937375 125 int* s = sensors;
zsunberg 1:a7aab5937375 126 __disable_irq();
zsunberg 1:a7aab5937375 127 xbee.printf("s:%i,%i,%i,%i,%i\n", s[0], s[1], s[2], s[3], s[4]);
zsunberg 1:a7aab5937375 128 __enable_irq();
zsunberg 1:a7aab5937375 129 __disable_irq();
zsunberg 1:a7aab5937375 130 xbee.printf("p:%f\n", pi.line_position());
zsunberg 1:a7aab5937375 131 __enable_irq();
Zachary Sunberg 4:70fea94b29ae 132 __disable_irq();
Zachary Sunberg 4:70fea94b29ae 133 xbee.printf("m:%d\n", mode);
Zachary Sunberg 4:70fea94b29ae 134 __enable_irq();
zsunberg 0:9f058fe8cab5 135 }
zsunberg 0:9f058fe8cab5 136
zsunberg 0:9f058fe8cab5 137 return 0;
zsunberg 0:9f058fe8cab5 138 }