Pramod Nataraja
/
Mbed_Robot
Code for Mbed Receiver for the Follow My Eye Project
main.cpp@0:b76f98d1556b, 2011-12-14 (annotated)
- Committer:
- pramodnataraja
- Date:
- Wed Dec 14 04:39:29 2011 +0000
- Revision:
- 0:b76f98d1556b
Version 1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pramodnataraja | 0:b76f98d1556b | 1 | #include "mbed.h" |
pramodnataraja | 0:b76f98d1556b | 2 | |
pramodnataraja | 0:b76f98d1556b | 3 | #define FORWARD 0 |
pramodnataraja | 0:b76f98d1556b | 4 | #define REVERSE 1 |
pramodnataraja | 0:b76f98d1556b | 5 | |
pramodnataraja | 0:b76f98d1556b | 6 | #define ON_OFF '0' |
pramodnataraja | 0:b76f98d1556b | 7 | #define FRONT '1' |
pramodnataraja | 0:b76f98d1556b | 8 | #define BACK '2' |
pramodnataraja | 0:b76f98d1556b | 9 | #define LEFT '3' |
pramodnataraja | 0:b76f98d1556b | 10 | #define RIGHT '4' |
pramodnataraja | 0:b76f98d1556b | 11 | #define HALF_FRONT_RIGHT '5' |
pramodnataraja | 0:b76f98d1556b | 12 | #define HALF_FRONT_LEFT '6' |
pramodnataraja | 0:b76f98d1556b | 13 | #define HALF_BACK_RIGHT '7' |
pramodnataraja | 0:b76f98d1556b | 14 | #define HALF_BACK_LEFT '8' |
pramodnataraja | 0:b76f98d1556b | 15 | |
pramodnataraja | 0:b76f98d1556b | 16 | /********************H-Bridge pins*****************/ |
pramodnataraja | 0:b76f98d1556b | 17 | DigitalOut Ain1(p6); |
pramodnataraja | 0:b76f98d1556b | 18 | DigitalOut Ain2(p5); |
pramodnataraja | 0:b76f98d1556b | 19 | DigitalOut Bin1(p7); |
pramodnataraja | 0:b76f98d1556b | 20 | DigitalOut Bin2(p8); |
pramodnataraja | 0:b76f98d1556b | 21 | PwmOut motorA(p22); |
pramodnataraja | 0:b76f98d1556b | 22 | PwmOut motorB(p23); |
pramodnataraja | 0:b76f98d1556b | 23 | |
pramodnataraja | 0:b76f98d1556b | 24 | /********************X-Bee Configuration*****************/ |
pramodnataraja | 0:b76f98d1556b | 25 | Serial xbee(p9,p10); |
pramodnataraja | 0:b76f98d1556b | 26 | DigitalOut rst(p11); |
pramodnataraja | 0:b76f98d1556b | 27 | |
pramodnataraja | 0:b76f98d1556b | 28 | DigitalOut led1(LED1); |
pramodnataraja | 0:b76f98d1556b | 29 | DigitalOut led2(LED2); |
pramodnataraja | 0:b76f98d1556b | 30 | |
pramodnataraja | 0:b76f98d1556b | 31 | /*******************Motor directions***************/ |
pramodnataraja | 0:b76f98d1556b | 32 | void forward(); |
pramodnataraja | 0:b76f98d1556b | 33 | void reverse(); |
pramodnataraja | 0:b76f98d1556b | 34 | void left(float); |
pramodnataraja | 0:b76f98d1556b | 35 | void right(float); |
pramodnataraja | 0:b76f98d1556b | 36 | void stop(); |
pramodnataraja | 0:b76f98d1556b | 37 | |
pramodnataraja | 0:b76f98d1556b | 38 | |
pramodnataraja | 0:b76f98d1556b | 39 | void Move(char DirectionToMove, int& prevState); |
pramodnataraja | 0:b76f98d1556b | 40 | |
pramodnataraja | 0:b76f98d1556b | 41 | float time_rotate = 0.5; |
pramodnataraja | 0:b76f98d1556b | 42 | |
pramodnataraja | 0:b76f98d1556b | 43 | int main() |
pramodnataraja | 0:b76f98d1556b | 44 | { |
pramodnataraja | 0:b76f98d1556b | 45 | rst = 0; |
pramodnataraja | 0:b76f98d1556b | 46 | wait(0.5); |
pramodnataraja | 0:b76f98d1556b | 47 | rst = 1; |
pramodnataraja | 0:b76f98d1556b | 48 | wait(0.5); |
pramodnataraja | 0:b76f98d1556b | 49 | |
pramodnataraja | 0:b76f98d1556b | 50 | int prevState = 1; // 1 for forward and 0 for back |
pramodnataraja | 0:b76f98d1556b | 51 | int onOff = 1; // 1 for ON 0 for OFF |
pramodnataraja | 0:b76f98d1556b | 52 | char DirectionToMove = '1'; |
pramodnataraja | 0:b76f98d1556b | 53 | |
pramodnataraja | 0:b76f98d1556b | 54 | /* init of prevhbridgestatus comes here*/ |
pramodnataraja | 0:b76f98d1556b | 55 | |
pramodnataraja | 0:b76f98d1556b | 56 | while(1) |
pramodnataraja | 0:b76f98d1556b | 57 | { |
pramodnataraja | 0:b76f98d1556b | 58 | while(!(xbee.readable())) |
pramodnataraja | 0:b76f98d1556b | 59 | { |
pramodnataraja | 0:b76f98d1556b | 60 | led1 = 1; |
pramodnataraja | 0:b76f98d1556b | 61 | } |
pramodnataraja | 0:b76f98d1556b | 62 | led1 = 0; |
pramodnataraja | 0:b76f98d1556b | 63 | |
pramodnataraja | 0:b76f98d1556b | 64 | led2 = prevState; |
pramodnataraja | 0:b76f98d1556b | 65 | |
pramodnataraja | 0:b76f98d1556b | 66 | DirectionToMove = xbee.getc(); |
pramodnataraja | 0:b76f98d1556b | 67 | |
pramodnataraja | 0:b76f98d1556b | 68 | if(DirectionToMove == '0') |
pramodnataraja | 0:b76f98d1556b | 69 | { |
pramodnataraja | 0:b76f98d1556b | 70 | if(onOff == 1) |
pramodnataraja | 0:b76f98d1556b | 71 | { |
pramodnataraja | 0:b76f98d1556b | 72 | onOff = 0; |
pramodnataraja | 0:b76f98d1556b | 73 | stop(); |
pramodnataraja | 0:b76f98d1556b | 74 | } |
pramodnataraja | 0:b76f98d1556b | 75 | else |
pramodnataraja | 0:b76f98d1556b | 76 | onOff = 1; |
pramodnataraja | 0:b76f98d1556b | 77 | } |
pramodnataraja | 0:b76f98d1556b | 78 | else if(onOff == 1) |
pramodnataraja | 0:b76f98d1556b | 79 | { |
pramodnataraja | 0:b76f98d1556b | 80 | Move(DirectionToMove, prevState); /* This function moves along a direction determined by current direction and the previous direction of motion */ |
pramodnataraja | 0:b76f98d1556b | 81 | } |
pramodnataraja | 0:b76f98d1556b | 82 | } |
pramodnataraja | 0:b76f98d1556b | 83 | |
pramodnataraja | 0:b76f98d1556b | 84 | } |
pramodnataraja | 0:b76f98d1556b | 85 | |
pramodnataraja | 0:b76f98d1556b | 86 | void Move(char DirectionToMove, int& prevState) |
pramodnataraja | 0:b76f98d1556b | 87 | { |
pramodnataraja | 0:b76f98d1556b | 88 | switch(DirectionToMove) |
pramodnataraja | 0:b76f98d1556b | 89 | { |
pramodnataraja | 0:b76f98d1556b | 90 | case FRONT: |
pramodnataraja | 0:b76f98d1556b | 91 | forward(); |
pramodnataraja | 0:b76f98d1556b | 92 | prevState = 1; |
pramodnataraja | 0:b76f98d1556b | 93 | break; |
pramodnataraja | 0:b76f98d1556b | 94 | |
pramodnataraja | 0:b76f98d1556b | 95 | case BACK: |
pramodnataraja | 0:b76f98d1556b | 96 | reverse(); |
pramodnataraja | 0:b76f98d1556b | 97 | prevState = 0; |
pramodnataraja | 0:b76f98d1556b | 98 | break; |
pramodnataraja | 0:b76f98d1556b | 99 | |
pramodnataraja | 0:b76f98d1556b | 100 | case LEFT: |
pramodnataraja | 0:b76f98d1556b | 101 | left(2 * time_rotate); |
pramodnataraja | 0:b76f98d1556b | 102 | if(prevState == 0) |
pramodnataraja | 0:b76f98d1556b | 103 | reverse(); |
pramodnataraja | 0:b76f98d1556b | 104 | else |
pramodnataraja | 0:b76f98d1556b | 105 | forward(); |
pramodnataraja | 0:b76f98d1556b | 106 | break; |
pramodnataraja | 0:b76f98d1556b | 107 | |
pramodnataraja | 0:b76f98d1556b | 108 | case RIGHT: |
pramodnataraja | 0:b76f98d1556b | 109 | right(2 * time_rotate); |
pramodnataraja | 0:b76f98d1556b | 110 | if(prevState == 0) |
pramodnataraja | 0:b76f98d1556b | 111 | reverse(); |
pramodnataraja | 0:b76f98d1556b | 112 | else |
pramodnataraja | 0:b76f98d1556b | 113 | forward(); |
pramodnataraja | 0:b76f98d1556b | 114 | break; |
pramodnataraja | 0:b76f98d1556b | 115 | |
pramodnataraja | 0:b76f98d1556b | 116 | case HALF_FRONT_RIGHT: |
pramodnataraja | 0:b76f98d1556b | 117 | right(time_rotate); |
pramodnataraja | 0:b76f98d1556b | 118 | prevState = 1; |
pramodnataraja | 0:b76f98d1556b | 119 | forward(); |
pramodnataraja | 0:b76f98d1556b | 120 | break; |
pramodnataraja | 0:b76f98d1556b | 121 | |
pramodnataraja | 0:b76f98d1556b | 122 | case HALF_FRONT_LEFT: |
pramodnataraja | 0:b76f98d1556b | 123 | left(time_rotate); |
pramodnataraja | 0:b76f98d1556b | 124 | prevState = 1; |
pramodnataraja | 0:b76f98d1556b | 125 | forward(); |
pramodnataraja | 0:b76f98d1556b | 126 | break; |
pramodnataraja | 0:b76f98d1556b | 127 | |
pramodnataraja | 0:b76f98d1556b | 128 | case HALF_BACK_RIGHT: |
pramodnataraja | 0:b76f98d1556b | 129 | right(time_rotate); |
pramodnataraja | 0:b76f98d1556b | 130 | prevState = 0; |
pramodnataraja | 0:b76f98d1556b | 131 | reverse(); |
pramodnataraja | 0:b76f98d1556b | 132 | break; |
pramodnataraja | 0:b76f98d1556b | 133 | |
pramodnataraja | 0:b76f98d1556b | 134 | case HALF_BACK_LEFT: |
pramodnataraja | 0:b76f98d1556b | 135 | left(time_rotate); |
pramodnataraja | 0:b76f98d1556b | 136 | prevState = 0; |
pramodnataraja | 0:b76f98d1556b | 137 | reverse(); |
pramodnataraja | 0:b76f98d1556b | 138 | break; |
pramodnataraja | 0:b76f98d1556b | 139 | |
pramodnataraja | 0:b76f98d1556b | 140 | default: |
pramodnataraja | 0:b76f98d1556b | 141 | break; |
pramodnataraja | 0:b76f98d1556b | 142 | } |
pramodnataraja | 0:b76f98d1556b | 143 | } |
pramodnataraja | 0:b76f98d1556b | 144 | |
pramodnataraja | 0:b76f98d1556b | 145 | void reverse() |
pramodnataraja | 0:b76f98d1556b | 146 | { |
pramodnataraja | 0:b76f98d1556b | 147 | stop(); |
pramodnataraja | 0:b76f98d1556b | 148 | Ain1 = 1; |
pramodnataraja | 0:b76f98d1556b | 149 | Ain2 = 0; |
pramodnataraja | 0:b76f98d1556b | 150 | Bin1 = 1; |
pramodnataraja | 0:b76f98d1556b | 151 | Bin2 = 0; |
pramodnataraja | 0:b76f98d1556b | 152 | motorA = 0.5; |
pramodnataraja | 0:b76f98d1556b | 153 | motorB=0.5; |
pramodnataraja | 0:b76f98d1556b | 154 | |
pramodnataraja | 0:b76f98d1556b | 155 | } |
pramodnataraja | 0:b76f98d1556b | 156 | |
pramodnataraja | 0:b76f98d1556b | 157 | void forward() |
pramodnataraja | 0:b76f98d1556b | 158 | { |
pramodnataraja | 0:b76f98d1556b | 159 | stop(); |
pramodnataraja | 0:b76f98d1556b | 160 | Ain1 = 0; |
pramodnataraja | 0:b76f98d1556b | 161 | Ain2 = 1; |
pramodnataraja | 0:b76f98d1556b | 162 | Bin1 = 0; |
pramodnataraja | 0:b76f98d1556b | 163 | Bin2 = 1; |
pramodnataraja | 0:b76f98d1556b | 164 | motorA = 0.5; |
pramodnataraja | 0:b76f98d1556b | 165 | motorB=0.5; |
pramodnataraja | 0:b76f98d1556b | 166 | |
pramodnataraja | 0:b76f98d1556b | 167 | } |
pramodnataraja | 0:b76f98d1556b | 168 | void left(float time1) |
pramodnataraja | 0:b76f98d1556b | 169 | { |
pramodnataraja | 0:b76f98d1556b | 170 | stop(); |
pramodnataraja | 0:b76f98d1556b | 171 | Ain1 = 1; |
pramodnataraja | 0:b76f98d1556b | 172 | Ain2 = 0; |
pramodnataraja | 0:b76f98d1556b | 173 | Bin1 = 0; |
pramodnataraja | 0:b76f98d1556b | 174 | Bin2 = 1; |
pramodnataraja | 0:b76f98d1556b | 175 | motorA = 0.5; |
pramodnataraja | 0:b76f98d1556b | 176 | motorB=0.5; |
pramodnataraja | 0:b76f98d1556b | 177 | wait(time1); |
pramodnataraja | 0:b76f98d1556b | 178 | } |
pramodnataraja | 0:b76f98d1556b | 179 | void right(float time1) |
pramodnataraja | 0:b76f98d1556b | 180 | { |
pramodnataraja | 0:b76f98d1556b | 181 | stop(); |
pramodnataraja | 0:b76f98d1556b | 182 | Ain1 = 0; |
pramodnataraja | 0:b76f98d1556b | 183 | Ain2 = 1; |
pramodnataraja | 0:b76f98d1556b | 184 | Bin1 = 1; |
pramodnataraja | 0:b76f98d1556b | 185 | Bin2 = 0; |
pramodnataraja | 0:b76f98d1556b | 186 | motorA = 0.5; |
pramodnataraja | 0:b76f98d1556b | 187 | motorB=0.5; |
pramodnataraja | 0:b76f98d1556b | 188 | wait(time1); |
pramodnataraja | 0:b76f98d1556b | 189 | } |
pramodnataraja | 0:b76f98d1556b | 190 | |
pramodnataraja | 0:b76f98d1556b | 191 | void stop() |
pramodnataraja | 0:b76f98d1556b | 192 | { |
pramodnataraja | 0:b76f98d1556b | 193 | Ain1 = 0; |
pramodnataraja | 0:b76f98d1556b | 194 | Ain2 = 0; |
pramodnataraja | 0:b76f98d1556b | 195 | Bin1 = 0; |
pramodnataraja | 0:b76f98d1556b | 196 | Bin2 = 0; |
pramodnataraja | 0:b76f98d1556b | 197 | motorA = 1; |
pramodnataraja | 0:b76f98d1556b | 198 | motorB=1; |
pramodnataraja | 0:b76f98d1556b | 199 | |
pramodnataraja | 0:b76f98d1556b | 200 | } |