在arduino上编写程序做智能小车要调用哪些程序

 我来答
撕烂你的贝塔cx
2016-03-29 · TA获得超过3943个赞
知道大有可为答主
回答量:2061
采纳率:70%
帮助的人:1271万
展开全部
int outputPin = 5;
int inputPin = 4;
int cmdPin = 3;
int pinI1=8;//定义I1接口
int pinI2=9;//定义I2接口
int speedpin1=11;//定义EA(PWM调速)接口
int pinI3=6;//定义I3接口
int pinI4=7;//定义I4接口
int speedpin2=10;//定义EB(PWM调速)接口
int average_speed_l = 150;
int average_speed_r = 100;
int speed_limit_l = 80;
int speed_limit_r = 60;
int target_distance = 30;//in cm
int lost_distance = 80;
float detect_distance()
{
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); //显示距离
return Fdistance;
}
void rightSpeed(int speed_r)
{
if(speed_r < speed_limit_r)
{
speed_r = 0;
}
analogWrite(speedpin1,speed_r);//输入模拟值进行设定速度
digitalWrite(pinI1,HIGH);//使直流电机(左)顺时针转
digitalWrite(pinI2,LOW);
}
void leftSpeed(int speed_l)
{
if(speed_l < speed_limit_l)
{
speed_l = 0;
}
analogWrite(speedpin2,speed_l);//输入模拟值进行设定速度
digitalWrite(pinI3,LOW);//使直流电机()顺时针转
digitalWrite(pinI4,HIGH);
}
void stop_l()
{
digitalWrite(speedpin2,LOW);//输入模拟值进行设定速度
digitalWrite(pinI3,LOW);//使直流电机()顺时针转
digitalWrite(pinI4,LOW);
}
void stop_r()
{
digitalWrite(speedpin1,LOW);//输入模拟值进行设定速度
digitalWrite(pinI1,LOW);//使直流电机(左)顺时针转
digitalWrite(pinI2,LOW);
}
void turn_l()
{
leftSpeed(100);
rightSpeed(150);
}
void turn_r()
{
leftSpeed(200);
rightSpeed(80);
}
void noturn()
{
leftSpeed(100);
rightSpeed(80);
}
void rotate()
{
leftSpeed(200);
rightSpeed(0);
}
void setup()
{
Serial.begin(9600);
pinMode(outputPin, OUTPUT);
pinMode(inputPin, INPUT);
pinMode(pinI1,OUTPUT);
pinMode(pinI2,OUTPUT);
pinMode(speedpin1,OUTPUT);
pinMode(pinI3,OUTPUT);
pinMode(pinI4,OUTPUT);
pinMode(speedpin2,OUTPUT);
pinMode(cmdPin, INPUT);
}
void loop()
{
if(digitalRead(cmdPin) == LOW){

float dis = detect_distance();
if(dis > lost_distance){
while(true)
{
rotate();
delay(100);
stop_l();
stop_r();
delay(100);
dis = detect_distance();
if(dis < lost_distance) break;
}
}else{
if(dis > target_distance){
if(dis - target_distance > 2){ //if the difference is small enough, it can be neglected.
turn_r();
}else{
noturn();
}
}
if(dis < target_distance){
if(target_distance - dis > 2){
turn_l();
}else{
noturn();
}
}
}
}else{
stop_l();
stop_r();
}
delay(100);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式