Arduino
#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");
}
}
更多回帖