svoe

Dependencies:   mbed mbed-STM32F103C8T6 MPU6050_1

echo.h

Committer:
Stas285
Date:
2017-05-02
Revision:
0:e9488589a8ee
Child:
1:e2a6e523bf1f

File content as of revision 0:e9488589a8ee:

int obstacle[20];//13 steps [-90;+90] by 15 deg
int echo_current_step;//[0;12], step = 6 => 0 deg
int echo_current_dir = -1;
int echo_cm;
float tmf;
int min_dist;
int min_dist_angle;
int max_dist;
int max_dist_angle;
int front_dist;



Timer echo_timer;
InterruptIn echo(PB_12);
DigitalOut sonar_triger(PB_13);

void echo_begin(){
    echo_timer.reset();
    }
    
void echo_end(){
    echo_cm = echo_timer.read_us()/58;
    }

void search(){
   serva(-80);
   wait_ms(200);
   for(int point = 0;point <= 12;point ++){
            serva(point*15-90);
            wait_ms(100);
            obstacle[point]=echo_cm;}      
   }
   
void echo_start(){
    sonar_triger = 1;
    tmf=log(1.0);//delay 5us
    tmf=log(1.0);//delay 5us
    //for(int i = 0; i<2000; i++) {tmi++;}
    sonar_triger = 0;//sonar start
    }
    
void echo_init(){
    echo.rise(&echo_begin);
    echo.fall(&echo_end);
    echo_timer.start();
    }
    
void echo_step(){
    obstacle[echo_current_step]=echo_cm;
    echo_current_step += echo_current_dir;
    if (echo_current_step > 12) {echo_current_step = 11 ; echo_current_dir = -1;} 
    if (echo_current_step < 0) {echo_current_step = 1 ; echo_current_dir = 1;} 
    serva(echo_current_step*15-90);
    echo_start();
    }
    
bool analyze_obstacle(){
    min_dist = 400;max_dist = 0; front_dist = 400;
    for(int point = 0;point <= 12;point ++){
        if(obstacle[point]<min_dist) {min_dist=obstacle[point];min_dist_angle = point*15-90;}
        if(obstacle[point]>max_dist) {max_dist=obstacle[point];max_dist_angle = point*15-90;}
        if((obstacle[point]*abs(point-6)*3<15)&&(obstacle[point]<front_dist)) {front_dist=obstacle[point];}
        }
    if(front_dist < 20) return(1); else return(0);
    }