
The Program for our autonomous vehicle which we built for our course project
Fork of Moon_Buggy_Locomotion by
main.cpp@0:bd3be923d5fa, 2015-12-10 (annotated)
- Committer:
- JamieGibson
- Date:
- Thu Dec 10 15:13:29 2015 +0000
- Revision:
- 0:bd3be923d5fa
Moon Buggy Locomotion Code
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JamieGibson | 0:bd3be923d5fa | 1 | #include "mbed.h" |
JamieGibson | 0:bd3be923d5fa | 2 | #include "Servo.h" |
JamieGibson | 0:bd3be923d5fa | 3 | |
JamieGibson | 0:bd3be923d5fa | 4 | I2CSlave slave(p9, p10); //Configure I2C slave |
JamieGibson | 0:bd3be923d5fa | 5 | PwmOut steering (p21);// Define PWM Output to wheels servo |
JamieGibson | 0:bd3be923d5fa | 6 | Servo motor (p22); // Define PWM Output to the ESC |
JamieGibson | 0:bd3be923d5fa | 7 | DigitalOut forward(LED1); |
JamieGibson | 0:bd3be923d5fa | 8 | DigitalOut back(LED2); |
JamieGibson | 0:bd3be923d5fa | 9 | DigitalOut stop(LED3); |
JamieGibson | 0:bd3be923d5fa | 10 | DigitalOut led1(p13); // Indicator Light for center turn |
JamieGibson | 0:bd3be923d5fa | 11 | DigitalOut led2(p15); // Indicator Light for left turn |
JamieGibson | 0:bd3be923d5fa | 12 | DigitalOut led3(p17);// Indicator Light for right turn |
JamieGibson | 0:bd3be923d5fa | 13 | char switch_word ; //word we will send |
JamieGibson | 0:bd3be923d5fa | 14 | char recd_val; //value received from master |
JamieGibson | 0:bd3be923d5fa | 15 | |
JamieGibson | 0:bd3be923d5fa | 16 | int main() //start of main programme |
JamieGibson | 0:bd3be923d5fa | 17 | { |
JamieGibson | 0:bd3be923d5fa | 18 | slave.address(0x52); // The slave is addressed |
JamieGibson | 0:bd3be923d5fa | 19 | while(1) |
JamieGibson | 0:bd3be923d5fa | 20 | { |
JamieGibson | 0:bd3be923d5fa | 21 | led1=0; |
JamieGibson | 0:bd3be923d5fa | 22 | led2=0; |
JamieGibson | 0:bd3be923d5fa | 23 | led3=0; |
JamieGibson | 0:bd3be923d5fa | 24 | forward=0; |
JamieGibson | 0:bd3be923d5fa | 25 | back=0; |
JamieGibson | 0:bd3be923d5fa | 26 | stop=0; |
JamieGibson | 0:bd3be923d5fa | 27 | switch_word=0xa0; //set up a recognisable output pattern |
JamieGibson | 0:bd3be923d5fa | 28 | slave.write(switch_word); //load up word to send |
JamieGibson | 0:bd3be923d5fa | 29 | /*test for I2C, and act accordingly*/ |
JamieGibson | 0:bd3be923d5fa | 30 | int i = slave.receive(); |
JamieGibson | 0:bd3be923d5fa | 31 | if (i == 3) //slave is addressed, Master will write |
JamieGibson | 0:bd3be923d5fa | 32 | { |
JamieGibson | 0:bd3be923d5fa | 33 | recd_val= slave.read(); |
JamieGibson | 0:bd3be923d5fa | 34 | recd_val=recd_val&0x0F; // AND out unwatnted LSB bits |
JamieGibson | 0:bd3be923d5fa | 35 | /*Locomotion and Sterring Control based on received Value*/ |
JamieGibson | 0:bd3be923d5fa | 36 | if (recd_val==1) |
JamieGibson | 0:bd3be923d5fa | 37 | { |
JamieGibson | 0:bd3be923d5fa | 38 | led1=1; |
JamieGibson | 0:bd3be923d5fa | 39 | forward=1; |
JamieGibson | 0:bd3be923d5fa | 40 | steering.pulsewidth (0.0015); //centre |
JamieGibson | 0:bd3be923d5fa | 41 | wait(0.2); |
JamieGibson | 0:bd3be923d5fa | 42 | motor.write(0.3); //full forward |
JamieGibson | 0:bd3be923d5fa | 43 | wait(1); |
JamieGibson | 0:bd3be923d5fa | 44 | } |
JamieGibson | 0:bd3be923d5fa | 45 | /* |
JamieGibson | 0:bd3be923d5fa | 46 | if (recd_val==2) |
JamieGibson | 0:bd3be923d5fa | 47 | { |
JamieGibson | 0:bd3be923d5fa | 48 | led3=1; |
JamieGibson | 0:bd3be923d5fa | 49 | forward=1; |
JamieGibson | 0:bd3be923d5fa | 50 | steering.pulsewidth (0.0009);//right |
JamieGibson | 0:bd3be923d5fa | 51 | wait(0.2); |
JamieGibson | 0:bd3be923d5fa | 52 | motor.write(0.3); //full forward |
JamieGibson | 0:bd3be923d5fa | 53 | wait(1); |
JamieGibson | 0:bd3be923d5fa | 54 | } |
JamieGibson | 0:bd3be923d5fa | 55 | */ |
JamieGibson | 0:bd3be923d5fa | 56 | if (recd_val==3) |
JamieGibson | 0:bd3be923d5fa | 57 | { |
JamieGibson | 0:bd3be923d5fa | 58 | led3=1; |
JamieGibson | 0:bd3be923d5fa | 59 | forward=1; |
JamieGibson | 0:bd3be923d5fa | 60 | steering.pulsewidth (0.0009);//right |
JamieGibson | 0:bd3be923d5fa | 61 | wait(0.2); |
JamieGibson | 0:bd3be923d5fa | 62 | motor.write(0.3);//forward |
JamieGibson | 0:bd3be923d5fa | 63 | wait(1); |
JamieGibson | 0:bd3be923d5fa | 64 | } |
JamieGibson | 0:bd3be923d5fa | 65 | /* |
JamieGibson | 0:bd3be923d5fa | 66 | if(recd_val==4) |
JamieGibson | 0:bd3be923d5fa | 67 | { |
JamieGibson | 0:bd3be923d5fa | 68 | led3=1; |
JamieGibson | 0:bd3be923d5fa | 69 | back=1; |
JamieGibson | 0:bd3be923d5fa | 70 | steering.pulsewidth (0.0009);//right |
JamieGibson | 0:bd3be923d5fa | 71 | wait(0.2); |
JamieGibson | 0:bd3be923d5fa | 72 | motor.write(0.6); //full backwards |
JamieGibson | 0:bd3be923d5fa | 73 | wait(1); |
JamieGibson | 0:bd3be923d5fa | 74 | }*/ |
JamieGibson | 0:bd3be923d5fa | 75 | if (recd_val==5) |
JamieGibson | 0:bd3be923d5fa | 76 | { |
JamieGibson | 0:bd3be923d5fa | 77 | led1=1; |
JamieGibson | 0:bd3be923d5fa | 78 | back=1; |
JamieGibson | 0:bd3be923d5fa | 79 | steering.pulsewidth (0.0015);//center |
JamieGibson | 0:bd3be923d5fa | 80 | motor.write(0.6); //full backwards |
JamieGibson | 0:bd3be923d5fa | 81 | wait(1); |
JamieGibson | 0:bd3be923d5fa | 82 | } |
JamieGibson | 0:bd3be923d5fa | 83 | /* |
JamieGibson | 0:bd3be923d5fa | 84 | if(recd_val==6) |
JamieGibson | 0:bd3be923d5fa | 85 | { |
JamieGibson | 0:bd3be923d5fa | 86 | led2=1; |
JamieGibson | 0:bd3be923d5fa | 87 | back=1; |
JamieGibson | 0:bd3be923d5fa | 88 | steering.pulsewidth (0.0021);//LEFT |
JamieGibson | 0:bd3be923d5fa | 89 | wait(0.2); |
JamieGibson | 0:bd3be923d5fa | 90 | motor.write(0.6); //full backwards |
JamieGibson | 0:bd3be923d5fa | 91 | wait(1); |
JamieGibson | 0:bd3be923d5fa | 92 | } |
JamieGibson | 0:bd3be923d5fa | 93 | */ |
JamieGibson | 0:bd3be923d5fa | 94 | if (recd_val==7) |
JamieGibson | 0:bd3be923d5fa | 95 | { |
JamieGibson | 0:bd3be923d5fa | 96 | led2=1; |
JamieGibson | 0:bd3be923d5fa | 97 | forward=1; |
JamieGibson | 0:bd3be923d5fa | 98 | steering.pulsewidth (0.0021);//LEFT |
JamieGibson | 0:bd3be923d5fa | 99 | wait(0.2); |
JamieGibson | 0:bd3be923d5fa | 100 | motor.write(0.3); //full forward |
JamieGibson | 0:bd3be923d5fa | 101 | wait(1); |
JamieGibson | 0:bd3be923d5fa | 102 | led1=0; |
JamieGibson | 0:bd3be923d5fa | 103 | led2=0; |
JamieGibson | 0:bd3be923d5fa | 104 | led3=0; |
JamieGibson | 0:bd3be923d5fa | 105 | } |
JamieGibson | 0:bd3be923d5fa | 106 | /* |
JamieGibson | 0:bd3be923d5fa | 107 | if (recd_val==8) |
JamieGibson | 0:bd3be923d5fa | 108 | { |
JamieGibson | 0:bd3be923d5fa | 109 | led2=1; |
JamieGibson | 0:bd3be923d5fa | 110 | forward=1; |
JamieGibson | 0:bd3be923d5fa | 111 | steering.pulsewidth (0.0021);//LEFT |
JamieGibson | 0:bd3be923d5fa | 112 | wait(0.2); |
JamieGibson | 0:bd3be923d5fa | 113 | motor.write(0.3); //full FORWARD |
JamieGibson | 0:bd3be923d5fa | 114 | wait(1); |
JamieGibson | 0:bd3be923d5fa | 115 | } |
JamieGibson | 0:bd3be923d5fa | 116 | */ |
JamieGibson | 0:bd3be923d5fa | 117 | if (recd_val==9) |
JamieGibson | 0:bd3be923d5fa | 118 | { |
JamieGibson | 0:bd3be923d5fa | 119 | stop=1; |
JamieGibson | 0:bd3be923d5fa | 120 | steering.pulsewidth(0.0015);//stop |
JamieGibson | 0:bd3be923d5fa | 121 | wait(0.2); |
JamieGibson | 0:bd3be923d5fa | 122 | motor.write(0.5);//stop |
JamieGibson | 0:bd3be923d5fa | 123 | wait(1); |
JamieGibson | 0:bd3be923d5fa | 124 | } |
JamieGibson | 0:bd3be923d5fa | 125 | if (recd_val==0) |
JamieGibson | 0:bd3be923d5fa | 126 | { |
JamieGibson | 0:bd3be923d5fa | 127 | stop=1; |
JamieGibson | 0:bd3be923d5fa | 128 | steering.pulsewidth(0.0015);//stop |
JamieGibson | 0:bd3be923d5fa | 129 | wait(0.2); |
JamieGibson | 0:bd3be923d5fa | 130 | motor.write(0.5);//stop |
JamieGibson | 0:bd3be923d5fa | 131 | wait(1); |
JamieGibson | 0:bd3be923d5fa | 132 | } |
JamieGibson | 0:bd3be923d5fa | 133 | } |
JamieGibson | 0:bd3be923d5fa | 134 | } |
JamieGibson | 0:bd3be923d5fa | 135 | } |