Dalam tutorial ini, MatGyver akan tunjukkan Step-by-Step bagaimana membuat DIY PS2 Controller dengan menggunakan Arduino UNO.
Sebelum kita mulakan Tutorial, kami akan terangkan Perkara-perkara Penting yang perlu kita tahu berkenaan PS2 Controller.
PS2 Controller adalah kegunaan utama untuk PlayStation.Tetapi boleh digunakan untuk pelbagai lagi projek-projek seperti mengawal pergerakan kenderaan beroda atau kenderaan yang dijejaki. Mengawal lengan robot. Berinteraksi dengan komputer. Mengawal gunung dan kamera kecondongan. Sistem kawalan radio DIY dengan menggunakan modul bluetooth, atau modul radio untuk menghantar arahan dari pengawal Playstation 2 kepada Arduino lain yang mengawal kenderaan.

Fungsi PS2 Controller
Bagi mengaktifkan Fungsi PS2 Controller pada Arduino UNO, anda akan perlukan Library PS2X_lib.h yang akan GENERATE-kan signal Sebuah PS2 dan di hantar ke PC melalui USB.
Langkah #1: Sambungan Litar
Komponen-komponen yang diperlukan :
- Arduino UNO
- Sony PS2 wireless controller
Sambungkan litar anda seperti rajah di bawah:

INSTALL LIBRARY PS2X_lib.h
Library yang akan digunakan dalam tutorial ini, adalah library oleh Tuan Bill Porter’s dari GitHub.
Library ini mempunyai pelbagai folder, dan kami telah permudahkan dalam link berikut untuk di Download:
atau, anda boleh terus ke link GitHub-nya adalah dibawah:
https://github.com/madsci1016/Arduino-PS2X

Setelah Download Library Joystick.h dalam bentuk .ZIP file,
NAVIGASI KE:
Sketch > Include Library > Add.ZIP Library
untuk install Library tersebut.
MENGGUNAKAN LIBRARY PS2X_lib.h
Rujuk rajah berikut sebagai panduan untuk langkah-langkah seterusnya.

