Wireless PlayStation 2 Controller dengan Arduino Uno

Sudah lama sebenarnya saya ingin mempunyai cara untuk mengendalikan Arduino, terutama yang sudah digunakan untuk aplikasi robotik, secara remote (dari jarak jauh). Ada banyak cara yang bisa dilakukan, tapi rata-rata masih lumayan kompleks dan belum cukup praktis untuk dicoba. Alangkah lebih bagusnya lagi kalau bisa mengendalikan secara wireless, wah itu akan banyak menghasilkan ide-ide proyek Arduino yang kreatif.

Nah, secara tidak sengaja ketemu artikel ini, PlayStation 2 Controller Arduino Library v1.0, buatan Bill Porter. Disitu dijelaskan tentang Library Arduino yang dibuat untuk mengendalikan Arduino menggunakan PlayStation 2 Controller. Artikel di sana menggunakan PlayStation 2 Controller yang menggunakan kabel. Hmm…kalau mau pakai yang wireless kira-kira bisa gak ya? Ya coba aja deh…

Akhirnya dibeli tuh ‘2.4GHz Wireless Magic Light-Tube Dual Shock 2 Controller’ seharga Rp. 150.000,-. Gambar-nya seperti di bawah ini.

PS2 Wireless Controller dalam kemasan

PS2 Wireless Controller dan Wireless Receiver-nya

Ok, Wireless Controller sudah ada, sekarang download Library Arduino-nya, link-nya bisa dilihat di dalam artikel di atas, atau di sini. Ekstrak file tersebut dan copy folder PS2X_lib ke dalam folder libraries yang ada di folder Software Arduino (saya kebetulan pakai software IDE Arduino versi 22). Kalau anda sudah membuka IDE Arduino, tutup dan buka kembali agar library yang baru bisa terdaftar.

Siapkan board Arduino anda, saya kebetulan menggunakan Arduino Uno, dan pasang kabel USB-nya ke Arduino dan komputer anda. Buka file contoh program yang sudah disertakan di dalam folder PS2X_lib tersebut, file-nya: PS2X_Example.pde. Jalankan Verify/Compile (Ctrl+R) untuk memastikan tidak ada error dan library yang tadi di-copy sudah terdaftar. Kemudian lakukan Upload to I/O board (Ctrl+U). Apabila sketch sudah diupload tanpa error, lepaskan kabel USB dari board Arduino anda, saatnya kita menghubungkan PlayStation 2 Wireless Receiver dengan Arduino.

Kode program yang terdapat pada file contoh dapat dilihat di bawah ini.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#include <PS2X_lib.h>  //for v1.6

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 conect the controller,
//or call config_gamepad(pins) again after connecting the controller.
int error = 0;
byte type = 0;
byte vibrate = 0;

