The Program for our autonomous vehicle which we built for our course project

Dependencies:   TextLCD mbed

Fork of Moon_Buggy_Data_Centre by Jamie Gibson

Committer:
JamieGibson
Date:
Thu Dec 10 14:49:12 2015 +0000
Revision:
0:ef824c4d6d14
Moon Buggy Data Centre Code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JamieGibson 0:ef824c4d6d14 1 #include "mbed.h" //MASTER
JamieGibson 0:ef824c4d6d14 2 #include "TextLCD.h"
JamieGibson 0:ef824c4d6d14 3
JamieGibson 0:ef824c4d6d14 4 TextLCD lcd(p19, p20, p21, p22, p23, p24, TextLCD::LCD20x4); // rs, e, d4-d7
JamieGibson 0:ef824c4d6d14 5 I2C i2c_port(p28, p27); // Configure a serial port, pins 9 and 10 are sda,scl
JamieGibson 0:ef824c4d6d14 6 Serial async_port(p9, p10); //set up TX and RX on pins 13 and 14
JamieGibson 0:ef824c4d6d14 7 SPISlave ser_port(p5, p6, p7, p8); // mosi, miso, sclk
JamieGibson 0:ef824c4d6d14 8 DigitalOut Front(LED1);
JamieGibson 0:ef824c4d6d14 9 DigitalOut Right(LED2);
JamieGibson 0:ef824c4d6d14 10 DigitalOut Back(LED3);
JamieGibson 0:ef824c4d6d14 11 DigitalOut Left(LED4);
JamieGibson 0:ef824c4d6d14 12
JamieGibson 0:ef824c4d6d14 13 char switch_word; //word we will send
JamieGibson 0:ef824c4d6d14 14 char recd_val; //value from async
JamieGibson 0:ef824c4d6d14 15 char recd_val1; //value from from Obstacle sensing
JamieGibson 0:ef824c4d6d14 16 const int addr = 0x52; // define the I2C slave address, an arbitrary even number
JamieGibson 0:ef824c4d6d14 17 int Ob_R;
JamieGibson 0:ef824c4d6d14 18 int Ob_L;
JamieGibson 0:ef824c4d6d14 19 int Ob_F;
JamieGibson 0:ef824c4d6d14 20 int Ob_All;
JamieGibson 0:ef824c4d6d14 21 int Ob_None;
JamieGibson 0:ef824c4d6d14 22 int Ob_FR;
JamieGibson 0:ef824c4d6d14 23 int Ob_FL;
JamieGibson 0:ef824c4d6d14 24 int Light_Full;
JamieGibson 0:ef824c4d6d14 25 int Light_None;
JamieGibson 0:ef824c4d6d14 26 int Light_F;
JamieGibson 0:ef824c4d6d14 27 int Light_FR;
JamieGibson 0:ef824c4d6d14 28 int Light_R;
JamieGibson 0:ef824c4d6d14 29 int Light_BR;
JamieGibson 0:ef824c4d6d14 30 int Light_B;
JamieGibson 0:ef824c4d6d14 31 int Light_BL;
JamieGibson 0:ef824c4d6d14 32 int Light_L;
JamieGibson 0:ef824c4d6d14 33 int Light_FL;
JamieGibson 0:ef824c4d6d14 34
JamieGibson 0:ef824c4d6d14 35 int main()
JamieGibson 0:ef824c4d6d14 36 {
JamieGibson 0:ef824c4d6d14 37 lcd.cls();
JamieGibson 0:ef824c4d6d14 38 lcd.locate(2,0);
JamieGibson 0:ef824c4d6d14 39 lcd.printf("Moon Buggy!");
JamieGibson 0:ef824c4d6d14 40
JamieGibson 0:ef824c4d6d14 41 async_port.baud(9600); //set baud rate to 9600 (ie default)
JamieGibson 0:ef824c4d6d14 42
JamieGibson 0:ef824c4d6d14 43 ser_port.format(8,0);
JamieGibson 0:ef824c4d6d14 44 ser_port.frequency(4000000);
JamieGibson 0:ef824c4d6d14 45
JamieGibson 0:ef824c4d6d14 46 while(1)
JamieGibson 0:ef824c4d6d14 47 {
JamieGibson 0:ef824c4d6d14 48 Front=0; //preset both to 0
JamieGibson 0:ef824c4d6d14 49 Right=0;
JamieGibson 0:ef824c4d6d14 50 Back=0;
JamieGibson 0:ef824c4d6d14 51 Left=0;
JamieGibson 0:ef824c4d6d14 52 Ob_FR=0;
JamieGibson 0:ef824c4d6d14 53 Ob_FL=0;
JamieGibson 0:ef824c4d6d14 54 Ob_F=0;
JamieGibson 0:ef824c4d6d14 55 Ob_R=0;
JamieGibson 0:ef824c4d6d14 56 Ob_L=0;
JamieGibson 0:ef824c4d6d14 57 Ob_All=0;
JamieGibson 0:ef824c4d6d14 58 Ob_None=0;
JamieGibson 0:ef824c4d6d14 59 Light_Full=0;
JamieGibson 0:ef824c4d6d14 60 Light_None=0;
JamieGibson 0:ef824c4d6d14 61 Light_F=0;
JamieGibson 0:ef824c4d6d14 62 Light_FR=0;
JamieGibson 0:ef824c4d6d14 63 Light_R=0;
JamieGibson 0:ef824c4d6d14 64 Light_BR=0;
JamieGibson 0:ef824c4d6d14 65 Light_B=0;
JamieGibson 0:ef824c4d6d14 66 Light_BL=0;
JamieGibson 0:ef824c4d6d14 67 Light_L=0;
JamieGibson 0:ef824c4d6d14 68 Light_FL=0;
JamieGibson 0:ef824c4d6d14 69
JamieGibson 0:ef824c4d6d14 70 //Block 1 Receive Obstacle Data and Set Flags
JamieGibson 0:ef824c4d6d14 71
JamieGibson 0:ef824c4d6d14 72 if(ser_port.receive()) //test if data transfer has occurred
JamieGibson 0:ef824c4d6d14 73 recd_val1 = ser_port.read(); // Read byte from master
JamieGibson 0:ef824c4d6d14 74 recd_val1=recd_val1&0x0F;
JamieGibson 0:ef824c4d6d14 75
JamieGibson 0:ef824c4d6d14 76 if (recd_val1==1)
JamieGibson 0:ef824c4d6d14 77 {
JamieGibson 0:ef824c4d6d14 78 Ob_F=1;
JamieGibson 0:ef824c4d6d14 79 lcd.locate(-4,3);
JamieGibson 0:ef824c4d6d14 80 lcd.printf("Obstacle Ahead");
JamieGibson 0:ef824c4d6d14 81 }
JamieGibson 0:ef824c4d6d14 82 if (recd_val1==2)
JamieGibson 0:ef824c4d6d14 83 {
JamieGibson 0:ef824c4d6d14 84 Ob_R=1;
JamieGibson 0:ef824c4d6d14 85 lcd.locate(-4,3);
JamieGibson 0:ef824c4d6d14 86 lcd.printf("Obstacle Right");
JamieGibson 0:ef824c4d6d14 87 }
JamieGibson 0:ef824c4d6d14 88 if (recd_val1==3)
JamieGibson 0:ef824c4d6d14 89 {
JamieGibson 0:ef824c4d6d14 90 Ob_L=1;
JamieGibson 0:ef824c4d6d14 91 lcd.locate(-4,3);
JamieGibson 0:ef824c4d6d14 92 lcd.printf("Obstacle Left ");
JamieGibson 0:ef824c4d6d14 93 }
JamieGibson 0:ef824c4d6d14 94 if (recd_val1==4)
JamieGibson 0:ef824c4d6d14 95 {
JamieGibson 0:ef824c4d6d14 96 Ob_All=1;
JamieGibson 0:ef824c4d6d14 97 lcd.locate(-4,3);
JamieGibson 0:ef824c4d6d14 98 lcd.printf("All Obstacles ");
JamieGibson 0:ef824c4d6d14 99 }
JamieGibson 0:ef824c4d6d14 100 if (recd_val1==5)
JamieGibson 0:ef824c4d6d14 101 {
JamieGibson 0:ef824c4d6d14 102 Ob_FR=1;
JamieGibson 0:ef824c4d6d14 103 lcd.locate(-4,3);
JamieGibson 0:ef824c4d6d14 104 lcd.printf("Obstacles FR ");
JamieGibson 0:ef824c4d6d14 105 }
JamieGibson 0:ef824c4d6d14 106 if (recd_val1==6)
JamieGibson 0:ef824c4d6d14 107 {
JamieGibson 0:ef824c4d6d14 108 Ob_FL=1;
JamieGibson 0:ef824c4d6d14 109 lcd.locate(-4,3);
JamieGibson 0:ef824c4d6d14 110 lcd.printf("Obstacles FL ");
JamieGibson 0:ef824c4d6d14 111 }
JamieGibson 0:ef824c4d6d14 112 if (recd_val1==0)
JamieGibson 0:ef824c4d6d14 113 {
JamieGibson 0:ef824c4d6d14 114 Ob_None=1;
JamieGibson 0:ef824c4d6d14 115 lcd.locate(-4,3);
JamieGibson 0:ef824c4d6d14 116 lcd.printf("No Obstacle ");
JamieGibson 0:ef824c4d6d14 117 }
JamieGibson 0:ef824c4d6d14 118
JamieGibson 0:ef824c4d6d14 119 //Block 2 Receive Light Data and Set Flags
JamieGibson 0:ef824c4d6d14 120 if(async_port.readable()==1) //is there a character to be read?
JamieGibson 0:ef824c4d6d14 121 recd_val=async_port.getc(); //if yes, then read it
JamieGibson 0:ef824c4d6d14 122 recd_val=recd_val&0x0f; //AND out unwanted bits
JamieGibson 0:ef824c4d6d14 123
JamieGibson 0:ef824c4d6d14 124 if(recd_val==0)
JamieGibson 0:ef824c4d6d14 125 {
JamieGibson 0:ef824c4d6d14 126 Front=0;
JamieGibson 0:ef824c4d6d14 127 Right=0;
JamieGibson 0:ef824c4d6d14 128 Back=0;
JamieGibson 0:ef824c4d6d14 129 Left=0;
JamieGibson 0:ef824c4d6d14 130 Light_None=1;
JamieGibson 0:ef824c4d6d14 131 //wait(0.5);
JamieGibson 0:ef824c4d6d14 132 lcd.locate(0,1);
JamieGibson 0:ef824c4d6d14 133 lcd.printf("No Light ");
JamieGibson 0:ef824c4d6d14 134 }
JamieGibson 0:ef824c4d6d14 135 if(recd_val==9)
JamieGibson 0:ef824c4d6d14 136 {
JamieGibson 0:ef824c4d6d14 137 Front=1;
JamieGibson 0:ef824c4d6d14 138 Right=1;
JamieGibson 0:ef824c4d6d14 139 Back=1;
JamieGibson 0:ef824c4d6d14 140 Left=1;
JamieGibson 0:ef824c4d6d14 141 Light_Full=1;
JamieGibson 0:ef824c4d6d14 142 //wait(0.5);
JamieGibson 0:ef824c4d6d14 143 lcd.locate(0,1);
JamieGibson 0:ef824c4d6d14 144 lcd.printf("Full Light ");
JamieGibson 0:ef824c4d6d14 145 }
JamieGibson 0:ef824c4d6d14 146 if(recd_val==1)
JamieGibson 0:ef824c4d6d14 147 {
JamieGibson 0:ef824c4d6d14 148 Front=1;
JamieGibson 0:ef824c4d6d14 149 Light_F=1;
JamieGibson 0:ef824c4d6d14 150 //wait(0.5);
JamieGibson 0:ef824c4d6d14 151 lcd.locate(0,1);
JamieGibson 0:ef824c4d6d14 152 lcd.printf("Light Detected");
JamieGibson 0:ef824c4d6d14 153 lcd.locate(0,2);
JamieGibson 0:ef824c4d6d14 154 lcd.printf(" Front ");
JamieGibson 0:ef824c4d6d14 155 }
JamieGibson 0:ef824c4d6d14 156 if(recd_val==2)
JamieGibson 0:ef824c4d6d14 157 {
JamieGibson 0:ef824c4d6d14 158 Front=1;
JamieGibson 0:ef824c4d6d14 159 Right=1;
JamieGibson 0:ef824c4d6d14 160 Light_FR=1;
JamieGibson 0:ef824c4d6d14 161 //wait(0.5);
JamieGibson 0:ef824c4d6d14 162 lcd.locate(0,1);
JamieGibson 0:ef824c4d6d14 163 lcd.printf("Light Detected");
JamieGibson 0:ef824c4d6d14 164 lcd.locate(0,2);
JamieGibson 0:ef824c4d6d14 165 lcd.printf("Front-Right");
JamieGibson 0:ef824c4d6d14 166 }
JamieGibson 0:ef824c4d6d14 167 if(recd_val==3)
JamieGibson 0:ef824c4d6d14 168 {
JamieGibson 0:ef824c4d6d14 169 Right=1;
JamieGibson 0:ef824c4d6d14 170 Light_R=1;
JamieGibson 0:ef824c4d6d14 171 //wait(0.5);
JamieGibson 0:ef824c4d6d14 172 lcd.locate(0,1);
JamieGibson 0:ef824c4d6d14 173 lcd.printf("Light Detected");
JamieGibson 0:ef824c4d6d14 174 lcd.locate(0,2);
JamieGibson 0:ef824c4d6d14 175 lcd.printf(" Right ");
JamieGibson 0:ef824c4d6d14 176 }
JamieGibson 0:ef824c4d6d14 177 if(recd_val==4)
JamieGibson 0:ef824c4d6d14 178 {
JamieGibson 0:ef824c4d6d14 179 Back=1;
JamieGibson 0:ef824c4d6d14 180 Right=1;
JamieGibson 0:ef824c4d6d14 181 Light_BR=1;
JamieGibson 0:ef824c4d6d14 182 //wait(0.5);
JamieGibson 0:ef824c4d6d14 183 lcd.locate(0,1);
JamieGibson 0:ef824c4d6d14 184 lcd.printf("Light Detected");
JamieGibson 0:ef824c4d6d14 185 lcd.locate(0,2);
JamieGibson 0:ef824c4d6d14 186 lcd.printf("Back-Right");
JamieGibson 0:ef824c4d6d14 187 }
JamieGibson 0:ef824c4d6d14 188 if(recd_val==5)
JamieGibson 0:ef824c4d6d14 189 {
JamieGibson 0:ef824c4d6d14 190 Back=1;
JamieGibson 0:ef824c4d6d14 191 Light_B=1;
JamieGibson 0:ef824c4d6d14 192 //wait(0.5);
JamieGibson 0:ef824c4d6d14 193 lcd.locate(0,1);
JamieGibson 0:ef824c4d6d14 194 lcd.printf("Light Detected");
JamieGibson 0:ef824c4d6d14 195 lcd.locate(0,2);
JamieGibson 0:ef824c4d6d14 196 lcd.printf(" Back ");
JamieGibson 0:ef824c4d6d14 197 }
JamieGibson 0:ef824c4d6d14 198 if(recd_val==6)
JamieGibson 0:ef824c4d6d14 199 {
JamieGibson 0:ef824c4d6d14 200 Back=1;
JamieGibson 0:ef824c4d6d14 201 Left=1;
JamieGibson 0:ef824c4d6d14 202 Light_BL=1;
JamieGibson 0:ef824c4d6d14 203 //wait(0.5);
JamieGibson 0:ef824c4d6d14 204 lcd.locate(0,1);
JamieGibson 0:ef824c4d6d14 205 lcd.printf("Light Detected");
JamieGibson 0:ef824c4d6d14 206 lcd.locate(0,2);
JamieGibson 0:ef824c4d6d14 207 lcd.printf("Back-Left");
JamieGibson 0:ef824c4d6d14 208 }
JamieGibson 0:ef824c4d6d14 209 if(recd_val==7)
JamieGibson 0:ef824c4d6d14 210 {
JamieGibson 0:ef824c4d6d14 211 Left=1;
JamieGibson 0:ef824c4d6d14 212 Light_L=1;
JamieGibson 0:ef824c4d6d14 213 //wait(0.5);
JamieGibson 0:ef824c4d6d14 214 lcd.locate(0,1);
JamieGibson 0:ef824c4d6d14 215 lcd.printf("Light Detected");
JamieGibson 0:ef824c4d6d14 216 lcd.locate(0,2);
JamieGibson 0:ef824c4d6d14 217 lcd.printf(" Left ");
JamieGibson 0:ef824c4d6d14 218 }
JamieGibson 0:ef824c4d6d14 219 if(recd_val==8)
JamieGibson 0:ef824c4d6d14 220 {
JamieGibson 0:ef824c4d6d14 221 Front=1;
JamieGibson 0:ef824c4d6d14 222 Left=1;
JamieGibson 0:ef824c4d6d14 223 Light_FL=1;
JamieGibson 0:ef824c4d6d14 224 //wait(0.5);
JamieGibson 0:ef824c4d6d14 225 lcd.locate(0,1);
JamieGibson 0:ef824c4d6d14 226 lcd.printf("Light Detected");
JamieGibson 0:ef824c4d6d14 227 lcd.locate(0,2);
JamieGibson 0:ef824c4d6d14 228 lcd.printf("Front-Left");
JamieGibson 0:ef824c4d6d14 229 }
JamieGibson 0:ef824c4d6d14 230
JamieGibson 0:ef824c4d6d14 231 //Block 3 Compare Flags and Set Command
JamieGibson 0:ef824c4d6d14 232 switch_word=0xf0;
JamieGibson 0:ef824c4d6d14 233 if(Light_F==1)
JamieGibson 0:ef824c4d6d14 234 {
JamieGibson 0:ef824c4d6d14 235 if(Ob_FR==1 || Ob_F==1)
JamieGibson 0:ef824c4d6d14 236 {
JamieGibson 0:ef824c4d6d14 237 //Go Left
JamieGibson 0:ef824c4d6d14 238 switch_word=switch_word|0x07;
JamieGibson 0:ef824c4d6d14 239 }
JamieGibson 0:ef824c4d6d14 240 if(Ob_FL==1)
JamieGibson 0:ef824c4d6d14 241 {
JamieGibson 0:ef824c4d6d14 242 //Go Right
JamieGibson 0:ef824c4d6d14 243 switch_word=switch_word|0x03;
JamieGibson 0:ef824c4d6d14 244 }
JamieGibson 0:ef824c4d6d14 245 if(Ob_All==1)
JamieGibson 0:ef824c4d6d14 246 {
JamieGibson 0:ef824c4d6d14 247 //Go Back
JamieGibson 0:ef824c4d6d14 248 switch_word=switch_word|0x05;
JamieGibson 0:ef824c4d6d14 249 }
JamieGibson 0:ef824c4d6d14 250 if(Ob_None==1 || Ob_R==1 || Ob_L==1)
JamieGibson 0:ef824c4d6d14 251 {
JamieGibson 0:ef824c4d6d14 252 //Go Front
JamieGibson 0:ef824c4d6d14 253 switch_word=switch_word|0x01;
JamieGibson 0:ef824c4d6d14 254 }
JamieGibson 0:ef824c4d6d14 255 }
JamieGibson 0:ef824c4d6d14 256 if(Light_R==1)
JamieGibson 0:ef824c4d6d14 257 {
JamieGibson 0:ef824c4d6d14 258 if(Ob_R==1)
JamieGibson 0:ef824c4d6d14 259 {
JamieGibson 0:ef824c4d6d14 260 //Go Front
JamieGibson 0:ef824c4d6d14 261 switch_word=switch_word|0x01;
JamieGibson 0:ef824c4d6d14 262 }
JamieGibson 0:ef824c4d6d14 263 if(Ob_FR==1)
JamieGibson 0:ef824c4d6d14 264 {
JamieGibson 0:ef824c4d6d14 265 //Go Left
JamieGibson 0:ef824c4d6d14 266 switch_word=switch_word|0x07;
JamieGibson 0:ef824c4d6d14 267 }
JamieGibson 0:ef824c4d6d14 268 if(Ob_All==1)
JamieGibson 0:ef824c4d6d14 269 {
JamieGibson 0:ef824c4d6d14 270 //Go Back
JamieGibson 0:ef824c4d6d14 271 switch_word=switch_word|0x05;
JamieGibson 0:ef824c4d6d14 272 }
JamieGibson 0:ef824c4d6d14 273 if(Ob_None==1 || Ob_L==1 || Ob_F==1 ||Ob_FL==1)
JamieGibson 0:ef824c4d6d14 274 {
JamieGibson 0:ef824c4d6d14 275 //Go Right
JamieGibson 0:ef824c4d6d14 276 switch_word=switch_word|0x03;
JamieGibson 0:ef824c4d6d14 277 }
JamieGibson 0:ef824c4d6d14 278 }
JamieGibson 0:ef824c4d6d14 279 if(Light_L==1)
JamieGibson 0:ef824c4d6d14 280 {
JamieGibson 0:ef824c4d6d14 281 if(Ob_L==1)
JamieGibson 0:ef824c4d6d14 282 {
JamieGibson 0:ef824c4d6d14 283 //Go Front
JamieGibson 0:ef824c4d6d14 284 switch_word=switch_word|0x01;
JamieGibson 0:ef824c4d6d14 285 }
JamieGibson 0:ef824c4d6d14 286 if(Ob_FL==1)
JamieGibson 0:ef824c4d6d14 287 {
JamieGibson 0:ef824c4d6d14 288 //Go Right
JamieGibson 0:ef824c4d6d14 289 switch_word=switch_word|0x03;
JamieGibson 0:ef824c4d6d14 290 }
JamieGibson 0:ef824c4d6d14 291 if(Ob_All==1)
JamieGibson 0:ef824c4d6d14 292 {
JamieGibson 0:ef824c4d6d14 293 //Go Back
JamieGibson 0:ef824c4d6d14 294 switch_word=switch_word|0x05;
JamieGibson 0:ef824c4d6d14 295 }
JamieGibson 0:ef824c4d6d14 296 if(Ob_None==1 || Ob_R==1 || Ob_F==1 ||Ob_FR==1)
JamieGibson 0:ef824c4d6d14 297 {
JamieGibson 0:ef824c4d6d14 298 //Go Left
JamieGibson 0:ef824c4d6d14 299 switch_word=switch_word|0x07;
JamieGibson 0:ef824c4d6d14 300 }
JamieGibson 0:ef824c4d6d14 301 }
JamieGibson 0:ef824c4d6d14 302 if(Light_B==1)
JamieGibson 0:ef824c4d6d14 303 {
JamieGibson 0:ef824c4d6d14 304 //Go Back
JamieGibson 0:ef824c4d6d14 305 switch_word=switch_word|0x05;
JamieGibson 0:ef824c4d6d14 306 }
JamieGibson 0:ef824c4d6d14 307 if(Light_Full==1)
JamieGibson 0:ef824c4d6d14 308 {
JamieGibson 0:ef824c4d6d14 309 //Stop
JamieGibson 0:ef824c4d6d14 310 switch_word=switch_word|0x09;
JamieGibson 0:ef824c4d6d14 311 }
JamieGibson 0:ef824c4d6d14 312 if(Light_None==1)
JamieGibson 0:ef824c4d6d14 313 {
JamieGibson 0:ef824c4d6d14 314 //Stop
JamieGibson 0:ef824c4d6d14 315 switch_word=switch_word|0x00;
JamieGibson 0:ef824c4d6d14 316 }
JamieGibson 0:ef824c4d6d14 317
JamieGibson 0:ef824c4d6d14 318 //Block 4 Send Command to Locomotion
JamieGibson 0:ef824c4d6d14 319 i2c_port.start(); //force a start condition
JamieGibson 0:ef824c4d6d14 320 i2c_port.write(addr); //send the address
JamieGibson 0:ef824c4d6d14 321 i2c_port.write(switch_word); //send one byte of data, ie recd_val
JamieGibson 0:ef824c4d6d14 322 i2c_port.stop(); //force a stop condition
JamieGibson 0:ef824c4d6d14 323 wait(0.00000002);
JamieGibson 0:ef824c4d6d14 324 }
JamieGibson 0:ef824c4d6d14 325 }