单片机/MCU论坛
直播中

吴浩

9年用户 42经验值
擅长:可编程逻辑
私信 关注
[问答]

ps2手柄控制arduino小车:程序有点问题在监视器下只显示up和left

#include   //for v1.6


//PS2手柄引脚
#define PS2_DAT        8  
#define PS2_CMD        6  
#define PS2_SEL        5  
#define PS2_CLK        7  


// 电机控制引脚
#define IN1 2
#define IN2 4
#define IN3 12
#define IN4 9


// 电机控制pwm
int speedPinA = 3;
int speedPinB = 11;


int speed=200;


#define pressures   true
#define rumble      true


PS2X ps2x;// 设置一个PS2手柄对象


void setup()
{
   pinMode(IN1, OUTPUT);// 电机控制引脚模式
   pinMode(IN2, OUTPUT);// 电机控制引脚模式
   pinMode(IN3, OUTPUT);// 电机控制引脚模式
   pinMode(IN4, OUTPUT);// 电机控制引脚模式
   Serial.begin(115200);//设置波特率
   delay(300); //延时等待初始化完成
}


void loop(){
int LY=ps2x.Analog(PSS_LY);//读PS2手柄左摇杆Y轴数据给变量LY
int LX=ps2x.Analog(PSS_LX);//读PS2手柄左摇杆X轴数据给变量LX
if (LY<127) //前进
{
        speed=2*(127-LY);//计算偏差LY给pwm                  
        analogWrite(speedPinA, speed);//给A电机偏差PWM值
        analogWrite(speedPinB, speed);//给B电机偏差PWM值
        digitalWrite(IN1, HIGH);//1
        digitalWrite(IN2, LOW); //0
        digitalWrite(IN3, HIGH);//1
        digitalWrite(IN4, LOW); //0      
        Serial.println("Up");   
}
if (LY>128)//后退
{
        speed=2*(LY-128);//计算偏差LY给pwm
        analogWrite(speedPinA, speed);//给A电机偏差PWM值
        analogWrite(speedPinB, speed);//给B电机偏差PWM值
        digitalWrite(IN1, LOW); //0
        digitalWrite(IN2, HIGH);//1
        digitalWrite(IN3, LOW); //0
        digitalWrite(IN4, HIGH);//1
        Serial.println("DOWN");
}
if (LX<127)//左转
{
        speed=2*(127-LX);//计算偏差LY给pwm
        analogWrite(speedPinA, speed);//给A电机偏差PWM值
        analogWrite(speedPinB, speed);//给B电机偏差PWM值
        digitalWrite(IN1,HIGH);//1
        digitalWrite(IN2, LOW);//0
        digitalWrite(IN3, LOW);//0
        digitalWrite(IN4,LOW); //0
        Serial.println("LEFT");
}
if (LX>128)//右转
{
        speed=2*(LX -128);//计算偏差LY给pwm
        analogWrite(speedPinA, speed);//给A电机偏差PWM值
        analogWrite(speedPinB, speed);//给B电机偏差PWM值
        digitalWrite(IN1, LOW); //0
        digitalWrite(IN2, LOW); //0
        digitalWrite(IN3, HIGH);//1
        digitalWrite(IN4, LOW); //0        
        Serial.println("Right");
}
if (LY>=126 && LY<=129 && LX>=126 && LX<=129)//停止
{
        digitalWrite(IN1, LOW); //0
        digitalWrite(IN2, LOW); //0
        digitalWrite(IN3, LOW); //0
        digitalWrite(IN4, LOW); //0
        Serial.println("Stop");
}
}

  • QQ图片20180821121715.png

更多回帖

发帖
×
20
完善资料,
赚取积分