|
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我写的不对啊 请大神指导一下啊 谢谢啊 |
|