
Moon Buggy Obstacle Code
Diff: main.cpp
- Revision:
- 0:d9625740c0f9
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Dec 10 15:16:02 2015 +0000 @@ -0,0 +1,104 @@ +#include "mbed.h" +SPI ser_port(p11, p12, p13); // mosi, miso, sclk, ssel +DigitalOut cs(p14); //this acts as “slave select” +Serial pc(USBTX, USBRX); +DigitalIn echo(p20); +DigitalOut trigger(p19); +DigitalIn echo1(p18); +DigitalOut trigger1(p17); +DigitalIn echo2(p16); +DigitalOut trigger2(p15); +DigitalOut greenled(p21); +DigitalOut redled(p22); +DigitalOut yellowled(p23); +char switch_word ; //word we will send + +Timer t; +float i,j,k; + +int main() +{ + ser_port.format(8,0); + ser_port.frequency(4000000); + t.start(); //start timer + while(1) + { + trigger = 1; + wait_ms(1); + trigger=0; //stop sending pulses + while(!echo); //listen for echo pulse + t.reset(); //reset timer to measure echo pulse width + while(echo); + i=t.read_us(); //attach i to echo pulse width of sensor 1 in us + + trigger1 = 1; + wait_ms(1); + trigger1=0; //stop sending pulses + while(!echo1); //listen for echo pulse + t.reset(); //reset timer to measure echo pulse width + while(echo1); + j=t.read_us(); //attach i to echo pulse width of sensor 1 in us + + trigger2 = 1; + wait_ms(1); + trigger2=0; //stop sending pulses + while(!echo2); //listen for echo pulse + t.reset(); //reset timer to measure echo pulse width + while(echo2); + k=t.read_us(); //attach i to echo pulse width of sensor 1 in us + + i=i/58; //converting to cm + j=j/58; + k=k/58; + pc.printf("Distance of i\n\r"); + pc.printf("%1.3f \n\r",i); + wait(0.10); + pc.printf("Distance of j\n\r"); + pc.printf("%1.3f \n\r",j); + wait(0.10); + pc.printf("Distance of k\n\r"); + pc.printf("%1.3f \n\r",k); + wait(0.10); + + greenled = 0; + redled = 0; + yellowled = 0; + + switch_word=0xF0; //set up a recognisable output pattern + if((i>95) &&(j>95)&&(k>95)){ // condition for no obstacle + switch_word=switch_word|0x00; //move forward + } + if((i<95)&&(j>95)&&(k>95)){ //sensor 1 senses obstacle + switch_word=switch_word|0x01; // obstacle in the centre; turn left + yellowled=1; + } + if ((j<95)&&(i>95)&&(k>95)){ + switch_word=switch_word|0x02; // obstacle on the right; turn left + greenled=1; + } + if((k<95)&&(j>95)&&(i>95)){ + switch_word=switch_word|0x03; // obstacle on the left; turn right + redled=1; + } + if((i<95)&&(j<95)&&(k<95)){ + switch_word= switch_word|0x04; // no way clear; reverse + greenled=1; + redled=1; + yellowled=1; + } + if((i<95)&&(j<95)&&(k>95)){ + switch_word= switch_word|0x05; // FR + greenled=1; + yellowled=1; + } + if((i<95)&&(k<95)&&(j>95)){ + switch_word= switch_word|0x06; // FL + redled=1; + yellowled=1; + } + cs = 0; //select slave + ser_port.write(switch_word); //send switch_word + cs = 1; + wait (0.000002); + } +} \ No newline at end of file