TDPS3
main.cpp
- Committer:
- QingshuZhang
- Date:
- 2019-03-19
- Revision:
- 0:32705e4af4b9
File content as of revision 0:32705e4af4b9:
#include <L298_H.h> #include <mbed.h> Ticker tic; Timer t1; //Timer used to record the time duration DigitalOut trigpin(E2); DigitalIn echopin(E3); DigitalOut trigpin2(E4); DigitalIn echopin2(E5); bool dirL; bool dirR; float speed; bool echo_flag; int getDis (DigitalIn echopin) { Timer t; int distance; float duration; while (!echopin); // read the duration time t.start(); while (echopin); t.stop(); duration = t.read_us(); distance = (duration/2) / 29.1; t.reset(); //printf("distance: %d\n",distance); //read the distance return distance; } void inter_r(){ echo_flag=1; } int main() { L298 controlLeft(PTA12,PTA4,PTA5); L298 controlRight(PTA13,PTD5,PTD0); dirR=1; dirL=1; speed=0.2; int distance; int distance2; int totalT; controlLeft.SetDirection(dirL); controlRight.SetDirection(dirR); controlLeft.SetSpeed(speed); controlRight.SetSpeed(speed); tic.attach(&inter_r,1.0);// call the function every 1 second while (1) { if(echo_flag == true){ __disable_irq(); t1.start(); //t1 used to indicate the total time of this code //Trig sensor 1 distance = 0; trigpin = 0; wait_us(2); trigpin = 1; wait_us(10); trigpin = 0; distance = getDis(echopin); //Trig sensor 2 distance2=0; trigpin2 = 0; wait_us(2); trigpin2 = 1; wait_us(10); trigpin2 = 0; distance2 = getDis(echopin2); __enable_irq(); if (distance < 20|| distance2 <20) { speed = 0; controlLeft.SetSpeed(speed); controlRight.SetSpeed(speed); if (distance>distance2){ dirR=1; dirL=0; controlLeft.SetDirection(dirL); controlRight.SetDirection(dirR); //obstacle on the right, turn left speed = 0.2; controlLeft.SetSpeed(speed); controlRight.SetSpeed(speed); } else { //obstacle on the left or in the middle, turn right dirR=0; dirL=1; controlLeft.SetDirection(dirL); controlRight.SetDirection(dirR); speed = 0.2; controlLeft.SetSpeed(speed); controlRight.SetSpeed(speed); } } else { dirR=1; dirL=1; controlLeft.SetDirection(dirL); controlRight.SetDirection(dirR); speed = 0.2; controlLeft.SetSpeed(speed); controlRight.SetSpeed(speed); } t1.stop(); totalT= t1.read_us(); //printf("totalTime: %d \n",totalT); t1.reset(); echo_flag=0; } } }