void setup(){
 Serial.begin(57600);

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

 error = ps2x.config_gamepad(13,11,10,12, true, true);   //setup pins and settings:  GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error

 if(error == 0){
   Serial.println("Found Controller, configured successful");
   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("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. ");

   //Serial.print(ps2x.Analog(1), HEX);

   type = ps2x.readType();
     switch(type) {
       case 0:
        Serial.println("Unknown Controller type");
       break;
       case 1:
        Serial.println("DualShock Controller Found");
       break;
       case 2:
         Serial.println("GuitarHero Controller Found");
       break;
     }

}

void loop(){
   /* You must Read Gamepad to get new values
   Read GamePad 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

   ps2x.read_gamepad();          //read controller

   if(ps2x.ButtonPressed(GREEN_FRET))
     Serial.println("Green Fret Pressed");
   if(ps2x.ButtonPressed(RED_FRET))
     Serial.println("Red Fret Pressed");
   if(ps2x.ButtonPressed(YELLOW_FRET))
     Serial.println("Yellow Fret Pressed");
   if(ps2x.ButtonPressed(BLUE_FRET))
     Serial.println("Blue Fret Pressed");
   if(ps2x.ButtonPressed(ORANGE_FRET))
     Serial.println("Orange Fret Pressed");

    if(ps2x.ButtonPressed(STAR_POWER))
     Serial.println("Star Power Command");

    if(ps2x.Button(UP_STRUM))          //will be TRUE as long as button is pressed
     Serial.println("Up Strum");
    if(ps2x.Button(DOWN_STRUM))
     Serial.println("DOWN Strum");

    if(ps2x.Button(PSB_START))                   //will be TRUE as long as button is pressed
         Serial.println("Start is being held");
    if(ps2x.Button(PSB_SELECT))
         Serial.println("Select is being held");

    if(ps2x.Button(ORANGE_FRET)) // print stick value IF TRUE
    {
        Serial.print("Wammy Bar Position:");
        Serial.println(ps2x.Analog(WHAMMY_BAR), DEC);
    }
 }

 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");
    if(ps2x.Button(PSB_SELECT))
         Serial.println("Select is being held");

     if(ps2x.Button(PSB_PAD_UP)) {         //will be TRUE as long as button is pressed
       Serial.print("Up held this hard: ");
       Serial.println(ps2x.Analog(PSAB_PAD_UP), DEC);
      }
      if(ps2x.Button(PSB_PAD_RIGHT)){
       Serial.print("Right held this hard: ");
        Serial.println(ps2x.Analog(PSAB_PAD_RIGHT), DEC);
      }
      if(ps2x.Button(PSB_PAD_LEFT)){
       Serial.print("LEFT held this hard: ");
        Serial.println(ps2x.Analog(PSAB_PAD_LEFT), DEC);
      }
      if(ps2x.Button(PSB_PAD_DOWN)){
       Serial.print("DOWN held this hard: ");
     Serial.println(ps2x.Analog(PSAB_PAD_DOWN), DEC);
      }  

      vibrate = ps2x.Analog(PSAB_BLUE);        //this will set the large motor vibrate speed based on
                                              //how hard you press the blue (X) button    

    if (ps2x.NewButtonState())               //will be TRUE if any button changes state (on to off, or off to on)
    {

        if(ps2x.Button(PSB_L3))
         Serial.println("L3 pressed");
        if(ps2x.Button(PSB_R3))
         Serial.println("R3 pressed");
        if(ps2x.Button(PSB_L2))
         Serial.println("L2 pressed");
        if(ps2x.Button(PSB_R2))
         Serial.println("R2 pressed");
        if(ps2x.Button(PSB_GREEN))
         Serial.println("Triangle pressed");

    }  

    if(ps2x.ButtonPressed(PSB_RED))             //will be TRUE if button was JUST pressed
         Serial.println("Circle just pressed");

    if(ps2x.ButtonReleased(PSB_PINK))             //will be TRUE if button was JUST released
         Serial.println("Square just released");    

    if(ps2x.NewButtonState(PSB_BLUE))            //will be TRUE if button was JUST pressed OR released
         Serial.println("X just changed");    

    if(ps2x.Button(PSB_L1) || ps2x.Button(PSB_R1)) // print stick values if either is TRUE
    {
        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);
    }

 }

 delay(50);

}

Di dalam artikel Bill Porter terdapat gambar yang menjelaskan koneksi kabel yang ada di connector-nya PlayStation 2. Gambar tersebut diambil dari artikel yang dibuat oleh Curios Inventor tentang Interfacing a PS2 (PlayStation 2) Controller. Koneksi kabel pada konektor tersebut dapat dilihat pada gambar di bawah ini.

PlayStation 2 Connector Wiring

Jadi ada 9 pin di dalam konektor PS2 Controller, yaitu:

  1. Pin Data
  2. Pin Command
  3. Pin Vibration Motor Power
  4. Pin Ground
  5. Pin Power 3.3V
  6. Pin Attention
  7. Pin Clock
  8. Pin Unknown
  9. Pin Acknowledge

Tetapi dari 9 pin tersebut, kita hanya akan memakai 6 buah saja, yaitu Pin 1, 2, 4, 5, 6 dan 7. Sesuai dengan library yang sudah dibuat oleh Bill Porter, koneksi pin-pin tersebut dengan board Arduino  (dapat dilihat pada kode program, pada baris ke 17) adalah sebagai berikut:

  1. Pin 1 (Data) –> Pin Digital 12 Arduino
  2. Pin 2 (Command) –> Pin Digital 11 Arduino
  3. Pin 4 (Ground) –> Pin Ground Arduino
  4. Pin 5 (Power 3.3V) –> Pin 3.3V Arduino
  5. Pin 6 (Attention) –> Pin Digital 10 Arduino
  6. Pin 7 (Clock) –> Pin Digital 13 Arduino

Untuk menghubungkan konektor PS2 dengan Arduino, anda membutuhkan jumper wires 1 pin dual-female, seperti yang ada di sini, dan jumper wires, seperti yang ada di sini. Berikut gambar jumper wires yang digunakan tersebut.

Jumper Wires 1 Pin Dual-Female

Jumper Wires

Pasang kabel jumper wires 1 pin pada konektor Wireless Receiver, hasilnya seperti pada gambar berikut.

Konektor wireless sudah dipasangkan jumper wires 1 pin

Biar gampang, kita pasangkan label di tiap-tiap kabel jumper, hasilnya seperti di bawah ini.

Konektor wireless dipasang jumper wires 1 pin dengan label

Kemudian kita hubungkan jumper wires tersebut dengan board Arduino (lihat kembali koneksi 6 pin konektor dengan board Arduino di bagian atas) , gunakan jumper wires yang dual-male. Hasilnya dapat dilihat pada gambar ini.

Konektor Wireless terhubung dengan Arduino Uno

Ok, setelah koneksi sudah terpasang, sekarang kita siap untuk mencoba koneksi wireless dengan PlayStation 2 Controller ini. Hubungkan kabel USB dari komputer ke boar Arduino. Buka IDE Arduino, siapkan Serial Monitor ( Ctrl+Shift+M) dan atur baud rate-nya pada posisi 57600. Kalau semua berjalan lancar, maka Serial Monitor akan menampilkan output dari tombol yang kita tekan pada Controller PS2. Tampilan pada Serial Monitor dapat dilihat pada gambar di bawah ini.

PS2 Wireless Controller Serial Monitor Output

Wow, kayaknya gampang ya…hmm gimana kalau kita coba untuk menggerakkan Servo. Ok, kode program di atas kita tambahkan beberapa baris kode untuk menggerakkan servo, kode lengkap dengan tambahannya dapat dilihat di bawah ini.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
#include <PS2X_lib.h>  //for v1.6
#include <Servo.h>

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 conect the controller,
//or call config_gamepad(pins) again after connecting the controller.
int error = 0;
byte type = 0;
byte vibrate = 0;

Servo myservo;
int pos = 90;

void setup(){
 Serial.begin(57600);

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

 error = ps2x.config_gamepad(13,11,10,12, true, true);   //setup pins and settings:  GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error

 if(error == 0){
   Serial.println("Found Controller, configured successful");
   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("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. ");

   //Serial.print(ps2x.Analog(1), HEX);

   type = ps2x.readType();
     switch(type) {
       case 0:
        Serial.println("Unknown Controller type");
       break;
       case 1:
        Serial.println("DualShock Controller Found");
       break;
       case 2:
         Serial.println("GuitarHero Controller Found");
       break;
     }

  myservo.attach(9);
  myservo.write(pos);
}

void loop(){
   /* You must Read Gamepad to get new values
   Read GamePad 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

   ps2x.read_gamepad();          //read controller

   if(ps2x.ButtonPressed(GREEN_FRET))
     Serial.println("Green Fret Pressed");
   if(ps2x.ButtonPressed(RED_FRET))
     Serial.println("Red Fret Pressed");
   if(ps2x.ButtonPressed(YELLOW_FRET))
     Serial.println("Yellow Fret Pressed");
   if(ps2x.ButtonPressed(BLUE_FRET))
     Serial.println("Blue Fret Pressed");
   if(ps2x.ButtonPressed(ORANGE_FRET))
     Serial.println("Orange Fret Pressed");

    if(ps2x.ButtonPressed(STAR_POWER))
     Serial.println("Star Power Command");

    if(ps2x.Button(UP_STRUM))          //will be TRUE as long as button is pressed
     Serial.println("Up Strum");
    if(ps2x.Button(DOWN_STRUM))
     Serial.println("DOWN Strum");

    if(ps2x.Button(PSB_START))                   //will be TRUE as long as button is pressed
         Serial.println("Start is being held");
    if(ps2x.Button(PSB_SELECT))
         Serial.println("Select is being held");

    if(ps2x.Button(ORANGE_FRET)) // print stick value IF TRUE
    {
        Serial.print("Wammy Bar Position:");
        Serial.println(ps2x.Analog(WHAMMY_BAR), DEC);
    }
 }

 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");
    if(ps2x.Button(PSB_SELECT))
         Serial.println("Select is being held");

     if(ps2x.Button(PSB_PAD_UP)) {         //will be TRUE as long as button is pressed
       Serial.print("Up held this hard: ");
       Serial.println(ps2x.Analog(PSAB_PAD_UP), DEC);
      }
      if(ps2x.Button(PSB_PAD_RIGHT)){
       Serial.print("Right held this hard: ");
        Serial.println(ps2x.Analog(PSAB_PAD_RIGHT), DEC);
      }
      if(ps2x.Button(PSB_PAD_LEFT)){
       Serial.print("LEFT held this hard: ");
        Serial.println(ps2x.Analog(PSAB_PAD_LEFT), DEC);
      }
      if(ps2x.Button(PSB_PAD_DOWN)){
       Serial.print("DOWN held this hard: ");
     Serial.println(ps2x.Analog(PSAB_PAD_DOWN), DEC);
      }  

      vibrate = ps2x.Analog(PSAB_BLUE);        //this will set the large motor vibrate speed based on
                                              //how hard you press the blue (X) button    

    if (ps2x.NewButtonState())               //will be TRUE if any button changes state (on to off, or off to on)
    {

        if(ps2x.Button(PSB_L3))
         Serial.println("L3 pressed");
        if(ps2x.Button(PSB_R3))
         Serial.println("R3 pressed");
        if(ps2x.Button(PSB_L2))
         Serial.println("L2 pressed");
        if(ps2x.Button(PSB_R2))
         Serial.println("R2 pressed");
        if(ps2x.Button(PSB_GREEN))
         Serial.println("Triangle pressed");

    }  

    if(ps2x.ButtonPressed(PSB_RED))             //will be TRUE if button was JUST pressed
         Serial.println("Circle just pressed");

    if(ps2x.ButtonReleased(PSB_PINK))             //will be TRUE if button was JUST released
         Serial.println("Square just released");    

    if(ps2x.NewButtonState(PSB_BLUE))            //will be TRUE if button was JUST pressed OR released
         Serial.println("X just changed");    

    if(ps2x.Button(PSB_L1) || ps2x.Button(PSB_R1)) // print stick values if either is TRUE
    {
        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);
    }

    if(ps2x.Analog(PSS_RX) != 128) //if right analog stick is moved on X axis right-left
    {
      Serial.println("Right Stick Moves!");
      if(ps2x.Analog(PSS_RX) > 128)
      {
        myservo.write( map(ps2x.Analog(PSS_RX), 129,255,91,180));
        delay(15);
      }
      if(ps2x.Analog(PSS_RX) < 128)
      {
        myservo.write( map(ps2x.Analog(PSS_RX), 0,127,0,89));
        delay(15);
      }
    }
    if(ps2x.Analog(PSS_RX) == 128) //if right analog stick is center
    {
        Serial.println("Servo Centered!");
        myservo.write(90);
        delay(15);
    }

 }

 delay(50);

}

Ok, kode tambahan untuk menggerakkan servo dapat dilihat pada baris 2, 13, 14, 54, 55 dan 171-190. Hasil dari kode program tersebut, servo akan bergerak ke kanan atau ke kiri mengikuti gerakan Stik Analog bagian kanan pada sumbu X. Hehehe…makin seru nih, tertarik untuk mencoba?

Baiklah, itu tadi tutorial tentang interfacing PlayStation 2 Wireless Controller dengan Arduino Uno. Semoga dapat membantu teman-teman yang memerlukannya. Silahkan berkreasi untuk membuat karya yang makin unik!

 

You may also like...

76 Responses

  1. aput says:

    wah mantep artikelnya pak, nambah ilmu saya ini, saya request pak Zerfani buat artikel koneksi bluetooth atau ko dgn koneksi Ultrasonic Module SDM-IO Range Sensor dgn arduino dunk pak, saya sempat beli sensor ultrasonic itu di famosa dan sampai skrg belum dpt jalan, mgkn msh ad yg kurang library nya. terima kasih

    • Zerfani Yulias says:

      Mas Aput, thanks buat comment-nya 🙂
      Kebetulan caranya ternyata gampang, makanya sekalian aja dibikinin tutorial-nya. Ok, tutorial selanjutnya menyusul, bisa yg bluetooth, ultrasonic atau yang lain. Ditunggu aja 😀

  2. falah says:

    terimakasih Pak, tutorialnya sangat jelas bagi yang masih pemula seperti saya.

    • Zerfani Yulias says:

      Sip 🙂 memang itu tujuannya biar makin banyak yang bisa mengaplikasi Arduino dengan berbagai hardware atau device yang lain…silahkan berkreasi dengan ide-ide yang lebih kreatif lagi!

  3. AYI says:

    MantAAAAAAAaAaaaaaaAAAAAAaPpPPpPpPpP…..
    Komplit bener… bagus nie untuk belajar..
    jdi tambah bikin menarik aja nie Arduino Uno…
    ditunggu tutorial yg lainnya..

  4. Hotma Nainggolan says:

    Om…saya da coba cara di atas tapi gak berhasil sempurna,
    disarankan memakai koneksi pin seperti berikut :
    pada baris ini :
    error = ps2x.config_gamepad(13,11,10,12, true, true);
    diganti dengan :
    error = ps2x.config_gamepad(2,4,3,5);

    Saya memakai arduino Duimilanove

    • Zerfani Yulias says:

      Bang Hotma, setting yang itu memang bisa dirubah sesuai kebutuhan. Saya coba di Uno dengan konfigurasi original, semua jalan bagus. Mungkin ada kombinasi board Arduino dan Playstation 2 Controller tertentu yang mesti merubah konfigurasi pin tersebut. Sip, yang penting sudah jalan dan malah menemukan konfigurasi yang pas untuk Duemilanove 🙂

  5. mocha says:

    Maaf komunikasi arduino dengan stick wireless di serial monitor gak muncul gak ada komnikasi…
    mohon solusinya ?

    • Zerfani Yulias says:

      Halo Mas Mocha, boleh tahu error yang muncul di Serial Monitor-nya apa? Sudah menyesuaikan baud rate di Serial Monitor jadi 57600?

  6. susiloharjo says:

    Mas Zerfani saya sudah beli Joysticknya dan saya ikuti semua petunjuknya kok joysticknya tetap g kebaca ya? mohon saran saya pake dfrobot arduino mega

    • Zerfani Yulias says:

      Mas Susilo, saya belum pernah coba dengan board Mega sih. Nanti akan saya coba dan hasilnya akan saya informasikan lagi.

  7. robin jaya says:

    mas kalo pake stik PS yang gak wireless bisa gak ya…thanks

    • Zerfani Yulias says:

      Bisa kok kalau pakai Stik yang kabel. Kan pin di konektornya sama persis urutan dan fungsinya.

  8. ari says:

    mas kalau pada arduino mega konfigurasi pinnya gimana? sembarang aja bisa?

  9. hery dino says:

    kalo pake USB joystick bisa ga pa???

    • Zerfani Yulias says:

      Kalau library yang buatan Bill Porter ini khusus untuk PlayStation Controller. Untuk USB Joystick bisa coba cek di Project-nya Arduino USB Host Shield, di link ini. Link langsung untuk USB Joystick itu yang ini.

      Board USB Host Shield-nya sendiri bisa didapat di sini.

  10. Rico says:

    mas, mau tanya.. kalo pas verify error tulisannya ‘PS2X does not name a type’ itu salahnya dimana ya? padahal sudah saya copy.

    • Admin says:

      Sudah copy folder library PS2X ke dalam folder library di dalam folder Arduino? Error yang muncul itu karena tidak menemukan file library-nya.

  11. oki says:

    mas sya bigung setelah sya progam arduino sya sesuai petunjuk,, dan tidak ada kesalahan tetapi di serial monitor nya..hanya tampil yg sesuia petunjuk dengan baud 57600,,,
    yang tampil seperti ini mas
    TROUBLESHOOTING DAN wiring, NOT CONECTOR

    MOHON SOLUSI NYA MAS TRIMA KASIH

  12. Arif MauLana Amri says:

    Pak,

    misaLnya ingin menyaLakan sebuah LED dengan menggunakan TomboL X,

    namun LED hanya menyaLa saaT TomboL X diTekan,

    iTu bagaimana ya Pak programnya

    Trima ksih sbLumnya Pak

  13. Arianto says:

    Pak beli stik ps2 dimana ya pak? di famosa jual tidak?

  14. ade says:

    mas, kalo pake bahasa c punya tutorialnya mas, mohon bantuannya, saya pake 8535, terimakasih

  15. gibran says:

    beli sticknya dimana ya ?….

  16. mas Salam kenal ya?
    Mas saya mau menanyakan apakah bisa rc receiver digabungkan denga arduino uno?
    mohon penjelasannya mas?
    terima kasih….

  17. RIcky FM says:

    pak saya sudah coba pakai stik ps2 kabel, semua stepnya udah diikutin, di coding ga ada masalah, tapi d monitor ada tulisan seperti ini pak.
    No controller found, check wiring, see readme.txt to enable debug. visit http://www.billporter.info for troubleshooting tips
    Unknown Controller type

    mohon bantuannya pak.
    terima kasih:)

    • Zerfani Yulias says:

      Kadang hal seperti ini bisa muncul kalau koneksi kabel jumper ke pin konektor PS2 agak longgar. Coba dikencangkan dan dicoba lagi.
      Kalau masih juga tidak bisa, kemungkinan Controller PS2 yang digunakan tidak cocok digunakan dengan Arduino. Kalau ada controller yang lain bisa dicoba lagi.

      • Ricky FM says:

        terima kasih pak, sudah bisa stik wirelessnya, tapi ada kendala saat menggerakkan servonya, misalkan saat analog kanan (PSS_RX)berada pada posisi > 128, servo bergerak tapi saat posisi = 128 dia kembali k posisi awal, saya pgnnya servo bisa diam pak di derajat tertentu tanpa harus kembali ke posisi awal.

        terima kasih banyak sebelumnya 🙂

        • Zerfani Yulias says:

          Mulai di baris ke 185 ada kode program ini:
          if(ps2x.Analog(PSS_RX) == 128) //if right analog stick is center
          {
          Serial.println(“Servo Centered!”);
          myservo.write(90);
          delay(15);
          }

          Silahkan di-comment kalau memang tidak mau servo kembali ke posisi tengah.
          Intinya sih silahkan bereksperiman dengan contoh program yang ada ini. Rubah program dan lihat hasilnya, kalau belum sesuai silahkan dirubah lagi sampai sesuai kebutuhan.

        • EEN SUTRA says:

          permisi mas rizky FM itu kesalahan di atas gimana cara mengatasinya? harus ganti stik ps nya ataw ap y

  18. setiyo wahyono says:

    selamat pagi pak, servo nya di sambung ke port berapa yaa

    • Zerfani Yulias says:

      Di baris ke 54 terlihat kode program ini: myservo.attach(9);
      Itu artinya servo dihubungkan dengan pin digital 9.

  19. azhar says:

    terima kasih di atas perkongsian. soalan saya bagaimana nak selesaikan masalah No controller found? mohon pencerahan.

    • Zerfani Yulias says:

      Dengan asumsi semua step sudah dilakukan dengan benar dan tidak ada masalah pada kabel jumper yang digunakan, maka kalau muncul error “No controller found” kemungkinan memang controller yang digunakan tidak compatible.

      • jufry says:

        sangat membantu pak…
        klu boleh nanya,,saya kan pakai Arm Cortex M4 Discovery ya..gmna pak?/ saya pengen read adc analog aja pada stick ps2 wireless ini,,mohon pencerahannya pak,,trims

        • Zerfani Yulias says:

          Saya tidak familiar dengan ARM Cortex M4 Discovery yang anda gunakan. Sepertinya anda perlu melakukan porting agar library tersebut bisa digunakan dengan board tersebut. Mohon maaf, saya tidak bisa membantu dalam hal ini.

  20. fahrul says:

    terima kasih atas postingannya pak dan sangat membantu sekali,,
    klo boleh tau bisakah kita mengganti frequency stick PS2 wireless tersebut?? misalnya saya ingin mengunakan frequency 100 MHZ bukan 2,4 GHZ.
    terimakasih

    • Zerfani Yulias says:

      Frekuensi yang dipakai tergantung dengan stick PS2 yang kita beli. Untuk diketahui, frekuensi 2.4GHz itu bebas pemakaiannya, sedangkan yang lain perlu ijin khusus. Itu sebabnya banyak peralatan wireless di pasaran memakai frekuensi 2.4GHz. Setahu saya belum ada frekuensi selain 2.4GHz yang dipakai oleh stik PS2 yang ada di pasaran.

  21. yendi says:

    pa saya sudah coba dan error pada saat verifty pada arduino ini erornya kenapa ya pa ?

    sketch_feb23a.cpp:1:34: error: PS2X_lib.h: No such file or directory
    sketch_feb23a:2: error: ‘PS2X’ does not name a type
    sketch_feb23a.cpp: In function ‘void setup()’:
    sketch_feb23a:16: error: ‘ps2x’ was not declared in this scope
    sketch_feb23a.cpp: In function ‘void loop()’:
    sketch_feb23a:65: error: ‘ps2x’ was not declared in this scope
    sketch_feb23a:67: error: ‘GREEN_FRET’ was not declared in this scope
    sketch_feb23a:69: error: ‘RED_FRET’ was not declared in this scope
    sketch_feb23a:71: error: ‘YELLOW_FRET’ was not declared in this scope
    sketch_feb23a:73: error: ‘BLUE_FRET’ was not declared in this scope
    sketch_feb23a:75: error: ‘ORANGE_FRET’ was not declared in this scope
    sketch_feb23a:78: error: ‘STAR_POWER’ was not declared in this scope
    sketch_feb23a:81: error: ‘UP_STRUM’ was not declared in this scope
    sketch_feb23a:83: error: ‘DOWN_STRUM’ was not declared in this scope
    sketch_feb23a:86: error: ‘PSB_START’ was not declared in this scope
    sketch_feb23a:88: error: ‘PSB_SELECT’ was not declared in this scope
    sketch_feb23a:91: error: ‘ORANGE_FRET’ was not declared in this scope
    sketch_feb23a:94: error: ‘WHAMMY_BAR’ was not declared in this scope
    sketch_feb23a:100: error: ‘ps2x’ was not declared in this scope
    sketch_feb23a:102: error: ‘PSB_START’ was not declared in this scope
    sketch_feb23a:104: error: ‘PSB_SELECT’ was not declared in this scope
    sketch_feb23a:107: error: ‘PSB_PAD_UP’ was not declared in this scope
    sketch_feb23a:109: error: ‘PSAB_PAD_UP’ was not declared in this scope
    sketch_feb23a:111: error: ‘PSB_PAD_RIGHT’ was not declared in this scope
    sketch_feb23a:113: error: ‘PSAB_PAD_RIGHT’ was not declared in this scope
    sketch_feb23a:115: error: ‘PSB_PAD_LEFT’ was not declared in this scope
    sketch_feb23a:117: error: ‘PSAB_PAD_LEFT’ was not declared in this scope
    sketch_feb23a:119: error: ‘PSB_PAD_DOWN’ was not declared in this scope
    sketch_feb23a:121: error: ‘PSAB_PAD_DOWN’ was not declared in this scope
    sketch_feb23a:124: error: ‘PSAB_BLUE’ was not declared in this scope
    sketch_feb23a:130: error: ‘PSB_L3’ was not declared in this scope
    sketch_feb23a:132: error: ‘PSB_R3’ was not declared in this scope
    sketch_feb23a:134: error: ‘PSB_L2’ was not declared in this scope
    sketch_feb23a:136: error: ‘PSB_R2’ was not declared in this scope
    sketch_feb23a:138: error: ‘PSB_GREEN’ was not declared in this scope
    sketch_feb23a:143: error: ‘PSB_RED’ was not declared in this scope
    sketch_feb23a:146: error: ‘PSB_PINK’ was not declared in this scope
    sketch_feb23a:149: error: ‘PSB_BLUE’ was not declared in this scope
    sketch_feb23a:152: error: ‘PSB_L1’ was not declared in this scope
    sketch_feb23a:152: error: ‘PSB_R1’ was not declared in this scope
    sketch_feb23a:155: error: ‘PSS_LY’ was not declared in this scope
    sketch_feb23a:157: error: ‘PSS_LX’ was not declared in this scope
    sketch_feb23a:159: error: ‘PSS_RY’ was not declared in this scope
    sketch_feb23a:161: error: ‘PSS_RX’ was not declared in this scope

    • Zerfani Yulias says:

      Ini error yang muncul karena library PS2X_lib tidak ditemukan. Coba baca lagi tutorialnya yang ada link untuk men-dowload Arduino library untuk PS2X.

  22. bintang says:

    mas mohon pencerahan, kalau menggunakan stik ps 2 kan cuman 8 wire nda 9 ,, itu gimana, kan wire untuk commandnya nda ada di 8 mas

    • Zerfani Yulias says:

      Wah, yakin kabelnya hanya ada 8? Seharusnya ada 9, sesuai dengan jumlah pin pada konektor PS2. Kalau sudah dicoba dan tidak berhasil juga, coba cari stik PS2 yang lain yang punya 9 kabel.

  23. Fikri says:

    mas ,,, saya ingin membuat project TA RC quadcopter … apa stik PS2 ini cocok untul quadcopter?? soalny stik ini sudah ada receiver ny .. kira kira range dri Tx dan Rx ny brpa ya mas ?

    • Zerfani Yulias says:

      Bisa digunakan, tapi bukan berarti cocok. Karena stik PS2 ini punya jarak jangkauan sekitar 10 meter.
      Kalau kira-kira jarak 10 meter sudah cukup, silahkan dikembangkan contoh project ini untuk menjadi RC Quadcopter.
      Silahkan pelajari MultiWii untuk contoh program Arduino untuk Quadcopter.

  24. Taufiq says:

    itu codingan diatasmmsudah saya implementasikan dan berhasil,akan tetapi masih ada noise ketika joystick ps2 dimatikan pak,,apanya yg perlu dirubah agar tdk terjadi noise lagi..mohon dibalas…mksh..

  25. hedy says:

    tutornya sangat membantu, terimakasih 🙂

    mas mohon bantuannya, saya membuat hexapod dengan servo controller ssc32, saya ingin menggerakannya pake joystic, tutorial diatas sudah berhasil, permasalahannya servo tidak dapat bergerak ketika di beri inputan, malah inputannya saja yang tampil pada serial. padahal baudrate nya sudah di masukan
    serial.begin(57600); untuk joystic
    serial.begin(115200); untuk control servo

  26. jack says:

    mas kalo stik wireless sama kabel konfigurasinya sama ga?

  27. Adhan says:

    Pak…
    .code tambahan untuk menggerakkan 4 motor brushless pada Quadcopter… .bgmn Pak…???
    .mohon bantuannya Pak…
    .trima kasih…

  28. Adhan says:

    .mohon bantuannya yaa Pak…
    .trima kasih…

  29. adhan says:

    Pak..
    .kode tambahan untuk menggerakkan 4 motor pada Quadcopter..
    .bgmn pak..???
    .mohon bantuan.a pak….
    .trima kasih pak..

  30. Rio says:

    pak, saya sudah download psx2 lib nya,, pas dibuka di ide arduino 22 di bagian example setelah dicopy, file nya .ino buka .pde

    ada yg pde gak pak? terima kasih

  31. afk says:

    pak untuk edit library kemudian mencompile kembali menggunakan software apa ya?

  32. gusti ngurah says:

    Pak saya mau tanya. pas saya pencet Ctrl+Shift+M dia muncul kolom seperti diatas namun pada saat di sand dia tidak mau dan ada tulisan No controller found, check wiring, see readme.txt to enable debug. visit http://www.billporter.info for troubleshooting tips
    Unknown Controller type
    kenapa ya pak??

  33. khadafy says:

    Pak Bagaimana Kalau Saya Menggerakan Dua Buah Motor DC kode bagian mana yang harus saya rubah….?

  34. Rivan says:

    pak, jika saya menggunakan servo yang 360 drajat apa programnya sama atau berbeda? terima kasih

  35. Feishal Reza says:

    Slm kenal pak, maaf saya mau bertanya, apakah pada rangkaian diatas joystick nya sdh bisa mengendalikan kecepatan motor layaknya RC yg menggunakan electronic speed control, mohon dibalas pak, terima kasih.

  36. bam says:

    mas beli dmn modul nya…. apa ada kontak yg bs sy hubungi… terima kasih

  37. vincent says:

    Mas, saya sudah coba librarynya, tapi keluar message no controller found. Saya cek smua wiringnya semua sudah benar. Tapi yg buat saya bingung, led ps2nya gak nyala, secara teori bukannya led langsung nyala walaupun cuma kalau kabel merah ke 3.3v ama hitam ke ground aja?

  38. lesmana wisuta says:

    ini yg jual ad gk ua sticknya? lgi cari susah bgt. mungkin ad yg bisa kasih tau siapa yg jual?

  39. EEN SUTRA says:

    pak…. kalau program kontrol pergerakkan motor servo dengan joystik gmana?
    misalkan ditetapkan posisi awal servo pada posisi 90 derajat, pada saat saya tekan tombol RIGHT servo bergerak dari 90 derajat ke 180 derajat, atau saya tekan tombol LEFT servo bergerak dari 90 derajat ke 0 derajat.
    mohon bantuannya pak ..terima kasih

  40. kalo pake arduino mega 2560 programnya itu juga ya mas?

  41. Mas apa benar Disitu cuman mengendalikan 2 motor aja

    dan untuk mengendalikan 4 motor maju mundur bagaimana caranya
    mohon dibantu.

  42. Mas saya minta tolong kalo mengendalikan 4 motor maju mundur bagamana.

  43. EEN SUTRA says:

    mas saya pakai arduino mega 2560 .cara setting pin nya gimana. soalnya saya coba muncul (“No controller found, check wiring, see readme.txt to enable debug. visit http://www.billporter.info for troubleshooting tips”);
    mhon bantuannya

  44. irfan says:

    library ya waktu saya kompail kok error ya di bagian ini:
    PS2X ps2x; // create PS2 Controller Class
    mohon pencerahannya pak

  45. Wahyu says:

    Pak cara menambahkan lampu led dan tone dengan tobol yang belu terpakai gimana yah codenya dengan menggunakan joystick ps??

    trimakasih

  46. bagus says:

    pak zerfani, apakah merek dari stik ps2 mempengaruhi akan connect atau tidaknya ke arduino? soalnya saya make arduino mega 2560 tidak terdeteksi juga.

  47. WiltonSilaban says:

    Bang saya mau nanya kalau mau pesan dimana ya ???

  48. Agus says:

    Mas, kalau kita ingin menyalakan led pada pin 9 dengan menekan tombol x gimana nambah programnya. Trims sebelumnya

  49. ali says:

    pak,pin yg digunakan bisa di rubah tidak??soal’y pin 2-13 saya gunakan kan control motor,saya menggunakan arduino mega…

  50. Rafael Mekel says:

    Saya boleh memberikan saran,bagaimana kalau servonya ditambahin 4

Leave a Reply to Zerfani Yulias Cancel reply

Your email address will not be published. Required fields are marked *

Facebook