/*
*
* PS2 4WD遥控车
*
* 2022.09.08
* MADE BY 艾泽(YWZ) 3D打印创新实验室&3D打印协会(DIY3D打印爱好者协会) HIT(WH)
* 运行前请下载PS2X_lib.h库
* 需要准备:L298N*2 PS2&转换口,降压模块12-5v arduino系列单片机,电机*4
* 此程序仅供学习,使用或转载请备注作者
*
*
*/
#include <PS2X_lib.h>
PS2X ps2x;
#define CLK 2
#define DAT 3
#define CMD 4
#define SEL 5
//设置ps2接收机引脚
#define in1 6
#define in2 7
#define in3 8
#define in4 9
#define in5 10
#define in6 11
#define in7 A3
#define in8 A4
//设置电机引脚
void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
ps2x.config_gamepad(CLK,CMD,SEL,DAT, true, false);
delay(300);
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);
pinMode(in5,OUTPUT);
pinMode(in6,OUTPUT);
pinMode(in7,OUTPUT);
pinMode(in8,OUTPUT);
}
void loop()
{
// put your main code here, to run repeatedly:
ps2x.read_gamepad(false,0);
delay(30);
//刷新ps2数据
if(ps2x.Button(PSB_PAD_UP)&&(ps2x.Analog(PSS_RY)==127))
{
RUN1();
delay(50);
}
else if(ps2x.Analog(PSS_RY)>127)
{
RUN();
delay(50);
}
else if(ps2x.Analog(PSS_RY)<127)
{
BACK();
delay(50);
}
else if(ps2x.Button(PSB_PAD_DOWN)&&(ps2x.Analog(PSS_LX)==128))
{
BACK1();
delay(50);
}
else if(ps2x.Analog(PSS_LX)>128)
{
LEFT();
delay(50);
}
else if(ps2x.Analog(PSS_LX)<128)
{
RIGHT();
delay(50);
}
else if(ps2x.Button(PSB_L1))
{
STOP();
delay(50);
}else{
DOWN();
}
/*
//--------------------------ps2 text-----------------------------
//-------------------use arduino ide 串口监视器----------------------
Serial.print("right x:");
Serial.print(ps2x.Analog(PSS_RX));
delay(50);
//右侧x
Serial.print("right y:");
Serial.println(ps2x.Analog(PSS_RY));
delay(500);
//右侧y
Serial.print("left x:");
Serial.print(ps2x.Analog(PSS_LX));
delay(50);
//左侧x
Serial.print("left y:");
Serial.println(ps2x.Analog(PSS_LY));
delay(500);
//左侧Y
//--------------------------------------------------------------------------------------------------------------------------------AIZE(YWZ)----------------
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------AIZE(YWZ)----------------
*/
}
//-----------常规姿态控制----------------------------------------------------------------------------------------------------AIZE(YWZ)----------------
void RUN()
{
int SPEED=ps2x.Analog(PSS_RY);
digitalWrite(in1,HIGH);
digitalWrite(in2,LOW);
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
analogWrite(in1,SPEED);
analogWrite(in3,SPEED);
digitalWrite(in5,HIGH);
digitalWrite(in6,LOW);
digitalWrite(in7,HIGH);
digitalWrite(in8,LOW);
analogWrite(in5,SPEED);
analogWrite(in7,SPEED);
}
//--------------------------------------------------------------------------------------------------------------------------------AIZE(YWZ)----------------
void BACK()
{
int SPEED=ps2x.Analog(PSS_RY)+127;
digitalWrite(in1,LOW);
digitalWrite(in2,HIGH);
digitalWrite(in3,LOW);
digitalWrite(in4,HIGH);
analogWrite(in2,SPEED);
analogWrite(in4,SPEED);
digitalWrite(in5,LOW);
digitalWrite(in6,HIGH);
digitalWrite(in7,LOW);
digitalWrite(in8,HIGH);
analogWrite(in6,SPEED);
analogWrite(in8,SPEED);
}
//--------------------------------------------------------------------------------------------------------------------------------AIZE(YWZ)----------------
void LEFT()
{
int SPEED=ps2x.Analog(PSS_LX);
digitalWrite(in1,HIGH);
digitalWrite(in2,LOW);
digitalWrite(in3,LOW);
digitalWrite(in4,HIGH);
analogWrite(in1,SPEED);
analogWrite(in4,SPEED);
digitalWrite(in5,HIGH);
digitalWrite(in6,LOW);
digitalWrite(in7,LOW);
digitalWrite(in8,HIGH);
analogWrite(in5,SPEED);
analogWrite(in8,SPEED);
}
//--------------------------------------------------------------------------------------------------------------------------------AIZE(YWZ)----------------
void RIGHT()
{
int SPEED=ps2x.Analog(PSS_LX)+128;
digitalWrite(in1,LOW);
digitalWrite(in2,HIGH);
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
analogWrite(in2,SPEED);
analogWrite(in3,SPEED);
digitalWrite(in5,LOW);
digitalWrite(in6,HIGH);
digitalWrite(in7,HIGH);
digitalWrite(in8,LOW);
analogWrite(in6,SPEED);
analogWrite(in7,SPEED);
}
//--------------------------------------------------------------------------------------------------------------------------------AIZE(YWZ)----------------
void DOWN()
{
digitalWrite(in1,LOW);
digitalWrite(in2,LOW);
digitalWrite(in3,LOW);
digitalWrite(in4,LOW);
digitalWrite(in5,LOW);
digitalWrite(in6,LOW);
digitalWrite(in7,LOW);
digitalWrite(in8,LOW);
}
//--------------------------------------------------------------------------------------------------------------------------------AIZE(YWZ)----------------
void STOP()
{
digitalWrite(in1,HIGH);
digitalWrite(in2,HIGH);
digitalWrite(in3,HIGH);
digitalWrite(in4,HIGH);
digitalWrite(in5,HIGH);
digitalWrite(in6,HIGH);
digitalWrite(in7,HIGH);
digitalWrite(in8,HIGH);
analogWrite(in1,250);
analogWrite(in2,250);
analogWrite(in3,250);
analogWrite(in4,250);
analogWrite(in5,250);
analogWrite(in6,250);
analogWrite(in7,250);
analogWrite(in8,250);
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------AIZE(YWZ)----------------
void RUN1()
{
digitalWrite(in1,HIGH);
digitalWrite(in2,LOW);
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
digitalWrite(in5,HIGH);
digitalWrite(in6,LOW);
digitalWrite(in7,HIGH);
digitalWrite(in8,LOW);
analogWrite(in1,250);
analogWrite(in3,250);
analogWrite(in5,250);
analogWrite(in7,250);
}
//--------------------------------------------------------------------------------------------------------------------------------AIZE(YWZ)----------------
void BACK1()
{
digitalWrite(in1,LOW);
digitalWrite(in2,HIGH);
digitalWrite(in3,LOW);
digitalWrite(in4,HIGH);
digitalWrite(in5,LOW);
digitalWrite(in6,HIGH);
digitalWrite(in7,LOW);
digitalWrite(in8,HIGH);
analogWrite(in2,250);
analogWrite(in4,250);
analogWrite(in6,250);
analogWrite(in8,250);
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------AIZE(YWZ)----------------
/*舵机版预留
void BACKLEFT()
{
digitalWrite(in1,HIGH);
digitalWrite(in2,LOW);
digitalWrite(in3,LOW);
digitalWrite(in4,HIGH);
analogWrite(in1,SPEED);
analogWrite(in4,SPEED);
digitalWrite(in5,HIGH);
digitalWrite(in6,LOW);
digitalWrite(in7,LOW);
digitalWrite(in8,HIGH);
analogWrite(in5,SPEED);
analogWrite(in8,SPEED);
}
//--------------------------------------------------------------------------------------------------------------------------------AIZE(YWZ)----------------
void BACKRIGHT()
{
digitalWrite(in1,LOW);
digitalWrite(in2,HIGH);
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
analogWrite(in2,SPEED);
analogWrite(in3,SPEED);
digitalWrite(in5,LOW);
digitalWrite(in6,HIGH);
digitalWrite(in7,HIGH);
digitalWrite(in8,LOW);
analogWrite(in6,SPEED);
analogWrite(in7,SPEED);
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------AIZE(YWZ)----------------
*/
ps2遥控小车arduino程序初版
最新推荐文章于 2024-07-26 20:52:34 发布
该博客展示了如何使用Arduino和PS2X_lib库控制四轮遥控车,通过读取PS2控制器的输入信号来调整电机速度和方向。代码中定义了不同的函数以实现前进、后退、左转、右转等基本操作,并提供了调试信息的串口输出。程序适用于学习和DIY项目。
摘要由CSDN通过智能技术生成