电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
问答
新手求助 arduino小车以弄好的超声波部分粘贴到了操作界面下无法运行
已解决
73482
个问题
已帮助
5993
位优秀工程师
新手求助 arduino小车以弄好的超声波部分粘贴到了操作界面下无法运行
zjz000
2016-02-05
浏览量:2060
#include
//舵机控制库
#include
DistanceSRF04 Dist;
int distance;
int EN2 = 14;
int EN3 = 15;
int EN4 = 16;
int EN5 = 17;
int inputPin = 9; // 定義超音波信號接收腳位
int outputPin =8; // 定義超音波信號發射腳位
int EA = 3;
int EB = 5;
int lkf;
Servo myservo; // 設 myservo
int directionn = 0; // 前=8 後=2 左=4 右=6
int distanceL=0;
int distanceF=0;
int distanceR=0;
int Fgo = 8; // 前進
int Rgo = 6; // 右轉
int Lgo = 4; // 左轉
int Bgo = 2; // 倒車
///////////////////////////////////////
void ting(void)
{
analogWrite(EA,0);
analogWrite(EB,0);
digitalWrite(EN2,LOW);
digitalWrite(EN3,LOW);
digitalWrite(EN4,LOW);
digitalWrite(EN5,LOW);
}
void qian(void)
{
analogWrite(EA,254);//调节参数可调速度(0-255)
analogWrite(EB,255);//调节参数可调速度(0-255)
digitalWrite(EN2,HIGH);
digitalWrite(EN3,LOW);
digitalWrite(EN4,HIGH);
digitalWrite(EN5,LOW);
}
void hou(void)
{
analogWrite(EA,255);//调节参数可调速度(0-255)
analogWrite(EB,255); //调节参数可调速度(0-255)
digitalWrite(EN2,LOW);
digitalWrite(EN3,HIGH);
digitalWrite(EN4,LOW);
digitalWrite(EN5,HIGH);
}
void zuo(void)
{
analogWrite(EA,150);//调节参数可调速度(0-255)
analogWrite(EB,150); //调节参数可调速度(0-255)
digitalWrite(EN2,HIGH);
digitalWrite(EN3,LOW);
digitalWrite(EN4,LOW);
digitalWrite(EN5,HIGH);
}
void you(void)
{
analogWrite(EA,150);//调节参数可调速度(0-255)
analogWrite(EB,150); //调节参数可调速度(0-255)
digitalWrite(EN2,LOW);
digitalWrite(EN3,HIGH);
digitalWrite(EN4,HIGH);
digitalWrite(EN5,LOW);
}
void ask_pin_F() // 量出前方距離
{
myservo.write(90);
digitalWrite(outputPin, LOW); // 讓超聲波發射低電壓2μs
delayMicroseconds(2);
digitalWrite(outputPin, HIGH); // 讓超聲波發射高電壓10μs,這裡至少是10μs
delayMicroseconds(10);
digitalWrite(outputPin, LOW); // 維持超聲波發射低電壓
float Fdistance = pulseIn(inputPin, HIGH); // 讀差相差時間
Fdistance= Fdistance/5.8/10; // 將時間轉為距離距离(單位:公分)
Serial.print("F distance:"); //輸出距離(單位:公分)
Serial.println(Fdistance); //顯示距離
distanceF= Fdistance; // 將距離 讀入Fspeedd(前速)
}
void ask_pin_L() // 量出左邊距離
{
myservo.write(5);
delay(100);
digitalWrite(outputPin, LOW); // 讓超聲波發射低電壓2μs
delayMicroseconds(2);
digitalWrite(outputPin, HIGH); // 讓超聲波發射高電壓10μs,這裡至少是10μs
delayMicroseconds(10);
digitalWrite(outputPin, LOW); // 維持超聲波發射低電壓
float Ldistance = pulseIn(inputPin, HIGH); // 讀差相差時間
Ldistance= Ldistance/5.8/10; // 將時間轉為距離距离(單位:公分)
Serial.print("L distance:"); //輸出距離(單位:公分)
Serial.println(Ldistance); //顯示距離
distanceL = Ldistance; // 將距離 讀入Lspeedd(左速)
}
void ask_pin_R() // 量出右邊距離
{
myservo.write(177);
delay(100);
digitalWrite(outputPin, LOW); // 讓超聲波發射低電壓2μs
delayMicroseconds(2);
digitalWrite(outputPin, HIGH); // 讓超聲波發射高電壓10μs,這裡至少是10μs
delayMicroseconds(10);
digitalWrite(outputPin, LOW); // 維持超聲波發射低電壓
float Rdistance = pulseIn(inputPin, HIGH); // 讀差相差時間
Rdistance= Rdistance/5.8/10; // 將時間轉為距離距离(單位:公分)
Serial.print("R distance:"); //輸出距離(單位:公分)
Serial.println(Rdistance); //顯示距離
distanceR = Rdistance; // 將距離 讀入Rspeedd(右速)
}
void detection() //測量3個角度(0.90.179)
{
int delay_time = 250; // 伺服馬達轉向後的穩定時間
ask_pin_F(); // 讀取前方距離
if(distanceF<10) // 假如前方距離小於10公分
{
ting(); // 清除輸出資料
delay(400); // 等待伺服馬達穩定
ask_pin_L(); // 讀取左方距離
delay(400); // 等待伺服馬達穩定
ask_pin_R(); // 讀取右方距離
delay(400); // 等待伺服馬達穩定
if(distanceL>distanceR) //假如 左邊距離大於右邊距離
{
directionn = Rgo; //向右走
}
if(distanceL<=distanceR) //假如 左邊距離小於或等於右邊距離
{
directionn = Lgo; //向左走
}
if (distanceL< 10 && distanceR< 10) //假如 左邊距離和右邊距離皆小於10公分
{
directionn = Bgo; //向後走
}
}
else //加如前方不小於(大於)25公分
{
directionn = Fgo; //向前走
}
}
void setup()
{
myservo.attach(10);//水平舵机接10脚
myservo.write(90);//输出舵机初始位置为90度
pinMode(EN2,OUTPUT);
pinMode(EN3,OUTPUT);
pinMode(EN4,OUTPUT);
pinMode(EN5,OUTPUT);
pinMode(inputPin, INPUT); // 定義超音波輸入腳位
pinMode(outputPin, OUTPUT); // 定義超音波輸出腳位
Serial.begin(9600);//设置波特率为9600bps
lkf=0;
}
void loop()
{
myservo.write(90); //讓伺服馬達回歸 預備位置 準備下一次的測量
if(Serial.available())
{
lkf = Serial.read();
switch(lkf)
{
case \'a\':
qian();
delay(150);
myservo.write(90);
ask_pin_F(); // 讀取前方距離
delay(250); // 等待伺服馬達穩定
if(distanceF<10) // 假如前方距離小於10公分
{
hou(); // 倒退(車)
delay(150);
}
lkf=0;
break;
case \'b\':
hou();
lkf=0;
break;
case \'c\':
zuo();
delay(500);
qian();
delay(10);
lkf=0;
break;
case \'d\':
you();
delay(500);
qian();
delay(10);
lkf=0;
break;
case \'e\':
ting();
lkf=0;
break;
case \'j\':
myservo.write(90);
detection(); //測量角度 並且判斷要往哪一方向移動
if(directionn == 2) //假如directionn(方向) = 2(倒車)
{
hou(); // 倒退(車)
delay(300);
}
if(directionn == 6) //假如directionn(方向) = 6(右轉)
{
zuo(); // 双轮左转
delay(500);
}
if(directionn == 4) //假如directionn(方向) = 4(左轉)
{
you(); // 双轮右转
delay(500);
}
if(directionn == 8) //假如directionn(方向) = 8(前進)
{
qian(); // 正常前進
delay(100);
}
lkf=\'j\';
break;
}
}
}
显示全部
Arduino
关注问题
写回答
0
0
收起
我来回答
上传资料:
选择文件
文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答
数量:
0
相关问题
问题达人
换一批
文章
知识经验换现金
换一批
新手求助 arduino小车以弄好的超声波部分粘贴到了操作界面下无法运行
写回答
关注问题
×
我要举报该内容,理由是:
内容质量差:
内容太水、伸手党
垃圾广告信息:
广告、招聘、推广、测试内容等
偏离问答主题:
与技术无关、讨论类
与社区已有内容重复:
违规内容:
色情、暴力、血腥、敏感信息等
不友善内容:
人事攻击、挑衅辱骂、恶意行为
以上选项都不是: