Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
main.cpp@0:59d25bb7f825, 2015-02-04 (annotated)
- Committer:
- cmcmaster
- Date:
- Wed Feb 04 16:55:27 2015 +0000
- Revision:
- 0:59d25bb7f825
- Child:
- 1:2bab3a0bc3bc
Basically I've taken the old code from the demonstration that worked. Now i'm expanding upon it to make a more robust system.
Who changed what in which revision?
User | Revision | Line number | New 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 |
cmcmaster | 0:59d25bb7f825 | 17 | DigitalOut myled(LED_RED); |
cmcmaster | 0:59d25bb7f825 | 18 | /* |
cmcmaster | 0:59d25bb7f825 | 19 | Pivot Right: //Change duties for speed |
cmcmaster | 0:59d25bb7f825 | 20 | motor_rf=0; |
cmcmaster | 0:59d25bb7f825 | 21 | motor_rb=0; |
cmcmaster | 0:59d25bb7f825 | 22 | motor_lf=1; |
cmcmaster | 0:59d25bb7f825 | 23 | motor_lb=0; |
cmcmaster | 0:59d25bb7f825 | 24 | Pivot Left: //Change duties for speed |
cmcmaster | 0:59d25bb7f825 | 25 | motor_rf=1; |
cmcmaster | 0:59d25bb7f825 | 26 | motor_rb=0; |
cmcmaster | 0:59d25bb7f825 | 27 | motor_lf=0; |
cmcmaster | 0:59d25bb7f825 | 28 | motor_lb=0; |
cmcmaster | 0:59d25bb7f825 | 29 | Forwards: //Change duties for speed & direction |
cmcmaster | 0:59d25bb7f825 | 30 | motor_rf=1; |
cmcmaster | 0:59d25bb7f825 | 31 | motor_rb=0; |
cmcmaster | 0:59d25bb7f825 | 32 | motor_lf=1; |
cmcmaster | 0:59d25bb7f825 | 33 | motor_lb=0; |
cmcmaster | 0:59d25bb7f825 | 34 | Backwards: //Change duties for speed & direction |
cmcmaster | 0:59d25bb7f825 | 35 | motor_rf=0; |
cmcmaster | 0:59d25bb7f825 | 36 | motor_rb=1; |
cmcmaster | 0:59d25bb7f825 | 37 | motor_lf=0; |
cmcmaster | 0:59d25bb7f825 | 38 | motor_lb=1; |
cmcmaster | 0:59d25bb7f825 | 39 | */ |
cmcmaster | 0:59d25bb7f825 | 40 | void set_direction( int nature_of_direction, float speed) |
cmcmaster | 0:59d25bb7f825 | 41 | { |
cmcmaster | 0:59d25bb7f825 | 42 | switch(nature_of_direction) { |
cmcmaster | 0:59d25bb7f825 | 43 | case "forward": { |
cmcmaster | 0:59d25bb7f825 | 44 | motor_r.write(speed + angle); //where angle can be postive and negative and will TURN the robot |
cmcmaster | 0:59d25bb7f825 | 45 | motor_l.write(speed - angle); |
cmcmaster | 0:59d25bb7f825 | 46 | //if turning left, you'd make the angle postive (right motor goes faster left motor goes slwoer) |
cmcmaster | 0:59d25bb7f825 | 47 | motor_rf=1; |
cmcmaster | 0:59d25bb7f825 | 48 | motor_rb=0; |
cmcmaster | 0:59d25bb7f825 | 49 | motor_lf=1; |
cmcmaster | 0:59d25bb7f825 | 50 | motor_lb=0; |
cmcmaster | 0:59d25bb7f825 | 51 | } |
cmcmaster | 0:59d25bb7f825 | 52 | case "backwards": { |
cmcmaster | 0:59d25bb7f825 | 53 | motor_r.write(speed + angle); //where angle can be postive and negative and will TURN the robot |
cmcmaster | 0:59d25bb7f825 | 54 | motor_l.write(speed - angle); |
cmcmaster | 0:59d25bb7f825 | 55 | //if turning left, you'd make the angle postive (right motor goes faster left motor goes slwoer) |
cmcmaster | 0:59d25bb7f825 | 56 | motor_rf=0; |
cmcmaster | 0:59d25bb7f825 | 57 | motor_rb=1; |
cmcmaster | 0:59d25bb7f825 | 58 | motor_lf=0; |
cmcmaster | 0:59d25bb7f825 | 59 | motor_lb=1; |
cmcmaster | 0:59d25bb7f825 | 60 | } |
cmcmaster | 0:59d25bb7f825 | 61 | case "pivot right": { |
cmcmaster | 0:59d25bb7f825 | 62 | motor_r.write(0); //motor doesn't need to be enabled |
cmcmaster | 0:59d25bb7f825 | 63 | motor_l.write(speed); |
cmcmaster | 0:59d25bb7f825 | 64 | |
cmcmaster | 0:59d25bb7f825 | 65 | motor_rf=0; |
cmcmaster | 0:59d25bb7f825 | 66 | motor_rb=0; |
cmcmaster | 0:59d25bb7f825 | 67 | motor_lf=1; |
cmcmaster | 0:59d25bb7f825 | 68 | motor_lb=0; |
cmcmaster | 0:59d25bb7f825 | 69 | } |
cmcmaster | 0:59d25bb7f825 | 70 | case "pivot left": { |
cmcmaster | 0:59d25bb7f825 | 71 | motor_r.write(speed); |
cmcmaster | 0:59d25bb7f825 | 72 | motor_l.write(0); //motor doesn't need to be enabled |
cmcmaster | 0:59d25bb7f825 | 73 | |
cmcmaster | 0:59d25bb7f825 | 74 | motor_rf=1; |
cmcmaster | 0:59d25bb7f825 | 75 | motor_rb=0; |
cmcmaster | 0:59d25bb7f825 | 76 | motor_lf=0; |
cmcmaster | 0:59d25bb7f825 | 77 | motor_lb=0; |
cmcmaster | 0:59d25bb7f825 | 78 | } |
cmcmaster | 0:59d25bb7f825 | 79 | } |
cmcmaster | 0:59d25bb7f825 | 80 | } |
cmcmaster | 0:59d25bb7f825 | 81 | |
cmcmaster | 0:59d25bb7f825 | 82 | int main() |
cmcmaster | 0:59d25bb7f825 | 83 | { |
cmcmaster | 0:59d25bb7f825 | 84 | |
cmcmaster | 0:59d25bb7f825 | 85 | //Set PWM frequency to 1000Hz |
cmcmaster | 0:59d25bb7f825 | 86 | motor_l.period( 1.0f / (float) PWM_FREQ); |
cmcmaster | 0:59d25bb7f825 | 87 | motor_r.period( 1.0f / (float) PWM_FREQ); |
cmcmaster | 0:59d25bb7f825 | 88 | //Initialise direction to nothing. |
cmcmaster | 0:59d25bb7f825 | 89 | motor_rf=0; |
cmcmaster | 0:59d25bb7f825 | 90 | motor_rb=0; |
cmcmaster | 0:59d25bb7f825 | 91 | motor_lf=0; |
cmcmaster | 0:59d25bb7f825 | 92 | motor_lb=0; |
cmcmaster | 0:59d25bb7f825 | 93 | |
cmcmaster | 0:59d25bb7f825 | 94 | |
cmcmaster | 0:59d25bb7f825 | 95 | while(1) { //infinite loop |
cmcmaster | 0:59d25bb7f825 | 96 | //*********************************************** |
cmcmaster | 0:59d25bb7f825 | 97 | myled = !myled; |
cmcmaster | 0:59d25bb7f825 | 98 | |
cmcmaster | 0:59d25bb7f825 | 99 | //Set duty cycle at 100% AKA Full Speed |
cmcmaster | 0:59d25bb7f825 | 100 | motor_r.write(1.0); |
cmcmaster | 0:59d25bb7f825 | 101 | motor_l.write(1.0); |
cmcmaster | 0:59d25bb7f825 | 102 | |
cmcmaster | 0:59d25bb7f825 | 103 | motor_rf=1; |
cmcmaster | 0:59d25bb7f825 | 104 | motor_rb=0; |
cmcmaster | 0:59d25bb7f825 | 105 | motor_lf=1; |
cmcmaster | 0:59d25bb7f825 | 106 | motor_lb=0; //go forwards |
cmcmaster | 0:59d25bb7f825 | 107 | wait(2); |
cmcmaster | 0:59d25bb7f825 | 108 | //************************************** |
cmcmaster | 0:59d25bb7f825 | 109 | myled = !myled; |
cmcmaster | 0:59d25bb7f825 | 110 | |
cmcmaster | 0:59d25bb7f825 | 111 | motor_r.write(0.75); |
cmcmaster | 0:59d25bb7f825 | 112 | motor_l.write(0.75); |
cmcmaster | 0:59d25bb7f825 | 113 | |
cmcmaster | 0:59d25bb7f825 | 114 | motor_rf=1; |
cmcmaster | 0:59d25bb7f825 | 115 | motor_rb=0; |
cmcmaster | 0:59d25bb7f825 | 116 | motor_lf=1; |
cmcmaster | 0:59d25bb7f825 | 117 | motor_lb=0; //go forwards |
cmcmaster | 0:59d25bb7f825 | 118 | // |
cmcmaster | 0:59d25bb7f825 | 119 | wait(2); |
cmcmaster | 0:59d25bb7f825 | 120 | |
cmcmaster | 0:59d25bb7f825 | 121 | myled = !myled; |
cmcmaster | 0:59d25bb7f825 | 122 | |
cmcmaster | 0:59d25bb7f825 | 123 | motor_r.write(0.5); |
cmcmaster | 0:59d25bb7f825 | 124 | motor_l.write(0.5); |
cmcmaster | 0:59d25bb7f825 | 125 | |
cmcmaster | 0:59d25bb7f825 | 126 | motor_rf=1; |
cmcmaster | 0:59d25bb7f825 | 127 | motor_rb=0; |
cmcmaster | 0:59d25bb7f825 | 128 | motor_lf=1; |
cmcmaster | 0:59d25bb7f825 | 129 | motor_lb=0; |
cmcmaster | 0:59d25bb7f825 | 130 | |
cmcmaster | 0:59d25bb7f825 | 131 | |
cmcmaster | 0:59d25bb7f825 | 132 | wait(2); |
cmcmaster | 0:59d25bb7f825 | 133 | myled = !myled; |
cmcmaster | 0:59d25bb7f825 | 134 | |
cmcmaster | 0:59d25bb7f825 | 135 | motor_r.write(0.30); |
cmcmaster | 0:59d25bb7f825 | 136 | motor_l.write(0.30); |
cmcmaster | 0:59d25bb7f825 | 137 | |
cmcmaster | 0:59d25bb7f825 | 138 | motor_rf=1; |
cmcmaster | 0:59d25bb7f825 | 139 | motor_rb=0; |
cmcmaster | 0:59d25bb7f825 | 140 | motor_lf=1; |
cmcmaster | 0:59d25bb7f825 | 141 | motor_lb=0; |
cmcmaster | 0:59d25bb7f825 | 142 | |
cmcmaster | 0:59d25bb7f825 | 143 | wait(2); |
cmcmaster | 0:59d25bb7f825 | 144 | |
cmcmaster | 0:59d25bb7f825 | 145 | myled = !myled; |
cmcmaster | 0:59d25bb7f825 | 146 | motor_r.write(1.0); |
cmcmaster | 0:59d25bb7f825 | 147 | motor_l.write(1.0); |
cmcmaster | 0:59d25bb7f825 | 148 | |
cmcmaster | 0:59d25bb7f825 | 149 | motor_rf=0; |
cmcmaster | 0:59d25bb7f825 | 150 | motor_rb=1; |
cmcmaster | 0:59d25bb7f825 | 151 | motor_lf=0; |
cmcmaster | 0:59d25bb7f825 | 152 | motor_lb=1; //go forwards |
cmcmaster | 0:59d25bb7f825 | 153 | // |
cmcmaster | 0:59d25bb7f825 | 154 | wait(2); |
cmcmaster | 0:59d25bb7f825 | 155 | |
cmcmaster | 0:59d25bb7f825 | 156 | |
cmcmaster | 0:59d25bb7f825 | 157 | |
cmcmaster | 0:59d25bb7f825 | 158 | myled = !myled; |
cmcmaster | 0:59d25bb7f825 | 159 | motor_r.write(0.5); |
cmcmaster | 0:59d25bb7f825 | 160 | motor_l.write(0.5); |
cmcmaster | 0:59d25bb7f825 | 161 | |
cmcmaster | 0:59d25bb7f825 | 162 | motor_rf=0; |
cmcmaster | 0:59d25bb7f825 | 163 | motor_rb=0; |
cmcmaster | 0:59d25bb7f825 | 164 | motor_lf=0; |
cmcmaster | 0:59d25bb7f825 | 165 | motor_lb=1; // |
cmcmaster | 0:59d25bb7f825 | 166 | |
cmcmaster | 0:59d25bb7f825 | 167 | wait(2); |
cmcmaster | 0:59d25bb7f825 | 168 | myled = !myled; |
cmcmaster | 0:59d25bb7f825 | 169 | |
cmcmaster | 0:59d25bb7f825 | 170 | motor_rf=0; |
cmcmaster | 0:59d25bb7f825 | 171 | motor_rb=1; |
cmcmaster | 0:59d25bb7f825 | 172 | motor_lf=0; |
cmcmaster | 0:59d25bb7f825 | 173 | motor_lb=0; //reverse turn |
cmcmaster | 0:59d25bb7f825 | 174 | |
cmcmaster | 0:59d25bb7f825 | 175 | wait(2); |
cmcmaster | 0:59d25bb7f825 | 176 | |
cmcmaster | 0:59d25bb7f825 | 177 | myled = !myled; |
cmcmaster | 0:59d25bb7f825 | 178 | motor_r.write(0.5); |
cmcmaster | 0:59d25bb7f825 | 179 | motor_l.write(1.0); |
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; //go forwards |
cmcmaster | 0:59d25bb7f825 | 185 | // |
cmcmaster | 0:59d25bb7f825 | 186 | wait(4); |
cmcmaster | 0:59d25bb7f825 | 187 | |
cmcmaster | 0:59d25bb7f825 | 188 | } |
cmcmaster | 0:59d25bb7f825 | 189 | |
cmcmaster | 0:59d25bb7f825 | 190 | } |