Stik PS2 Wireless Connect Arduino

 Stik PS2 Wireless Controller Connect Arduino


Wiring diagram

  • Digital pin 10 => PS2 receiver pin 6 (ATT)
  • Digital pin 11 => PS2 receiver pin 2 (CMD)
  • Digital pin 12 => PS2 receiver pin 1 (DATA)
  • Digital pin 13 => PS2 receiver pin 7 (CLK)
  • 3.3V pin => PS2 receiver pin 5 (POWER)
  • Gnd pin => PS2 receiver pin 4 (GROUND

Setup Arduino IDE

1. Download and install Arduino IDE latest version
2. Adding the libraries


ARDUINO CODE

#include <PS2X_lib.h>   //DOWNLOAD LIBRARY IN DESCRIPTION VIDEO                       /* PS2 Controller Library */


PS2X ps2x;                                    /* create PS2 Controller Class*/
byte Type = 0;
byte vibrate = 0;
int RX = 0, RY = 0, LX = 0, LY = 0;

byte x = 0;
byte y = 0;
byte z = 0;

const byte led1 = A0;
const byte led2 = A1;
const byte led3 = A2;
const byte led4 = A3;

//MOTORPIN 1&2 = MOTOR 1 PWM (PIN 5,6)
//MOTORPIN 3&4 = MOTOR 4 (PIN 2,3)
//MOTORPIN 5&6 = MOTOR 5 (PIN4,7)
const byte motorpin[]={5,6,2,3,4,7};
byte count = 6;
unsigned int nilai1 = 1, nilai2 = 1, nilai3 = 1, nilai4 = 1;

void setup() {
  for (int x =0; x<count; x++)
  {
    pinMode(motorpin[x], OUTPUT);
  }
  for (int x =0; x<count; x++)
  {
    pinMode(motorpin[x], LOW);
  }
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);

  Serial.begin(9600);
  ps2x.config_gamepad(13, 11, 10, 12, true, true);
  /* setup pins and settings:  GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error*/
  Type = ps2x.readType();                       /* Reading type of the PS2 Ccontroller */
  if (Type == 1) {                              /* Type 1 is Duel shock controller */
  }
}
void loop() {

  ps2x.read_gamepad(false, vibrate);   /* read controller and set large motor to spin at 'vibrate' speed */
  //   LY = ps2x.Analog(PSS_LY);          /* Reading Left stick Y axis */
  //   LX = ps2x.Analog(PSS_LX);          /* Reading Left stick X axis */
  //   RY = ps2x.Analog(PSS_RY);          /* Reading Right stick Y axis */
  //   RX = ps2x.Analog(PSS_RX);          /* Reading Right stick X axis */

  if (ps2x.NewButtonState()) {       /* will be TRUE if any button changes state  */
    if (ps2x.Button(PSB_START))     /* will be TRUE as long START button is pressed */
      y = y + 1;
    if (ps2x.Button(PSB_SELECT))            /* will be TRUE as long SELECT button is pressed */
      y = y + 2;
    if (ps2x.Button(PSB_PAD_UP))            /* will be TRUE as long as UP button is pressed */
      y = y + 3;
    if (ps2x.Button(PSB_PAD_RIGHT))         /* will be TRUE as long as UP button is pressed */
      y = y + 4;
    if (ps2x.Button(PSB_PAD_LEFT))          /* will be TRUE as long as LEFT button is pressed */
      y = y + 5;
    if (ps2x.Button(PSB_PAD_DOWN))          /* will be TRUE as long as DOWN button is pressed */
      y = y + 6;
    if (ps2x.Button(PSB_L1))                /* will be TRUE as long as L1 button is pressed */
      z = z + 1;
    if (ps2x.Button(PSB_R1))                /* will be TRUE as long as R1 button is pressed */
      z = z + 2;
    if (ps2x.Button(PSB_L2))                /* will be TRUE as long as L2 button is pressed */
      z = z + 3;
    if (ps2x.Button(PSB_R2))                /* will be TRUE as long as R2 button is pressed */
      z = z + 4;
    if (ps2x.Button(PSB_L3))                /* will be TRUE as long as L3 button is pressed */
      z = z + 5;
    if (ps2x.Button(PSB_R3))                /* will be TRUE as long as R3 button is pressed */
      z = z + 6;
    if (ps2x.Button(PSB_GREEN))             /* will be TRUE as long as GREEN/Triangle button is pressed */
      x = x + 1;
    if (ps2x.Button(PSB_BLUE))               /* will be TRUE as long as BLUE/CROSS/X button is pressed */
      x = x + 2;
    if (ps2x.Button(PSB_RED))              /* will be TRUE as long as RED/Circle button is pressed */
      x = x + 7;
    if (ps2x.Button(PSB_PINK))              /* will be TRUE as long as PINK/Squre button is pressed */
      x = x + 4;

    //tombol x = 6 dan 2
    //tombol kotak = 4
    //tombol segitiga = 8 dan 1
    //tombol bulat = 7 dan 9

    //atas = 9 dan 5
    //kiri = 7
    //bawah = 8 dan 13
    //kanan = 12 dan 6


    if ((x == 6) || (x == 2)) {
      Serial.println("Tombol X");
      nilai1++;
      if(nilai1 %2 == 0){
        digitalWrite(led1, HIGH);
        nilai1=0;
      }
      else{
        digitalWrite(led1,LOW);
      }

    }
    if (x == 4) {
      Serial.println("KOTAK");
      nilai2++;
      if(nilai2 %2 == 0){
        digitalWrite(led2, HIGH);
        nilai2=0;
      }
      else{
        digitalWrite(led2,LOW);
      }
    }
    if ((x == 8) || (x == 1)) {
      Serial.println("SEGITIGA");
      nilai3++;
      if(nilai3 %2 == 0){
        digitalWrite(led3, HIGH);
        nilai3=0;
      }
      else{
        digitalWrite(led3,LOW);
      }
    }
    if ((x == 7) || (x == 9)) {
      Serial.println("BULAT");
      nilai4++;
      if(nilai4 %2 == 0){
        digitalWrite(led4, HIGH);
        nilai4=0;
      }
      else{
        digitalWrite(led4,LOW);
      }
    }




    if (y == 3) {
      Serial.println("ATAS");
    }
    if (y == 5) {
      Serial.println("KIRI");
    }
    if ((y == 6) || (y == 12)) {
      Serial.println("BAWAH");
    }
    if (y == 4) {
      Serial.println("KANAN");
    }
    if (z == 1) {
      Serial.println("L1");
      motor4maju();
    }
    if (z == 2) {
      Serial.println("R1");
      motor5maju();
    }
    if (z == 3) {
      Serial.println("L2");
      motor4mundur();
    }
    if (z == 4) {
      Serial.println("R2");
      motor5mundur();
    }
    if (z == 5) {
      Serial.println("L3");
    }
    if (z == 6) {
      Serial.println("R3");
    }
    //Serial.print("X=");
    //Serial.println(x);
    //Serial.print("Y=");
    //Serial.println(y);
    //Serial.print("Z=");
    //Serial.println(z);

    delay(200);

    x = 0;
    y = 0;
    z = 0;
   

  }
  else;
  x = 0;
  y = 0;
  z = 0;
}

void motor4maju(){
  digitalWrite(motorpin[3], HIGH);
  digitalWrite(motorpin[4], LOW);
}

void motor4mundur(){
  digitalWrite(motorpin[3], LOW);
  digitalWrite(motorpin[4], HIGH);
}
void motor5maju(){
  digitalWrite(motorpin[5], HIGH);
  digitalWrite(motorpin[6], LOW);
}

void motor5mundur(){
  digitalWrite(motorpin[5], LOW);
  digitalWrite(motorpin[6], HIGH);
}

Komentar

Postingan populer dari blog ini

Mengirim Data Sensor dari NodeMcu ESP8266 ke Spreeadshets atau Google Sheets

HMI WEINTEK Connect Arduino Menggunakan protokol Modbus RTU