ps2遥控小车arduino程序初版

该博客展示了如何使用Arduino和PS2X_lib库控制四轮遥控车,通过读取PS2控制器的输入信号来调整电机速度和方向。代码中定义了不同的函数以实现前进、后退、左转、右转等基本操作,并提供了调试信息的串口输出。程序适用于学习和DIY项目。
摘要由CSDN通过智能技术生成
/*
 * 
 * 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)----------------


*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值