请高手看看为什么左轮不转
大家好,我是新人,刚学ARDUINO,改了一个小车程序,但是右轮怎么都不转,研究了两天了,实在研究不出来,还请高价指点。//小车前后左右PWM Arduino 程序:// R是右(right),L是左(left) 人与小车同一方向时 分的左右
#include <IRremote.h>
int RECV_PIN=7;
int MotorLeft1=14; //A0 IN1
int MotorLeft2=15; //A1 IN2
int MotorRight1=16;//A2 IN3
int MotorRight2=17;//A3 IN4
int MotorLPWM=5;//PWM5
int MotorRPWM=3;//PWM 3
int LSpeed=0; //左轮速度
int RSpeed=0; //右轮速度
int LAdjust=0;//调整左轮速度,使两轮速度一致
int Gear=50;//定义一个档差
int MaxSpeed=240;//定义最大速度
int MinSpeed=50;//定义最小速度
int Temp ;//定义临时变量
int Signal;//定义接收到的信号
int Direct=0;//定义方向,“1”为前进,“0”为停止,“-1”为后退,“2”为右前左后,“3”为右后左前,"4"为向后转
IRrecv irrecv(RECV_PIN);
decode_results results;
#define QianJin -24481
#define HouTui 24735
#define ZuoZhuan -8161
#define YouZhuan 4335
#define Ting 8415
#define Xiangzuozhuan -30601
#define Xiangyouzhuan 18615
#define Xianghouzhuan -14281
void setup()
{
Serial.begin(9600);
pinMode(RECV_PIN, INPUT);
pinMode(MotorRight1, OUTPUT);
pinMode(MotorRight2, OUTPUT);
pinMode(MotorLeft1,OUTPUT);
pinMode(MotorLeft2,OUTPUT);
pinMode(MotorLPWM,OUTPUT);
pinMode(MotorRPWM,OUTPUT);
irrecv.enableIRIn(); // Start the receiver
}
void advance() // 前進or加速
{
Direct=1;
/***************************前进调速***************************/
if (LSpeed==RSpeed)//IF直行,THEN调高一档
{
LSpeed=LSpeed+Gear;
RSpeed=RSpeed+Gear;
if (RSpeed>=MaxSpeed) //将速度限定在最大速度之内
{
LSpeed=MaxSpeed-LAdjust;
RSpeed=MaxSpeed;
}
}
else //IF拐弯,THEN使直行
{
Temp=(LSpeed+RSpeed)/2;
LSpeed=Temp-LAdjust;
RSpeed=Temp;
}
/***************************前进调速***************************/
if(RSpeed<MinSpeed)
{
RSpeed=MinSpeed;
LSpeed=MinSpeed-LAdjust;
}
}
void right() //右轉(單輪)
{
if(Direct!=0) RSpeed=RSpeed-Gear;
}
void left() //左轉(單輪)
{
if(Direct!=0) LSpeed=LSpeed-Gear;
}
void turnR() //右轉(雙輪)
{
Direct=3;
}
void turnL() //左轉(雙輪)
{
Direct=2;
}
void turnBack() //向后转
{
Direct=4;
}
void stopp() //停止
{
Direct=0;
}
void back() //後退 后退
{
if (Direct==1)
{
LSpeed=LSpeed-Gear;
RSpeed=RSpeed-Gear;
if (RSpeed<MinSpeed) Direct=0;//速度小于最小速度时停止
}
else
{
Direct=-1;//如果停止或者后退状态,挂倒档
}
}
void loop()
{
//Dingyi xinhao laiyuan.
if (irrecv.decode(&results))
{
Signal=results.value;
Serial.println(Signal);
switch(Signal)
{/*8种信号,分别为前进、后、左、右、停、向左转、向右转、向后转*/
case QianJin:
advance();
break;
case HouTui:
back();
break;
case ZuoZhuan:
left();
break;
case YouZhuan:
right();
break;
case Ting:
stopp();
break;
case Xiangzuozhuan:
turnL();
break;
case Xiangyouzhuan:
turnR();
break;
case Xianghouzhuan:
turnBack();
}
irrecv.resume();
}
//***************************依据Direct的值进行操作****************************
if (Direct==-1) //倒档
{
digitalWrite(MotorRight1,LOW);
digitalWrite(MotorRight2,HIGH);
analogWrite(MotorRPWM,RSpeed);
digitalWrite(MotorLeft1,HIGH);
digitalWrite(MotorLeft2,LOW);
analogWrite(MotorLPWM,LSpeed+LAdjust);
}
else if(Direct==0)
{
digitalWrite(MotorRight1,LOW);
digitalWrite(MotorRight2,LOW);
digitalWrite(MotorLeft1,LOW);
digitalWrite(MotorLeft2,LOW);
}
else if(Direct==1)
{
digitalWrite(MotorRight1,HIGH);//IN3 右电机 高电平正转
digitalWrite(MotorRight2,LOW);//IN4 右电机 高电平反转
analogWrite(MotorRPWM,RSpeed);
digitalWrite(MotorLeft1,LOW);//IN1 左电机 高电平反转
digitalWrite(MotorLeft2,HIGH);//IN2 左电机 高电平正转
analogWrite(MotorLPWM,LSpeed+LAdjust);
}
else if(Direct==2)
{
digitalWrite(MotorRight1,HIGH);
digitalWrite(MotorRight2,LOW);
analogWrite(MotorRPWM,130);
digitalWrite(MotorLeft1,HIGH);
digitalWrite(MotorLeft2,LOW);
analogWrite(MotorLPWM,130);
delay(100);//这个数值还有待商榷
Direct=1;
}
else if(Direct==3)
{
digitalWrite(MotorRight1,LOW);
digitalWrite(MotorRight2,HIGH);
analogWrite(MotorRPWM,130);
digitalWrite(MotorLeft1,LOW);
digitalWrite(MotorLeft2,HIGH);
analogWrite(MotorLPWM,130);
delay(100);//这里需要填入数值使小车向右转90度
Direct=1;
}
else
{
digitalWrite(MotorRight1,LOW);
digitalWrite(MotorRight2,HIGH);
analogWrite(MotorRPWM,130);
digitalWrite(MotorLeft1,LOW);
digitalWrite(MotorLeft2,HIGH);
analogWrite(MotorLPWM,130);
delay(300);//这里需要填入数值使小车向后转
Direct=1;
}
//***************************依据Direct的值进行操作****************************
}
是右轮,我的题目写错了 你用的什么驱动板?硬件是否是好的建议你检查一下 你编写一个让右轮转的程序,才能帮你看啊 感觉蛮乱的
是我水平低么? Albert,_Einste 发表于 2016-8-16 14:22 static/image/common/back.gif
你用的什么驱动板?硬件是否是好的建议你检查一下
硬件没有问题,如果把左轮的PWM去掉,那么就成光左轮转,右轮不转了。 请问,驱动板? Albert,_Einste 发表于 2016-8-19 17:56 static/image/common/back.gif
请问,驱动板?
ARDUINO UNO 电机驱动板,难不成你用io口直接驱动。。。。。 Albert,_Einste 发表于 2016-8-20 22:45 static/image/common/back.gif
电机驱动板,难不成你用io口直接驱动。。。。。
电机驱动板是网上买的慧净的底盘
页:
[1]