Joystick PS2 Controller dengan Arduino

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.

Hasil carian imej untuk ps2 controller arduino png

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:

Library PS2 By Bill Porter’s

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

Tinggalkan Jawapan

Masukkan butiran anda dibawah atau klik ikon untuk log masuk akaun:

WordPress.com Logo

Anda sedang menulis komen melalui akaun WordPress.com anda. Log Out /  Tukar )

Facebook photo

Anda sedang menulis komen melalui akaun Facebook anda. Log Out /  Tukar )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: