Team Ascent / Mbed 2 deprecated TDPCode1

Dependencies:   mbed

Committer:
Dbee16
Date:
Fri Mar 06 15:18:14 2015 +0000
Revision:
4:6db8e0babea7
Parent:
3:b8556c89b389
Child:
5:22d7fee2e26e
Child:
7:38def1917030
Just in case

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)
cmcmaster 0:59d25bb7f825 13 PwmOut motor_l (PTC2);
cmcmaster 0:59d25bb7f825 14 PwmOut motor_r (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 2:1feae3cb6731 19 void set_direction( int direction, float speed, float angle)
cmcmaster 0:59d25bb7f825 20 {
Dbee16 1:2bab3a0bc3bc 21 /* *******************Example Use*****************
Dbee16 2:1feae3cb6731 22 set_direction("11", 0.5, 0); //This would set the robot to go forward, at half speed, straight
Dbee16 2:1feae3cb6731 23
Dbee16 2:1feae3cb6731 24 set_directin( "11", 0.8, 0.2); //this would set robot to go forward, at 100% to the right and 60% to the left (turn right)
Dbee16 1:2bab3a0bc3bc 25
Dbee16 2:1feae3cb6731 26 set_direction("00", 0.3, 0.7); //robot back, 100% rightmotor; 0%left (technically -40%, but 0% is min)
Dbee16 1:2bab3a0bc3bc 27
Dbee16 2:1feae3cb6731 28 set_direction("11", 0.5, 0.5); // robot pivots forward, to the right, full speed (100% duty right ; 0% duty left)
Dbee16 1:2bab3a0bc3bc 29
Dbee16 2:1feae3cb6731 30 set_direction("11", 0.5, -0.5); //robot pivots forward, to the left, full speed (0% duty right ; 100% duty left)
Dbee16 1:2bab3a0bc3bc 31
Dbee16 2:1feae3cb6731 32 set_direction("11", 0.3, 0.5); //robot pivots forard, to the right , at 80% speed (80% right; 0% left)
Dbee16 1:2bab3a0bc3bc 33
Dbee16 2:1feae3cb6731 34 set_direction("11", -0.3, 0.5); //robot pivotrs foward, to the right, AT 20% SPEED (20%, 0%)
Dbee16 1:2bab3a0bc3bc 35
Dbee16 2:1feae3cb6731 36 set_direction("10", 0.5, 0); //robot spins to teh right, at half speed. Left forward 50% ; Right forward 50%
Dbee16 2:1feae3cb6731 37
Dbee16 2:1feae3cb6731 38 set_direction("10", 0.5, 0.3); //robot spins to the right, 80% right forward ; 20% left backward
Dbee16 1:2bab3a0bc3bc 39
Dbee16 1:2bab3a0bc3bc 40 */
Dbee16 2:1feae3cb6731 41
Dbee16 2:1feae3cb6731 42 float r_result = (speed + angle); //where angle can be postive and negative and will TURN the robot
Dbee16 2:1feae3cb6731 43 float l_result = (speed - angle); //if turning left, you'd make the angle postive (right motor goes faster left motor goes slwoer)
Dbee16 2:1feae3cb6731 44 switch( direction ) {
Dbee16 2:1feae3cb6731 45 case 0x11: { //forward
Dbee16 2:1feae3cb6731 46 motor_r.write( r_result < 0 ? 0 : r_result > 1 ? 1 : r_result);
Dbee16 2:1feae3cb6731 47 //Look up ternary statements -- {condition ? value_if_true : value_if_false} This makes 0<result<1
Dbee16 2:1feae3cb6731 48 motor_l.write( l_result < 0 ? 0 : l_result > 1 ? 1 : l_result);
Dbee16 2:1feae3cb6731 49
cmcmaster 0:59d25bb7f825 50 motor_rf=1;
cmcmaster 0:59d25bb7f825 51 motor_rb=0;
cmcmaster 0:59d25bb7f825 52 motor_lf=1;
cmcmaster 0:59d25bb7f825 53 motor_lb=0;
cmcmaster 0:59d25bb7f825 54 }
Dbee16 2:1feae3cb6731 55 case 0x00: { //backward
Dbee16 2:1feae3cb6731 56 motor_r.write( r_result < 0 ? 0 : r_result > 1 ? 1 : r_result);
Dbee16 2:1feae3cb6731 57 motor_l.write( l_result < 0 ? 0 : l_result > 1 ? 1 : l_result);
Dbee16 2:1feae3cb6731 58
cmcmaster 0:59d25bb7f825 59 motor_rf=0;
cmcmaster 0:59d25bb7f825 60 motor_rb=1;
cmcmaster 0:59d25bb7f825 61 motor_lf=0;
cmcmaster 0:59d25bb7f825 62 motor_lb=1;
cmcmaster 0:59d25bb7f825 63 }
Dbee16 2:1feae3cb6731 64 case 0x01: { //spin left -- Right forward, left backward
Dbee16 2:1feae3cb6731 65 motor_r.write( r_result < 0 ? 0 : r_result > 1 ? 1 : r_result);
Dbee16 2:1feae3cb6731 66 motor_l.write( l_result < 0 ? 0 : l_result > 1 ? 1 : l_result);
Dbee16 2:1feae3cb6731 67
Dbee16 2:1feae3cb6731 68 motor_rf=1;
Dbee16 2:1feae3cb6731 69 motor_rb=0;
Dbee16 2:1feae3cb6731 70 motor_lf=0;
Dbee16 2:1feae3cb6731 71 motor_lb=1;
Dbee16 2:1feae3cb6731 72 }
Dbee16 2:1feae3cb6731 73 case 0x10: { //spin right
Dbee16 2:1feae3cb6731 74 motor_r.write( r_result < 0 ? 0 : r_result > 1 ? 1 : r_result);
Dbee16 2:1feae3cb6731 75 motor_l.write( l_result < 0 ? 0 : l_result > 1 ? 1 : l_result);
Dbee16 2:1feae3cb6731 76
Dbee16 2:1feae3cb6731 77 motor_rf=0;
Dbee16 2:1feae3cb6731 78 motor_rb=1;
Dbee16 2:1feae3cb6731 79 motor_lf=1;
Dbee16 2:1feae3cb6731 80 motor_lb=0;
Dbee16 2:1feae3cb6731 81 }
cmcmaster 0:59d25bb7f825 82 }
cmcmaster 0:59d25bb7f825 83 }
cmcmaster 0:59d25bb7f825 84 int main()
cmcmaster 0:59d25bb7f825 85 {
Dbee16 2:1feae3cb6731 86 //Set PWM frequency to 1000Hz
cmcmaster 0:59d25bb7f825 87 motor_l.period( 1.0f / (float) PWM_FREQ);
cmcmaster 0:59d25bb7f825 88 motor_r.period( 1.0f / (float) PWM_FREQ);
cmcmaster 0:59d25bb7f825 89 //Initialise direction to nothing.
cmcmaster 0:59d25bb7f825 90 motor_rf=0;
cmcmaster 0:59d25bb7f825 91 motor_rb=0;
cmcmaster 0:59d25bb7f825 92 motor_lf=0;
cmcmaster 0:59d25bb7f825 93 motor_lb=0;
cmcmaster 0:59d25bb7f825 94
Dbee16 1:2bab3a0bc3bc 95 while(1) {
Dbee16 2:1feae3cb6731 96
Dbee16 1:2bab3a0bc3bc 97 wait(2);
Dbee16 1:2bab3a0bc3bc 98 led = !led;
Dbee16 2:1feae3cb6731 99 set_direction(0x11, 0.5, 0); //This would set the robot to go forward, at half speed, straight
Dbee16 2:1feae3cb6731 100
Dbee16 2:1feae3cb6731 101 wait(2);
Dbee16 2:1feae3cb6731 102 led = !led;
Dbee16 2:1feae3cb6731 103 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 1:2bab3a0bc3bc 104
Dbee16 1:2bab3a0bc3bc 105 wait(2);
Dbee16 1:2bab3a0bc3bc 106 led = !led;
Dbee16 2:1feae3cb6731 107 set_direction(0x00, 0.3, 0.7); //robot back, 100% rightmotor; 0%left (technically -40%, but 0% is min)
Dbee16 1:2bab3a0bc3bc 108
Dbee16 1:2bab3a0bc3bc 109 wait(2);
Dbee16 1:2bab3a0bc3bc 110 led = !led;
Dbee16 2:1feae3cb6731 111 set_direction(0x11, 0.5, 0.5); // robot pivots forward, to the right, full speed (100% duty right ; 0% duty left)
Dbee16 1:2bab3a0bc3bc 112
Dbee16 1:2bab3a0bc3bc 113 wait(2);
Dbee16 1:2bab3a0bc3bc 114 led = !led;
Dbee16 2:1feae3cb6731 115 set_direction(0x11, 0.5, -0.5); //robot pivots forward, to the left, full speed (0% duty right ; 100% duty left)
Dbee16 1:2bab3a0bc3bc 116
Dbee16 1:2bab3a0bc3bc 117 wait(2);
Dbee16 1:2bab3a0bc3bc 118 led = !led;
Dbee16 2:1feae3cb6731 119 set_direction(0x11, 0.3, 0.5); //robot pivots forard, to the right , at 80% speed (80% right; 0% left)
Dbee16 1:2bab3a0bc3bc 120
Dbee16 1:2bab3a0bc3bc 121 wait(2);
Dbee16 1:2bab3a0bc3bc 122 led = !led;
Dbee16 2:1feae3cb6731 123 set_direction(0x11, -0.3, 0.5); //robot pivotrs foward, to the right, AT 20% SPEED (20%, 0%)
Dbee16 1:2bab3a0bc3bc 124
Dbee16 1:2bab3a0bc3bc 125 wait(2);
Dbee16 1:2bab3a0bc3bc 126 led = !led;
Dbee16 2:1feae3cb6731 127 set_direction(0x10, 0.5, 0); //robot spins to teh right, at half speed. Left forward 50% ; Right forward 50%
Dbee16 2:1feae3cb6731 128
Dbee16 2:1feae3cb6731 129 wait(2);
Dbee16 2:1feae3cb6731 130 led = !led;
Dbee16 2:1feae3cb6731 131 set_direction(0x10, 0.5, 0.3); //robot spins to the right, 80% right forward ; 20% left backward
Dbee16 2:1feae3cb6731 132
Dbee16 1:2bab3a0bc3bc 133 }
Dbee16 1:2bab3a0bc3bc 134
Dbee16 1:2bab3a0bc3bc 135
Dbee16 3:b8556c89b389 136 /* // working demo
Dbee16 1:2bab3a0bc3bc 137
cmcmaster 0:59d25bb7f825 138 while(1) { //infinite loop
cmcmaster 0:59d25bb7f825 139 //***********************************************
cmcmaster 0:59d25bb7f825 140 myled = !myled;
cmcmaster 0:59d25bb7f825 141
cmcmaster 0:59d25bb7f825 142 //Set duty cycle at 100% AKA Full Speed
cmcmaster 0:59d25bb7f825 143 motor_r.write(1.0);
cmcmaster 0:59d25bb7f825 144 motor_l.write(1.0);
cmcmaster 0:59d25bb7f825 145
cmcmaster 0:59d25bb7f825 146 motor_rf=1;
cmcmaster 0:59d25bb7f825 147 motor_rb=0;
cmcmaster 0:59d25bb7f825 148 motor_lf=1;
cmcmaster 0:59d25bb7f825 149 motor_lb=0; //go forwards
cmcmaster 0:59d25bb7f825 150 wait(2);
cmcmaster 0:59d25bb7f825 151 //**************************************
cmcmaster 0:59d25bb7f825 152 myled = !myled;
cmcmaster 0:59d25bb7f825 153
cmcmaster 0:59d25bb7f825 154 motor_r.write(0.75);
cmcmaster 0:59d25bb7f825 155 motor_l.write(0.75);
cmcmaster 0:59d25bb7f825 156
cmcmaster 0:59d25bb7f825 157 motor_rf=1;
cmcmaster 0:59d25bb7f825 158 motor_rb=0;
cmcmaster 0:59d25bb7f825 159 motor_lf=1;
cmcmaster 0:59d25bb7f825 160 motor_lb=0; //go forwards
cmcmaster 0:59d25bb7f825 161 //
cmcmaster 0:59d25bb7f825 162 wait(2);
cmcmaster 0:59d25bb7f825 163
cmcmaster 0:59d25bb7f825 164 myled = !myled;
cmcmaster 0:59d25bb7f825 165
cmcmaster 0:59d25bb7f825 166 motor_r.write(0.5);
cmcmaster 0:59d25bb7f825 167 motor_l.write(0.5);
cmcmaster 0:59d25bb7f825 168
cmcmaster 0:59d25bb7f825 169 motor_rf=1;
cmcmaster 0:59d25bb7f825 170 motor_rb=0;
cmcmaster 0:59d25bb7f825 171 motor_lf=1;
cmcmaster 0:59d25bb7f825 172 motor_lb=0;
cmcmaster 0:59d25bb7f825 173
cmcmaster 0:59d25bb7f825 174
cmcmaster 0:59d25bb7f825 175 wait(2);
cmcmaster 0:59d25bb7f825 176 myled = !myled;
cmcmaster 0:59d25bb7f825 177
cmcmaster 0:59d25bb7f825 178 motor_r.write(0.30);
cmcmaster 0:59d25bb7f825 179 motor_l.write(0.30);
cmcmaster 0:59d25bb7f825 180
cmcmaster 0:59d25bb7f825 181 motor_rf=1;
cmcmaster 0:59d25bb7f825 182 motor_rb=0;
cmcmaster 0:59d25bb7f825 183 motor_lf=1;
cmcmaster 0:59d25bb7f825 184 motor_lb=0;
cmcmaster 0:59d25bb7f825 185
cmcmaster 0:59d25bb7f825 186 wait(2);
cmcmaster 0:59d25bb7f825 187
cmcmaster 0:59d25bb7f825 188 myled = !myled;
cmcmaster 0:59d25bb7f825 189 motor_r.write(1.0);
cmcmaster 0:59d25bb7f825 190 motor_l.write(1.0);
cmcmaster 0:59d25bb7f825 191
cmcmaster 0:59d25bb7f825 192 motor_rf=0;
cmcmaster 0:59d25bb7f825 193 motor_rb=1;
cmcmaster 0:59d25bb7f825 194 motor_lf=0;
Dbee16 3:b8556c89b389 195 motor_lb=1; //go backwards
cmcmaster 0:59d25bb7f825 196 //
cmcmaster 0:59d25bb7f825 197 wait(2);
cmcmaster 0:59d25bb7f825 198
cmcmaster 0:59d25bb7f825 199
cmcmaster 0:59d25bb7f825 200
cmcmaster 0:59d25bb7f825 201 myled = !myled;
cmcmaster 0:59d25bb7f825 202 motor_r.write(0.5);
cmcmaster 0:59d25bb7f825 203 motor_l.write(0.5);
cmcmaster 0:59d25bb7f825 204
cmcmaster 0:59d25bb7f825 205 motor_rf=0;
cmcmaster 0:59d25bb7f825 206 motor_rb=0;
cmcmaster 0:59d25bb7f825 207 motor_lf=0;
cmcmaster 0:59d25bb7f825 208 motor_lb=1; //
cmcmaster 0:59d25bb7f825 209
cmcmaster 0:59d25bb7f825 210 wait(2);
cmcmaster 0:59d25bb7f825 211 myled = !myled;
cmcmaster 0:59d25bb7f825 212
cmcmaster 0:59d25bb7f825 213 motor_rf=0;
cmcmaster 0:59d25bb7f825 214 motor_rb=1;
cmcmaster 0:59d25bb7f825 215 motor_lf=0;
cmcmaster 0:59d25bb7f825 216 motor_lb=0; //reverse turn
cmcmaster 0:59d25bb7f825 217
cmcmaster 0:59d25bb7f825 218 wait(2);
cmcmaster 0:59d25bb7f825 219
cmcmaster 0:59d25bb7f825 220 myled = !myled;
cmcmaster 0:59d25bb7f825 221 motor_r.write(0.5);
cmcmaster 0:59d25bb7f825 222 motor_l.write(1.0);
cmcmaster 0:59d25bb7f825 223
cmcmaster 0:59d25bb7f825 224 motor_rf=1;
cmcmaster 0:59d25bb7f825 225 motor_rb=0;
cmcmaster 0:59d25bb7f825 226 motor_lf=1;
cmcmaster 0:59d25bb7f825 227 motor_lb=0; //go forwards
cmcmaster 0:59d25bb7f825 228 //
cmcmaster 0:59d25bb7f825 229 wait(4);
Dbee16 3:b8556c89b389 230 }*/
Dbee16 3:b8556c89b389 231
cmcmaster 0:59d25bb7f825 232
cmcmaster 0:59d25bb7f825 233
cmcmaster 0:59d25bb7f825 234 }