找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1538|回复: 0
打印 上一主题 下一主题
收起左侧

PS2 arduino l298n

[复制链接]
跳转到指定楼层
楼主
ID:328989 发表于 2018-5-13 17:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  #include <PS2X_lib.h>  //for v1.6
/******************************************************************
* set pins connected to PS2 controller:
*   - 1e column: original
*   - 2e colmun: Stef?
* replace pin numbers by the ones you use
******************************************************************/
//PS2
#define PS2_DAT        13  //14   
#define PS2_CMD        11  //15
#define PS2_SEL        10  //16
#define PS2_CLK        12  //17
// 电机控制引脚
#define IN1 4
#define IN2 5
#define IN3 6
#define IN4 7
//PWM控制引脚;
  int speedPinA = 8;
  int speedPinB = 9;

int speed;
/******************************************************************
* select modes of PS2 controller:
*   - pressures = analog reading of push-butttons
*   - rumble    = motor rumbling
* uncomment 1 of the lines for each mode selection
******************************************************************/
#define pressures   true
//#define pressures   false
#define rumble      true
//#define rumble      false

PS2X ps2x; // create PS2 Controller Class

//right now, the library does NOT support hot pluggable controllers, meaning
//you must always either restart your Arduino after you connect the controller,
//or call config_gamepad(pins) again after connecting the controller.

int error = 0;
byte type = 0;
byte vibrate = 0;

// Reset func
void (* resetFunc) (void) = 0;

void setup(){
               pinMode(IN1, OUTPUT);
               pinMode(IN2, OUTPUT);
               pinMode(IN3, OUTPUT);
               pinMode(IN4, OUTPUT);

                 speed =200;
                Serial.begin(115200);

                delay(300);  //added delay to give wireless ps2 module some time to startup, before configuring it

  //CHANGES for v1.6 HERE!!! **************PAY ATTENTION*************

  //setup pins and settings: GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error
  error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, pressures, rumble);

  if(error == 0){
    Serial.print("Found Controller, configured successful ");
    Serial.print("pressures = ");
  if (pressures)
    Serial.println("true ");
  else
    Serial.println("false");
  Serial.print("rumble = ");
  if (rumble)
    Serial.println("true)");
  else
    Serial.println("false");
    Serial.println("Try out all the buttons, X will vibrate the controller, faster as you press harder;");
    Serial.println("holding L1 or R1 will print out the analog stick values.");
    Serial.println("Note: Go to www.billporter.info for updates and to report bugs.");
  }  
  else if(error == 1)
    Serial.println("No controller found, check wiring, see readme.txt to enable debug. visit www.billporter.info for troubleshooting tips");

  else if(error == 2)
    Serial.println("Controller found but not accepting commands. see readme.txt to enable debug. Visit www.billporter.info for troubleshooting tips");

  else if(error == 3)
    Serial.println("Controller refusing to enter Pressures mode, may not support it. ");

  type = ps2x.readType();
  switch(type) {
    case 0:
      Serial.println("Unknown Controller type found ");
      break;
    case 1:
      Serial.println("DualShock Controller found ");
      break;
    case 2:
      Serial.println("GuitarHero Controller found ");
      break;
  case 3:
      Serial.println("Wireless Sony DualShock Controller found ");
      break;
   }
}
void turnLeft()
{
   digitalWrite(IN1,LOW);
   digitalWrite(IN2, HIGH);
   digitalWrite(IN3, HIGH);
   digitalWrite(IN4,LOW);
}
void turnRight()
{
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
}

void forward()
{
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
}

void back()
{
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
}
void stop()
{
  digitalWrite(IN1, LOW);
  digitalWrite(IN2,LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}
void loop() {
  /* You must Read Gamepad to get new values and set vibration values
     ps2x.read_gamepad(small motor on/off, larger motor strenght from 0-255)
     if you don't enable the rumble, use ps2x.read_gamepad(); with no values
     You should call this at least once a second
   */  
  if(error == 1){ //skip loop if no controller found
    return;
  }

  if(type == 2){ //Guitar Hero Controller
    return;
  }
  else { //DualShock Controller
    ps2x.read_gamepad(false, vibrate); //read controller and set large motor to spin at 'vibrate' speed
    //开始运行
    if(ps2x.Button(PSB_START)) {        //will be TRUE as long as button is pressed
      Serial.println("Start is being held");
      speed = 120;
      analogWrite(speedPinA, speed);
       analogWrite(speedPinB, speed);
       forward();
    }
    if(ps2x.Button(PSB_SELECT)){
      Serial.println("stop");
   speed = 0;
   analogWrite(speedPinA,speed);
   analogWrite(speedPinB,speed);
   stop();
  }     

    if(ps2x.Button(PSB_PAD_UP)) {      //will be TRUE as long as button is pressed
     Serial.println("Up held this hard: ");
     //speed= 200;
      analogWrite(speedPinA, speed);
      analogWrite(speedPinB, speed);
      forward();
    }
    if(ps2x.Button(PSB_PAD_RIGHT)){
      Serial.println("turn right");
    analogWrite(speedPinA, 0);
    analogWrite(speedPinB, speed);
    turnRight();

    }
  if(ps2x.Button(PSB_PAD_LEFT)){
     Serial.println("turn left ");
       analogWrite(speedPinA, speed);
       analogWrite(speedPinB, 0);
      turnLeft();
    }
    if(ps2x.Button(PSB_PAD_DOWN)){
      Serial.print("Down held this hard: ");
  //    speed= 200;
      analogWrite(speedPinA, speed);
      analogWrite(speedPinB, speed);
      back();
    }  
  }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表