Team Ascent / Mbed 2 deprecated TDPCode1

Dependencies:   mbed

Committer:
Dbee16
Date:
Fri Mar 13 10:20:18 2015 +0000
Revision:
10:2970279fce70
Parent:
9:92895704e1a4
Child:
22:2475678363d5
Bluetooth function encoded, fully working. Could make it a switch case instead of IFs but w/e.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cmcmaster 0:59d25bb7f825 1 #include "mbed.h"
cmcmaster 0:59d25bb7f825 2
cmcmaster 0:59d25bb7f825 3 //motor select pins
cmcmaster 0:59d25bb7f825 4 DigitalOut motor_lf(PTE2);
cmcmaster 0:59d25bb7f825 5 DigitalOut motor_lb(PTE3);
cmcmaster 0:59d25bb7f825 6 DigitalOut motor_rf(PTE4);
cmcmaster 0:59d25bb7f825 7 DigitalOut motor_rb(PTE5);
cmcmaster 0:59d25bb7f825 8
cmcmaster 0:59d25bb7f825 9 //Frequency of Pulse Width Modulated signal in Hz
cmcmaster 0:59d25bb7f825 10 #define PWM_FREQ 1000
cmcmaster 0:59d25bb7f825 11
cmcmaster 0:59d25bb7f825 12 //PWM pin (Enable 1 and 2)
Dbee16 10:2970279fce70 13 PwmOut motor_r (PTC2);
Dbee16 10:2970279fce70 14 PwmOut motor_l (PTE29);
cmcmaster 0:59d25bb7f825 15
cmcmaster 0:59d25bb7f825 16 //LED to test
Dbee16 4:6db8e0babea7 17 DigitalOut led(LED_RED);
Dbee16 1:2bab3a0bc3bc 18
Dbee16 10:2970279fce70 19 //Bluetooth Module to debug
Dbee16 10:2970279fce70 20 Serial blue(PTC4,PTC3);
Dbee16 9:92895704e1a4 21
Dbee16 9:92895704e1a4 22 void set_direction( int direction, float duty_l, float duty_r)
Dbee16 9:92895704e1a4 23 {
Dbee16 10:2970279fce70 24 blue.printf("I've been given %i, %f, %f\n", direction, duty_l, duty_r);
Dbee16 2:1feae3cb6731 25 switch( direction ) {
Dbee16 2:1feae3cb6731 26 case 0x11: { //forward
Dbee16 10:2970279fce70 27 motor_r.write( duty_r);
Dbee16 2:1feae3cb6731 28 //Look up ternary statements -- {condition ? value_if_true : value_if_false} This makes 0<result<1
Dbee16 9:92895704e1a4 29 motor_l.write( duty_l);
Dbee16 2:1feae3cb6731 30
cmcmaster 0:59d25bb7f825 31 motor_rf=1;
cmcmaster 0:59d25bb7f825 32 motor_rb=0;
cmcmaster 0:59d25bb7f825 33 motor_lf=1;
cmcmaster 0:59d25bb7f825 34 motor_lb=0;
Dbee16 10:2970279fce70 35 blue.printf("I'm going forwards, r_motor duty is %f ; l_motor duty is %f\n", duty_r, duty_l);
Dbee16 10:2970279fce70 36 break;
cmcmaster 0:59d25bb7f825 37 }
Dbee16 2:1feae3cb6731 38 case 0x00: { //backward
Dbee16 9:92895704e1a4 39 motor_r.write( duty_r);
Dbee16 9:92895704e1a4 40 motor_l.write( duty_l);
Dbee16 2:1feae3cb6731 41
cmcmaster 0:59d25bb7f825 42 motor_rf=0;
cmcmaster 0:59d25bb7f825 43 motor_rb=1;
cmcmaster 0:59d25bb7f825 44 motor_lf=0;
cmcmaster 0:59d25bb7f825 45 motor_lb=1;
Dbee16 10:2970279fce70 46 blue.printf("I'm going backwards, r_motor duty is %f ; l_motor duty is %f\n", duty_r, duty_l);
Dbee16 10:2970279fce70 47 break;
Dbee16 10:2970279fce70 48
cmcmaster 0:59d25bb7f825 49 }
Dbee16 2:1feae3cb6731 50 case 0x01: { //spin left -- Right forward, left backward
Dbee16 9:92895704e1a4 51 motor_r.write( duty_r);
Dbee16 9:92895704e1a4 52 motor_l.write( duty_l);
Dbee16 2:1feae3cb6731 53
Dbee16 2:1feae3cb6731 54 motor_rf=1;
Dbee16 2:1feae3cb6731 55 motor_rb=0;
Dbee16 2:1feae3cb6731 56 motor_lf=0;
Dbee16 2:1feae3cb6731 57 motor_lb=1;
Dbee16 10:2970279fce70 58 blue.printf("I'm spinning left, r_motor duty is %f ; l_motor duty is %f\n", duty_r, duty_l);
Dbee16 10:2970279fce70 59 break;
Dbee16 10:2970279fce70 60
Dbee16 2:1feae3cb6731 61 }
Dbee16 2:1feae3cb6731 62 case 0x10: { //spin right
Dbee16 9:92895704e1a4 63 motor_r.write( duty_r);
Dbee16 9:92895704e1a4 64 motor_l.write( duty_l);
Dbee16 2:1feae3cb6731 65
Dbee16 2:1feae3cb6731 66 motor_rf=0;
Dbee16 2:1feae3cb6731 67 motor_rb=1;
Dbee16 2:1feae3cb6731 68 motor_lf=1;
Dbee16 2:1feae3cb6731 69 motor_lb=0;
Dbee16 10:2970279fce70 70 blue.printf("I'm spinning right, r_motor duty is %f ; l_motor duty is %f\n", duty_r, duty_l);
Dbee16 10:2970279fce70 71 break;
Dbee16 10:2970279fce70 72
Dbee16 2:1feae3cb6731 73 }
cmcmaster 0:59d25bb7f825 74 }
cmcmaster 0:59d25bb7f825 75 }
Dbee16 9:92895704e1a4 76
Dbee16 10:2970279fce70 77 void manual_mode(){
Dbee16 10:2970279fce70 78 int direction = 0x11;
Dbee16 10:2970279fce70 79 unsigned char rem_dir; //remote_direction
Dbee16 10:2970279fce70 80
Dbee16 10:2970279fce70 81 while(1) {
Dbee16 10:2970279fce70 82
Dbee16 10:2970279fce70 83
Dbee16 10:2970279fce70 84 wait(1);
Dbee16 10:2970279fce70 85 blue.printf("Gees a Direction\n f for forward both, b for backward both, r for spin right (clockwise), l for spin left (anti-clockwise) .. etc. \nDON'T PUT IT IN UPPERCASE PLS\n");
Dbee16 10:2970279fce70 86
Dbee16 10:2970279fce70 87 while ( blue.readable()==0 ) {} // loops until there is an input from the user
Dbee16 10:2970279fce70 88
Dbee16 10:2970279fce70 89 //for(int i=0; i<2; i++) {
Dbee16 10:2970279fce70 90 rem_dir = blue.getc(); //Store incoming response into array
Dbee16 10:2970279fce70 91 //}
Dbee16 10:2970279fce70 92
Dbee16 10:2970279fce70 93 blue.printf("Thanks, calculating it now, you entered %c\n",rem_dir);
Dbee16 10:2970279fce70 94 if( ( rem_dir == 'f') ) {
Dbee16 10:2970279fce70 95 direction = 0x11;
Dbee16 10:2970279fce70 96 blue.printf("You wanted to go straight\n");
Dbee16 9:92895704e1a4 97 }
Dbee16 10:2970279fce70 98 if ( (rem_dir == 'b' ) ) {
Dbee16 10:2970279fce70 99
Dbee16 10:2970279fce70 100 direction = 0x00;
Dbee16 10:2970279fce70 101 blue.printf("You wanted to go backwards\n");
Dbee16 9:92895704e1a4 102 }
Dbee16 10:2970279fce70 103 if ( (rem_dir == 'l' ) ) {
Dbee16 10:2970279fce70 104
Dbee16 10:2970279fce70 105 direction = 0x01;
Dbee16 10:2970279fce70 106 blue.printf("You wanted to spin anti-clockwise\n");
Dbee16 10:2970279fce70 107
Dbee16 9:92895704e1a4 108 }
Dbee16 10:2970279fce70 109 if ( (rem_dir == 'r' ) ) {
Dbee16 10:2970279fce70 110
Dbee16 10:2970279fce70 111 direction = 0x10;
Dbee16 10:2970279fce70 112 blue.printf("You wanted to spin clockwise\n");
Dbee16 9:92895704e1a4 113 }
Dbee16 10:2970279fce70 114 if (rem_dir =='s') {
Dbee16 10:2970279fce70 115
Dbee16 10:2970279fce70 116 motor_r.write(0);
Dbee16 10:2970279fce70 117 motor_l.write(0);
Dbee16 10:2970279fce70 118 blue.printf("STAAAAHP\n");
Dbee16 10:2970279fce70 119 }else{
Dbee16 10:2970279fce70 120 wait(0.1);
Dbee16 10:2970279fce70 121 blue.printf("What duty left?\n");
Dbee16 10:2970279fce70 122 while ( blue.readable()==0 ) {} // loops until there is an input from the user
Dbee16 10:2970279fce70 123 char l_speed = blue.getc();
Dbee16 10:2970279fce70 124 wait(0.1);
Dbee16 10:2970279fce70 125 blue.printf("What duty right?\n");
Dbee16 10:2970279fce70 126 while ( blue.readable()==0 ) {} // loops until there is an input from the user
Dbee16 10:2970279fce70 127 char r_speed = blue.getc();
Dbee16 10:2970279fce70 128 wait(0.1);
Dbee16 10:2970279fce70 129 int l_result = l_speed - '0';
Dbee16 10:2970279fce70 130 int r_result = r_speed - '0';
Dbee16 10:2970279fce70 131 set_direction(direction, (float)l_result/10, (float)r_result/10);
Dbee16 10:2970279fce70 132 }
Dbee16 10:2970279fce70 133
Dbee16 10:2970279fce70 134
Dbee16 8:eefbd3880d28 135 }
Dbee16 10:2970279fce70 136
Dbee16 10:2970279fce70 137 }
cmcmaster 0:59d25bb7f825 138 int main()
cmcmaster 0:59d25bb7f825 139 {
Dbee16 2:1feae3cb6731 140 //Set PWM frequency to 1000Hz
cmcmaster 0:59d25bb7f825 141 motor_l.period( 1.0f / (float) PWM_FREQ);
cmcmaster 0:59d25bb7f825 142 motor_r.period( 1.0f / (float) PWM_FREQ);
cmcmaster 0:59d25bb7f825 143 //Initialise direction to nothing.
cmcmaster 0:59d25bb7f825 144 motor_rf=0;
cmcmaster 0:59d25bb7f825 145 motor_rb=0;
cmcmaster 0:59d25bb7f825 146 motor_lf=0;
cmcmaster 0:59d25bb7f825 147 motor_lb=0;
Dbee16 10:2970279fce70 148 while(1){
Dbee16 10:2970279fce70 149 manual_mode();
Dbee16 10:2970279fce70 150 }
cmcmaster 0:59d25bb7f825 151
Dbee16 10:2970279fce70 152 /* //Also Working Demo
Dbee16 10:2970279fce70 153 wait(2);
Dbee16 10:2970279fce70 154 led = !led;
Dbee16 10:2970279fce70 155 set_direction(0x11, 0.5, 0); //This would set the robot to go forward, at half speed, straight
Dbee16 10:2970279fce70 156
Dbee16 10:2970279fce70 157 wait(2);
Dbee16 10:2970279fce70 158 led = !led;
Dbee16 10:2970279fce70 159 set_direction(0x11, 0.8, 0.2); //this would set robot to go forward, at 100% to the right and 60% to the left (turn right)
Dbee16 10:2970279fce70 160
Dbee16 10:2970279fce70 161 wait(2);
Dbee16 10:2970279fce70 162 led = !led;
Dbee16 10:2970279fce70 163 set_direction(0x00, 0.3, 0.7); //robot back, 100% rightmotor; 0%left (technically -40%, but 0% is min)
Dbee16 10:2970279fce70 164
Dbee16 10:2970279fce70 165 wait(2);
Dbee16 10:2970279fce70 166 led = !led;
Dbee16 10:2970279fce70 167 set_direction(0x11, 0.5, 0.5); // robot pivots forward, to the right, full speed (100% duty right ; 0% duty left)
Dbee16 10:2970279fce70 168
Dbee16 10:2970279fce70 169 wait(2);
Dbee16 10:2970279fce70 170 led = !led;
Dbee16 10:2970279fce70 171 set_direction(0x11, 0.5, -0.5); //robot pivots forward, to the left, full speed (0% duty right ; 100% duty left)
Dbee16 10:2970279fce70 172
Dbee16 10:2970279fce70 173 wait(2);
Dbee16 10:2970279fce70 174 led = !led;
Dbee16 10:2970279fce70 175 set_direction(0x11, 0.3, 0.5); //robot pivots forard, to the right , at 80% speed (80% right; 0% left)
Dbee16 10:2970279fce70 176
Dbee16 10:2970279fce70 177 wait(2);
Dbee16 10:2970279fce70 178 led = !led;
Dbee16 10:2970279fce70 179 set_direction(0x11, -0.3, 0.5); //robot pivotrs foward, to the right, AT 20% SPEED (20%, 0%)
Dbee16 10:2970279fce70 180
Dbee16 10:2970279fce70 181 wait(2);
Dbee16 10:2970279fce70 182 led = !led;
Dbee16 10:2970279fce70 183 set_direction(0x10, 0.5, 0); //robot spins to teh right, at half speed. Left forward 50% ; Right forward 50%
Dbee16 10:2970279fce70 184
Dbee16 10:2970279fce70 185 wait(2);
Dbee16 10:2970279fce70 186 led = !led;
Dbee16 10:2970279fce70 187 set_direction(0x10, 0.5, 0.3); //robot spins to the right, 80% right forward ; 20% left backward
Dbee16 10:2970279fce70 188
Dbee16 10:2970279fce70 189 }*/
Dbee16 10:2970279fce70 190
Dbee16 10:2970279fce70 191
Dbee16 10:2970279fce70 192 /* // working demo
Dbee16 10:2970279fce70 193
Dbee16 10:2970279fce70 194 while(1) { //infinite loop
Dbee16 10:2970279fce70 195 //***********************************************
Dbee16 10:2970279fce70 196 myled = !myled;
Dbee16 10:2970279fce70 197
Dbee16 10:2970279fce70 198 //Set duty cycle at 100% AKA Full Speed
Dbee16 10:2970279fce70 199 motor_r.write(1.0);
Dbee16 10:2970279fce70 200 motor_l.write(1.0);
Dbee16 9:92895704e1a4 201
Dbee16 10:2970279fce70 202 motor_rf=1;
Dbee16 10:2970279fce70 203 motor_rb=0;
Dbee16 10:2970279fce70 204 motor_lf=1;
Dbee16 10:2970279fce70 205 motor_lb=0; //go forwards
Dbee16 10:2970279fce70 206 wait(2);
Dbee16 10:2970279fce70 207 //**************************************
Dbee16 10:2970279fce70 208 myled = !myled;
Dbee16 10:2970279fce70 209
Dbee16 10:2970279fce70 210 motor_r.write(0.75);
Dbee16 10:2970279fce70 211 motor_l.write(0.75);
Dbee16 10:2970279fce70 212
Dbee16 10:2970279fce70 213 motor_rf=1;
Dbee16 10:2970279fce70 214 motor_rb=0;
Dbee16 10:2970279fce70 215 motor_lf=1;
Dbee16 10:2970279fce70 216 motor_lb=0; //go forwards
Dbee16 10:2970279fce70 217 //
Dbee16 10:2970279fce70 218 wait(2);
Dbee16 10:2970279fce70 219
Dbee16 10:2970279fce70 220 myled = !myled;
Dbee16 10:2970279fce70 221
Dbee16 10:2970279fce70 222 motor_r.write(0.5);
Dbee16 10:2970279fce70 223 motor_l.write(0.5);
Dbee16 9:92895704e1a4 224
Dbee16 10:2970279fce70 225 motor_rf=1;
Dbee16 10:2970279fce70 226 motor_rb=0;
Dbee16 10:2970279fce70 227 motor_lf=1;
Dbee16 10:2970279fce70 228 motor_lb=0;
Dbee16 10:2970279fce70 229
Dbee16 10:2970279fce70 230
Dbee16 10:2970279fce70 231 wait(2);
Dbee16 10:2970279fce70 232 myled = !myled;
Dbee16 10:2970279fce70 233
Dbee16 10:2970279fce70 234 motor_r.write(0.30);
Dbee16 10:2970279fce70 235 motor_l.write(0.30);
Dbee16 10:2970279fce70 236
Dbee16 10:2970279fce70 237 motor_rf=1;
Dbee16 10:2970279fce70 238 motor_rb=0;
Dbee16 10:2970279fce70 239 motor_lf=1;
Dbee16 10:2970279fce70 240 motor_lb=0;
Dbee16 10:2970279fce70 241
Dbee16 10:2970279fce70 242 wait(2);
Dbee16 10:2970279fce70 243
Dbee16 10:2970279fce70 244 myled = !myled;
Dbee16 10:2970279fce70 245 motor_r.write(1.0);
Dbee16 10:2970279fce70 246 motor_l.write(1.0);
Dbee16 10:2970279fce70 247
Dbee16 10:2970279fce70 248 motor_rf=0;
Dbee16 10:2970279fce70 249 motor_rb=1;
Dbee16 10:2970279fce70 250 motor_lf=0;
Dbee16 10:2970279fce70 251 motor_lb=1; //go backwards
Dbee16 10:2970279fce70 252 //
Dbee16 10:2970279fce70 253 wait(2);
Dbee16 8:eefbd3880d28 254
Dbee16 8:eefbd3880d28 255
Dbee16 8:eefbd3880d28 256
Dbee16 10:2970279fce70 257 myled = !myled;
Dbee16 10:2970279fce70 258 motor_r.write(0.5);
Dbee16 10:2970279fce70 259 motor_l.write(0.5);
Dbee16 10:2970279fce70 260
Dbee16 10:2970279fce70 261 motor_rf=0;
Dbee16 10:2970279fce70 262 motor_rb=0;
Dbee16 10:2970279fce70 263 motor_lf=0;
Dbee16 10:2970279fce70 264 motor_lb=1; //
Dbee16 10:2970279fce70 265
Dbee16 10:2970279fce70 266 wait(2);
Dbee16 10:2970279fce70 267 myled = !myled;
Dbee16 10:2970279fce70 268
Dbee16 10:2970279fce70 269 motor_rf=0;
Dbee16 10:2970279fce70 270 motor_rb=1;
Dbee16 10:2970279fce70 271 motor_lf=0;
Dbee16 10:2970279fce70 272 motor_lb=0; //reverse turn
Dbee16 10:2970279fce70 273
Dbee16 10:2970279fce70 274 wait(2);
Dbee16 10:2970279fce70 275
Dbee16 10:2970279fce70 276 myled = !myled;
Dbee16 10:2970279fce70 277 motor_r.write(0.5);
Dbee16 10:2970279fce70 278 motor_l.write(1.0);
Dbee16 10:2970279fce70 279
Dbee16 10:2970279fce70 280 motor_rf=1;
Dbee16 10:2970279fce70 281 motor_rb=0;
Dbee16 10:2970279fce70 282 motor_lf=1;
Dbee16 10:2970279fce70 283 motor_lb=0; //go forwards
Dbee16 10:2970279fce70 284 //
Dbee16 10:2970279fce70 285 wait(4);
Dbee16 10:2970279fce70 286 }*/
Dbee16 8:eefbd3880d28 287
Dbee16 8:eefbd3880d28 288
Dbee16 10:2970279fce70 289
Dbee16 10:2970279fce70 290 }