goodluck 发表于 2016-8-30 15:18:58

关于蓝牙和超声避障结合的问题 来大神啊

int Echo =A1;// Echo回声脚(P2.0)
int Trig =A0;//Trig 触发脚(P2.1)
int in1 = 11;
int in2 = 6;
int in3 = 5;
int in4 = 3;
int MODE = 1;
void forward()
{
analogWrite(in1,90);
analogWrite(in2,0);
analogWrite(in3,90);
analogWrite(in4,0);
}

void back()
{
analogWrite(in1,0);
analogWrite(in2,90);
analogWrite(in3,0);
analogWrite(in4,90);
}

void turnleft()
{
analogWrite(in1,0);
analogWrite(in2,0);
analogWrite(in3,90);
analogWrite(in4,0);
}

void zuoyuandi()
{
analogWrite(in1,0);
analogWrite(in2,90);
analogWrite(in3,90);
analogWrite(in4,0);
}
void turnright()
{
analogWrite(in1,90);
analogWrite(in2,0);
analogWrite(in3,0);
analogWrite(in4,0);
}
void stop()
{
analogWrite(in1,0);
analogWrite(in2,0);
analogWrite(in3,0);
analogWrite(in4,0);
}
int Distance_test()   // 量出前方距离
{
digitalWrite(Trig, LOW);   // 给触发脚低电平2μs
delayMicroseconds(2);
digitalWrite(Trig, HIGH);// 给触发脚高电平10μs,这里至少是10μs
delayMicroseconds(20);
digitalWrite(Trig, LOW);    // 持续给触发脚低电
float Fdistance = pulseIn(Echo, HIGH);// 读取高电平时间(单位:微秒)
Fdistance= Fdistance/58;       //为什么除以58等于厘米,Y米=(X秒*344)/2
// X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58
return (int)Fdistance;
}





void setup() {
Serial.begin(9600);   // 初始化串口
pinMode(Echo, INPUT);    // 定义超声波输入脚
pinMode(Trig, OUTPUT);   // 定义超声波输出脚
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);
stop();



}
char rec= ' ';
void loop() {

if(MODE==1){
    while(Serial.available()){
      rec=Serial.read();
      if(rec=='1'){
      MODE=1;
      }else if(rec=='2'){
      MODE=2;
      }
      if(MODE!=1)
      break;
      if(rec=='f'){
      forward();
      
      }else if(rec=='b'){
      back();
      
      }else if(rec=='l'){
       turnleft();
      
      }else if(rec=='r'){
      turnright();
      
      }else{
      turnright();
      }
   
    //rec= ' ';
    }
}

if(MODE==2){
    if(Serial.available()){
      rec=Serial.read();
      if(rec=='1'){
      MODE=1;
      }
      else if(rec=='2'){
      MODE=2;
      }
    }
Distance_test();
    //mySerial.println(distance);
    if(Distance_test()>25.0){
      forward();
      
    }else{
      back();
      
    }
}

//rec= ' ';
}







根据网上来源 自己整理了一下但是当用蓝牙输入1的时候 然后再输入其他的都没反应。输入2的时候可以正常自动后退 避障 。是不是模式1我写的不对啊请大神指导一下啊 谢谢啊

zjz5717 发表于 2016-8-30 19:13:34

为什么你mode1用的是while,而mode2用的是if?

goodluck 发表于 2016-8-31 17:07:35

zjz5717 发表于 2016-8-30 19:13 static/image/common/back.gif
为什么你mode1用的是while,而mode2用的是if?

我是网上抄的啊一直在纠结 能详细点说说么
页: [1]
查看完整版本: 关于蓝牙和超声避障结合的问题 来大神啊