极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9787|回复: 2

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

[复制链接]
发表于 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我写的不对啊  请大神指导一下啊 谢谢啊
回复

使用道具 举报

发表于 2016-8-30 19:13:34 | 显示全部楼层
为什么你mode1用的是while,而mode2用的是if?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-31 17:07:35 | 显示全部楼层
zjz5717 发表于 2016-8-30 19:13
为什么你mode1用的是while,而mode2用的是if?

我是网上抄的啊  一直在纠结 能详细点说说么  
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 14:21 , Processed in 0.040765 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表