Moon Buggy Obstacle Code

Dependencies:   mbed

Committer:
JamieGibson
Date:
Thu Dec 10 15:16:02 2015 +0000
Revision:
0:d9625740c0f9
Moon Buggy Obstacle Code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JamieGibson 0:d9625740c0f9 1 #include "mbed.h"
JamieGibson 0:d9625740c0f9 2 SPI ser_port(p11, p12, p13); // mosi, miso, sclk, ssel
JamieGibson 0:d9625740c0f9 3 DigitalOut cs(p14); //this acts as “slave select”
JamieGibson 0:d9625740c0f9 4 Serial pc(USBTX, USBRX);
JamieGibson 0:d9625740c0f9 5 DigitalIn echo(p20);
JamieGibson 0:d9625740c0f9 6 DigitalOut trigger(p19);
JamieGibson 0:d9625740c0f9 7 DigitalIn echo1(p18);
JamieGibson 0:d9625740c0f9 8 DigitalOut trigger1(p17);
JamieGibson 0:d9625740c0f9 9 DigitalIn echo2(p16);
JamieGibson 0:d9625740c0f9 10 DigitalOut trigger2(p15);
JamieGibson 0:d9625740c0f9 11 DigitalOut greenled(p21);
JamieGibson 0:d9625740c0f9 12 DigitalOut redled(p22);
JamieGibson 0:d9625740c0f9 13 DigitalOut yellowled(p23);
JamieGibson 0:d9625740c0f9 14 char switch_word ; //word we will send
JamieGibson 0:d9625740c0f9 15
JamieGibson 0:d9625740c0f9 16 Timer t;
JamieGibson 0:d9625740c0f9 17 float i,j,k;
JamieGibson 0:d9625740c0f9 18
JamieGibson 0:d9625740c0f9 19 int main()
JamieGibson 0:d9625740c0f9 20 {
JamieGibson 0:d9625740c0f9 21 ser_port.format(8,0);
JamieGibson 0:d9625740c0f9 22 ser_port.frequency(4000000);
JamieGibson 0:d9625740c0f9 23 t.start(); //start timer
JamieGibson 0:d9625740c0f9 24 while(1)
JamieGibson 0:d9625740c0f9 25 {
JamieGibson 0:d9625740c0f9 26 trigger = 1;
JamieGibson 0:d9625740c0f9 27 wait_ms(1);
JamieGibson 0:d9625740c0f9 28 trigger=0; //stop sending pulses
JamieGibson 0:d9625740c0f9 29 while(!echo); //listen for echo pulse
JamieGibson 0:d9625740c0f9 30 t.reset(); //reset timer to measure echo pulse width
JamieGibson 0:d9625740c0f9 31 while(echo);
JamieGibson 0:d9625740c0f9 32 i=t.read_us(); //attach i to echo pulse width of sensor 1 in us
JamieGibson 0:d9625740c0f9 33
JamieGibson 0:d9625740c0f9 34 trigger1 = 1;
JamieGibson 0:d9625740c0f9 35 wait_ms(1);
JamieGibson 0:d9625740c0f9 36 trigger1=0; //stop sending pulses
JamieGibson 0:d9625740c0f9 37 while(!echo1); //listen for echo pulse
JamieGibson 0:d9625740c0f9 38 t.reset(); //reset timer to measure echo pulse width
JamieGibson 0:d9625740c0f9 39 while(echo1);
JamieGibson 0:d9625740c0f9 40 j=t.read_us(); //attach i to echo pulse width of sensor 1 in us
JamieGibson 0:d9625740c0f9 41
JamieGibson 0:d9625740c0f9 42 trigger2 = 1;
JamieGibson 0:d9625740c0f9 43 wait_ms(1);
JamieGibson 0:d9625740c0f9 44 trigger2=0; //stop sending pulses
JamieGibson 0:d9625740c0f9 45 while(!echo2); //listen for echo pulse
JamieGibson 0:d9625740c0f9 46 t.reset(); //reset timer to measure echo pulse width
JamieGibson 0:d9625740c0f9 47 while(echo2);
JamieGibson 0:d9625740c0f9 48 k=t.read_us(); //attach i to echo pulse width of sensor 1 in us
JamieGibson 0:d9625740c0f9 49
JamieGibson 0:d9625740c0f9 50 i=i/58; //converting to cm
JamieGibson 0:d9625740c0f9 51 j=j/58;
JamieGibson 0:d9625740c0f9 52 k=k/58;
JamieGibson 0:d9625740c0f9 53 pc.printf("Distance of i\n\r");
JamieGibson 0:d9625740c0f9 54 pc.printf("%1.3f \n\r",i);
JamieGibson 0:d9625740c0f9 55 wait(0.10);
JamieGibson 0:d9625740c0f9 56 pc.printf("Distance of j\n\r");
JamieGibson 0:d9625740c0f9 57 pc.printf("%1.3f \n\r",j);
JamieGibson 0:d9625740c0f9 58 wait(0.10);
JamieGibson 0:d9625740c0f9 59 pc.printf("Distance of k\n\r");
JamieGibson 0:d9625740c0f9 60 pc.printf("%1.3f \n\r",k);
JamieGibson 0:d9625740c0f9 61 wait(0.10);
JamieGibson 0:d9625740c0f9 62
JamieGibson 0:d9625740c0f9 63 greenled = 0;
JamieGibson 0:d9625740c0f9 64 redled = 0;
JamieGibson 0:d9625740c0f9 65 yellowled = 0;
JamieGibson 0:d9625740c0f9 66
JamieGibson 0:d9625740c0f9 67 switch_word=0xF0; //set up a recognisable output pattern
JamieGibson 0:d9625740c0f9 68 if((i>95) &&(j>95)&&(k>95)){ // condition for no obstacle
JamieGibson 0:d9625740c0f9 69 switch_word=switch_word|0x00; //move forward
JamieGibson 0:d9625740c0f9 70 }
JamieGibson 0:d9625740c0f9 71 if((i<95)&&(j>95)&&(k>95)){ //sensor 1 senses obstacle
JamieGibson 0:d9625740c0f9 72 switch_word=switch_word|0x01; // obstacle in the centre; turn left
JamieGibson 0:d9625740c0f9 73 yellowled=1;
JamieGibson 0:d9625740c0f9 74 }
JamieGibson 0:d9625740c0f9 75 if ((j<95)&&(i>95)&&(k>95)){
JamieGibson 0:d9625740c0f9 76 switch_word=switch_word|0x02; // obstacle on the right; turn left
JamieGibson 0:d9625740c0f9 77 greenled=1;
JamieGibson 0:d9625740c0f9 78 }
JamieGibson 0:d9625740c0f9 79 if((k<95)&&(j>95)&&(i>95)){
JamieGibson 0:d9625740c0f9 80 switch_word=switch_word|0x03; // obstacle on the left; turn right
JamieGibson 0:d9625740c0f9 81 redled=1;
JamieGibson 0:d9625740c0f9 82 }
JamieGibson 0:d9625740c0f9 83 if((i<95)&&(j<95)&&(k<95)){
JamieGibson 0:d9625740c0f9 84 switch_word= switch_word|0x04; // no way clear; reverse
JamieGibson 0:d9625740c0f9 85 greenled=1;
JamieGibson 0:d9625740c0f9 86 redled=1;
JamieGibson 0:d9625740c0f9 87 yellowled=1;
JamieGibson 0:d9625740c0f9 88 }
JamieGibson 0:d9625740c0f9 89 if((i<95)&&(j<95)&&(k>95)){
JamieGibson 0:d9625740c0f9 90 switch_word= switch_word|0x05; // FR
JamieGibson 0:d9625740c0f9 91 greenled=1;
JamieGibson 0:d9625740c0f9 92 yellowled=1;
JamieGibson 0:d9625740c0f9 93 }
JamieGibson 0:d9625740c0f9 94 if((i<95)&&(k<95)&&(j>95)){
JamieGibson 0:d9625740c0f9 95 switch_word= switch_word|0x06; // FL
JamieGibson 0:d9625740c0f9 96 redled=1;
JamieGibson 0:d9625740c0f9 97 yellowled=1;
JamieGibson 0:d9625740c0f9 98 }
JamieGibson 0:d9625740c0f9 99 cs = 0; //select slave
JamieGibson 0:d9625740c0f9 100 ser_port.write(switch_word); //send switch_word
JamieGibson 0:d9625740c0f9 101 cs = 1;
JamieGibson 0:d9625740c0f9 102 wait (0.000002);
JamieGibson 0:d9625740c0f9 103 }
JamieGibson 0:d9625740c0f9 104 }