How to Interface PS2 Wireless Controller W/ Arduino

Introduction: How to Interface PS2 Wireless Controller W/ Arduino

About: ElectroPeak is your one-stop place to learn electronics and take your ideas into reality. We offer top-notch guides to show you how you can make your projects. We also offer high-quality products so you have a…

You can read this and other amazing tutorials on ElectroPeak's official website


Controllers have a long history in our lives; from controlling remote control cars and quadcopters to game consols and …, they all use wireless or wired controllers. In this tutorial, you will learn how to connect and use a PS2 game console controller with Arduino.

What You Will Learn:

  • PS2 controllers features
  • How to connect a PS2 controller to Arduino
  • How to use a PS2 controller with Arduino

Step 1: PS2 Controllers Features

Everyone knows Sony game consoles called PlayStation, and you have probably held it at least once. Sony game controllers have 12 analog keys sensitive to pressure, (4 keys for direction, 4 operation keys, Cross, Triangle, Circle, and Square, L1, L2, R1, and R2) and 5 digital keys (MODE, START, SELECT, R3, L3) and 2 analog joysticks.

There are 2 motors inside controllers that can make vibration because of their imbalance.

The wireless controller works with 2,4GHz frequency and it has a range of 10 meters. It also has an optical indicator for sending and receiving data. This controller needs only 3 AAA batteries for power (in some cases it needs just 2 AAA batteries).
Where you can use a PS2 controller:

  • Controlling wheeled robots and remote control cars
  • Controlling robotics arms
  • Controlling a camera
  • Controlling flying robots
  • ...

Step 2: How to Connect PS2 Controller to Arduino

PS2 controller receiver includes 9 pins:

  1. Data: master line for sending data to slave (MOSI)
  2. Command: slave line for sending data to master (MISO)
  3. Vibration: vibration motors supply; 7.2 volts to 9 volts
  4. Ground: circuits ground
  5. VCC: circuits supply; 3.3 volts
  6. Attention: CS or Chip Select pin for calling slave and preparing the connection
  7. Clock: equivalent to SCK pin for clock
  8. No Connection: useless
  9. Acknowledge: acknowledge signal from the controller to PS2 receiver

Step 3: Interfacing PS2 Controller and Arduino

In order to use a PS2 controller, you need to introduce the controllers key to Arduino. Then choose a proper function for each key according to your project.

Step 4: Circuit

Step 5: Code

You need to use the PS2X library for this code.

After adding the library to Arduino, you can open PS2X library Example or Copy the attached code and upload it on your board. You can see the results in the serial monitor window by pressing different keys.

The most practical functions in this library are:

ps2x.config_gamepad(clock, command, attention, data, Pressures? Rumble?); function sets the controller pin and sensitivity to pressure and vibration of the motors. If you want keys insensitive to pressure, or motors don’t have vibration, set Pressures, and Rumble as false. This function returns value for error.

ready(); function determine the detected controller type. 0 means the controller is not detected correctly, 1 means DualShock controller detection, and 2 means GuitarHero controller detection.

read_gamepad(boolean motor1, byte motor2); function start reading the status of the keys when the state of the vibration of the motor is determined. (motor 2 is the bigger one. )

Button (but type); function returns 1 when the specific key in function argument is pressed. In DualShock controller keys are named as the attached table.

Analog (but type); function returns analog keys value, then you can decide for your operation accordingly.

Step 6: What's Next?

  • Try to build a remote control car with 2 wheels that moves to a different direction by pressing direction keys. And the cars speed change with the amount of pressure on the key. The car beeps by pressing a square key, and its lights turn on with pressing the cross key.

Step 7: Buy 2.4GHz Wireless Shock Game Controller

Step 8: LIke Us on FaceBook

If you find this tutorial helpful and interesting please like us on facebook:

Be the First to Share


    • CNC and 3D Printing Contest

      CNC and 3D Printing Contest
    • Lamps Challenge

      Lamps Challenge
    • Rice & Grains Challenge

      Rice & Grains Challenge



    Question 3 years ago

    what are some ways I can alter the code to control servos or motors, etc.? I'm trying to hook up an LED to pin 8, starting simple. The controller is interfaced, but i can't do much more with it without some example code to get me started. Thanks in advance!


    Reply 3 years ago

    We're glad that you decided to use this tutorial.
    We tried to cover everything here, so, please make sure you read the full article.
    Please check if you can see the joystick information in the Serial Window. If not, please inform us to find a solution.
    Thank you


    Reply 5 weeks ago

    Joystick reading code is not there.
    Instead when L1 or R1 pressed it prints values as

    // Serial.print("Stick Values:");
    // Serial.print(ps2x.Analog(PSS_LY), DEC); //Left stick, Y axis. Other options: LX, RY, RX
    // Serial.print(",");
    // Serial.print(ps2x.Analog(PSS_LX), DEC);
    // Serial.print(",");
    // Serial.print(ps2x.Analog(PSS_RY), DEC);
    // Serial.print(",");
    // Serial.println(ps2x.Analog(PSS_RX), DEC);
    // }


    1 year ago

    Really nice tutorial! Can the wireless connection range extend? If so what can I do more about it. Looking forward for your reply