DEFINING AREA
Includekan PS2X_lib.h dan juga cipta objek PS2.
PENTING 1# Pin SPI pada setiap board adalah berbeza
Tetapkan pin SPI yang akan digunakan disini
//Includekan Library PS2X_lib.h #include <PS2X_lib.h> //for v1.6 //namakan pin yang digunakan //Pin SPI pada setiap Arduino adalah berbeza //Pin di bawah ada untuk Arduino Uno #define PS2_DAT 12 //MISO #define PS2_CMD 11 //MOSI #define PS2_SEL 10 //SS #define PS2_CLK 13 //SCK #define pressures false #define rumble false //Cipta Objek PS2 untuk digunakan dalam coding PS2X ps2x; //variable yang digunakan byte vibrate = 0;
VOID SETUP
void setup(){ Serial.begin(9600); delay(300); //tambah sedikit delay untuk memberikan mod ps2 wireless untuk start beberapa masa untuk memulakan, sebelum mengkonfigurasinya //setup pins and settings: GamePad(clock, command, attention, data, Pressures?, Rumble?) semak kesalahan ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, pressures, rumble); }//end void setup
VOID LOOP
Rujuk Syntax-syntax di bawah untuk digunakan dalam Void Loop.
MENU PS2 GAMEPAD

void loop() { /***PENTING****/ //Ini adalah syntax untuk membaca value PS2 button ps2x.read_gamepad(false, vibrate); if(ps2x.Button(PSB_START)== 1){ //jika button ditekan value pada button akan menjadi 1 //boleh masukkan apa-apa yang ingin ada ingin gerakkan disini contohnya "Servo" Serial.println("START"); } if(ps2x.Button(PSB_SELECT)== 1){ //jika button ditekan value pada button akan menjadi 1 //boleh masukkan apa-apa yang ingin ada ingin gerakkan disini contohnya "Servo" Serial.println("SELECT"); } }
STICK_AXIS PS2 GAMEPAD

void loop() { /***PENTING****/ //Ini adalah syntax untuk membaca value PS2 button ps2x.read_gamepad(false, vibrate); /***STICK KANAN****/ if(ps2x.Analog(PSS_RY) > 130){ //Range value pada stick adalah 0~255 //Kedudukan stick pada value 127,anda boleh tukarkan value yang anda mahu Serial.println("KE BAWAH"); } if(ps2x.Analog(PSS_RY) < 125 ){ //Range value pada stick adalah 0~255 //Kedudukan stick pada value 127,anda boleh tukarkan value yang anda mahu Serial.println("KE ATAS"); } if(ps2x.Analog(PSS_RX) > 130){ //Range value pada stick adalah 0~255 //Kedudukan stick pada value 127 Serial.println("KE KANAN"); } if(ps2x.Analog(PSS_RX) < 125 ){ //Range value pada stick adalah 0~255 //Kedudukan stick pada value 127,anda boleh tukarkan value yang anda mahu Serial.println("KE KIRI"); } //Button Stick Kanan if(ps2x.Button(PSB_R3) == 1 ){ //jika button ditekan value pada button akan menjadi 1 //boleh masukkan apa-apa yang ingin ada ingin gerakkan disini contohnya "Servo" Serial.println("Button Stick kanan"); } /***STICK KIRI****/ if(ps2x.Analog(PSS_LY) > 130){ //Range value pada stick adalah 0~255 //Kedudukan stick pada value 127,anda boleh tukarkan value yang anda mahu Serial.println("KE BAWAH"); } if(ps2x.Analog(PSS_LY) < 125 ){ //Range value pada stick adalah 0~255 //Kedudukan stick pada value 127,anda boleh tukarkan value yang anda mahu Serial.println("KE ATAS"); } if(ps2x.Analog(PSS_LX) > 130 ){ //Range value pada stick adalah 0~255 //Kedudukan stick pada value 127,anda boleh tukarkan value yang anda mahu Serial.println("KE KANAN"); } if(ps2x.Analog(PSS_LX) < 125){ //Range value pada stick adalah 0~255 //Kedudukan stick pada value 127,anda boleh tukarkan value yang anda mahu Serial.println("KE KIRI"); } //Button Stick Kiri if(ps2x.Button(PSB_L3) == 1 ){ //jika button ditekan value pada button akan menjadi 1 //boleh masukkan apa-apa yang ingin ada ingin gerakkan disini contohnya "Servo" Serial.println("Button Stick kiri"); } }//END VOID LOOP
Range value pada stick adalah 0~255 Kedudukan stick pada value 127,anda boleh tukarkan value yang anda mahu
Stick_axis mewakili Stick dan arah yang hendak dibaca, seperti berikut:
PSS_LY = y-kedudukan stick ke kiri
PSS_LX = x-kedudukan stick ke kanan
PSS_RY = y-kedudukan stick ke kiri
PSS_RX = x-kedudukan stick ke kanan
TRIGGER PS2 GAMEPAD

void loop() { /***PENTING****/ //Ini adalah syntax untuk membaca value PS2 button ps2x.read_gamepad(false, vibrate); if(ps2x.Button(PSB_TRIANGLE) == 1){ //jika button ditekan value pada button akan menjadi 1 //boleh masukkan apa-apa yang ingin ada ingin gerakkan disini contohnya "Servo" Serial.println("Button Tiga Segi"); } if(ps2x.Button(PSB_CIRCLE) == 1 ){ //jika button ditekan value pada button akan menjadi 1 //boleh masukkan apa-apa yang ingin ada ingin gerakkan disini contohnya "Servo" Serial.println("Button Bulat"); } if(ps2x.Button(PSB_CROSS) == 1 ){ //jika button ditekan value pada button akan menjadi 1 //boleh masukkan apa-apa yang ingin ada ingin gerakkan disini contohnya "Servo" Serial.println("Button Pangkah"); } if(ps2x.Button(PSB_SQUARE) == 1 ){ //jika button ditekan value pada button akan menjadi 1 //boleh masukkan apa-apa yang ingin ada ingin gerakkan disini contohnya "Servo" Serial.println("Button Petak"); } }//END VOID LOOP
BUTTON ARAH PS2 GAMEPAD

void loop() { /***PENTING****/ //Ini adalah syntax untuk membaca value PS2 button ps2x.read_gamepad(false, vibrate); if(ps2x.Button(PSB_PAD_UP) == 1 ) { //jika button ditekan value pada button akan menjadi 1 //boleh masukkan apa-apa yang ingin ada ingin gerakkan disini contohnya "Servo" Serial.println("Ke Atas"); } if(ps2x.Button(PSB_PAD_RIGHT) == 1 ){ //jika button ditekan value pada button akan menjadi 1 //boleh masukkan apa-apa yang ingin ada ingin gerakkan disini contohnya "Servo" Serial.println("Ke Kanan "); } if(ps2x.Button(PSB_PAD_LEFT) == 1 ){ //jika button ditekan value pada button akan menjadi 1 //boleh masukkan apa-apa yang ingin ada ingin gerakkan disini contohnya "Servo" Serial.println("Ke Kiri"); } if(ps2x.Button(PSB_PAD_DOWN) == 1 ){ //jika button ditekan value pada button akan menjadi 1 //boleh masukkan apa-apa yang ingin ada ingin gerakkan disini contohnya "Servo" Serial.println("Ke Bawah"); } }//END VOID LOOP
BUTTON PEMICU PS2 GAMEPAD

void loop() { /***PENTING****/ //Ini adalah syntax untuk membaca value PS2 button ps2x.read_gamepad(false, vibrate); if(ps2x.Button(PSB_L1) == 1 ){ //jika button ditekan value pada button akan menjadi 1 //boleh masukkan apa-apa yang ingin ada ingin gerakkan disini contohnya "Servo" Serial.println("Button Kiri 1"); } if(ps2x.Button(PSB_R1) == 1 ){ //jika button ditekan value pada button akan menjadi 1 //boleh masukkan apa-apa yang ingin ada ingin gerakkan disini contohnya "Servo" Serial.println("Button Kanan 1"); } if(ps2x.Button(PSB_L2) == 1 ){ //jika button ditekan value pada button akan menjadi 1 //boleh masukkan apa-apa yang ingin ada ingin gerakkan disini contohnya "Servo" Serial.println("Button Kiri 2"); } if(ps2x.Button(PSB_R2) == 1 ){ //jika button ditekan value pada button akan menjadi 1 //boleh masukkan apa-apa yang ingin ada ingin gerakkan disini contohnya "Servo" Serial.println("Button Kanan 2"); } }//END VOID LOOP