Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
JoystickPS3.h
00001 #ifndef MBED_H 00002 #include "mbed.h" 00003 #endif 00004 00005 #ifndef JoystickPS3__serialDEFAULT_BAUD 00006 #define JoystickPS3__serialDEFAULT_BAUD 115200 00007 #endif 00008 00009 //Serial debug(USBTX,USBRX); 00010 00011 namespace JoystickPS3 { 00012 00013 class joysticknucleo { 00014 public: 00015 joysticknucleo(PinName tx, PinName rx) : _serial(tx, rx) 00016 { 00017 00018 } 00019 00020 // Deklarasi variabel tombol analog 00021 unsigned char LX, LY, RX, RY, R2, L2; 00022 00023 unsigned char button; 00024 unsigned char RL; 00025 unsigned char button_click; 00026 unsigned char RL_click; 00027 00028 void setup(){ 00029 _serial.baud(JoystickPS3__serialDEFAULT_BAUD); 00030 // debug.baud(9600); 00031 } 00032 00033 /*********************************************************************************************/ 00034 /** **/ 00035 /** FUNGSI PEMBACAAN DATA **/ 00036 /** - Data yang diterima dari Serial Arduino berbentuk 8-bit **/ 00037 /** - Data yang diterima diolah menjadi boolean / 1-bit untuk data tombol button dan RL **/ 00038 /** karena data yang digunakan adalah 1-bit (true/false) **/ 00039 /** - Untuk analog data yang diterima tidak diolah karena rentang data yang dikirimkan **/ 00040 /** memiliki rentang 0-255 / 8-bit, dan data yang akan digunakan adalah data 8-bit **/ 00041 /** **/ 00042 /** |------|-------|-------|------|-------|--------|-----------|----------| **/ 00043 /** Bit Ke | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | **/ 00044 /** |------|-------|-------|------|-------|--------|-----------|----------| **/ 00045 /** Data | kiri | bawah | kanan | atas | kotak | silang | lingkaran | segitiga | **/ 00046 /** |------|-------|-------|------|-------|--------|-----------|----------| **/ 00047 /** **/ 00048 /** - Penggabungan data R1, R2, L1, L2, R3, L3, START, dan SELECT disimpan dalam **/ 00049 /** variabel "RL" **/ 00050 /** - Urutan data pada variabel "RL" dan "RL_click" adalah **/ 00051 /** sebagai berikut **/ 00052 /** **/ 00053 /** |----|--------|-------|----|----|----|----| **/ 00054 /** Bit Ke | 6 | 5 | 4 | 3 | 2 | 1 | 0 | **/ 00055 /** |----|--------|-------|----|----|----|----| **/ 00056 /** Data | PS | SELECT | START | L3 | L1 | R3 | R1 | **/ 00057 /** |----|--------|-------|----|----|----|----| **/ 00058 /** **/ 00059 /*********************************************************************************************/ 00060 00061 void olah_data() 00062 { 00063 // Pengolahan data dari data "button" 00064 segitiga = (bool)((button >> 0) & 0x1); 00065 lingkaran = (bool)((button >> 1) & 0x1); 00066 silang = (bool)((button >> 2) & 0x1); 00067 kotak = (bool)((button >> 3) & 0x1); 00068 atas = (bool)((button >> 4) & 0x1); 00069 kanan = (bool)((button >> 5) & 0x1); 00070 bawah = (bool)((button >> 6) & 0x1); 00071 kiri = (bool)((button >> 7) & 0x1); 00072 00073 // Pengolahan data dari data "RL" 00074 R1 = (bool)((RL >> 0) & 0x1); 00075 R3 = (bool)((RL >> 1) & 0x1); 00076 L1 = (bool)((RL >> 2) & 0x1); 00077 L3 = (bool)((RL >> 3) & 0x1); 00078 START = (bool)((RL >> 4) & 0x1); 00079 SELECT = (bool)((RL >> 5) & 0x1); 00080 PS = (bool)((RL >> 6) & 0x1); 00081 00082 // R2 click dan L2 click 00083 if (R2 > 100) { 00084 if ( R2sebelum) { R2_click = false; 00085 } else { R2_click = true;} 00086 R2sebelum = true; 00087 }else { 00088 R2sebelum = false; 00089 R2_click = false; 00090 } 00091 if (L2 > 100) { 00092 if ( L2sebelum) { L2_click = false; 00093 } else { L2_click = true;} 00094 L2sebelum = true; 00095 }else { L2sebelum = false; 00096 L2_click = false; 00097 } 00098 00099 segitiga_click = (bool)((button_click >> 0) & 0x1); 00100 lingkaran_click = (bool)((button_click >> 1) & 0x1); 00101 silang_click = (bool)((button_click >> 2) & 0x1); 00102 kotak_click = (bool)((button_click >> 3) & 0x1); 00103 atas_click = (bool)((button_click >> 4) & 0x1); 00104 kanan_click = (bool)((button_click >> 5) & 0x1); 00105 bawah_click = (bool)((button_click >> 6) & 0x1); 00106 kiri_click = (bool)((button_click >> 7) & 0x1); 00107 00108 // Pengolahan data dari data "RL" 00109 R1_click = (bool)((RL_click >> 0) & 0x1); 00110 R3_click = (bool)((RL_click >> 1) & 0x1); 00111 L1_click = (bool)((RL_click >> 2) & 0x1); 00112 L3_click = (bool)((RL_click >> 3) & 0x1); 00113 START_click = (bool)((RL_click >> 4) & 0x1); 00114 SELECT_click = (bool)((RL_click >> 5) & 0x1); 00115 PS_click = (bool)((RL_click >> 6) & 0x1); 00116 } 00117 00118 /*********************************************************************************************/ 00119 /** **/ 00120 /** FUNGSI IDLE **/ 00121 /** - Fungsi dijalankan saat Arduino mengirimkan data yang merupakan **/ 00122 /** kondisi PS3 Disconnected **/ 00123 /** - Fungsi membuat semua data joystik bernilai 0 **/ 00124 /** **/ 00125 /*********************************************************************************************/ 00126 00127 void idle(){ 00128 // Set 0 00129 button = 0; 00130 RL = 0; 00131 button_click = 0; 00132 RL_click = 0; 00133 R2_click =0; 00134 L2_click =0; 00135 R2 = 0; 00136 L2 = 0; 00137 RX = 0; 00138 RY = 0; 00139 LX = 0; 00140 LY = 0; 00141 00142 } 00143 00144 /*********************************************************************************************/ 00145 /** **/ 00146 /** FUNGSI PEMBACAAN DATA **/ 00147 /** - Fungsi pembacaan data yang dikirim dari arduino **/ 00148 /** - Data yang dikirim dari arduino merupakan paket data dengan format pengiriman **/ 00149 /** **/ 00150 /** |------|------|--------|----|--------------|----------|----|----|----|----|----|----| **/ 00151 /** | 0x88 | 0x08 | button | RL | button_click | RL_click | R2 | L2 | RX | RY | LX | LY | **/ 00152 /** |------|------|--------|----|--------------|----------|----|----|----|----|----|----| **/ 00153 /** **/ 00154 /** |------|------| **/ 00155 /** | 0x88 | 0x09 | **/ 00156 /** |------|------| **/ 00157 /** **/ 00158 /** - Jika urutan data yang diterima seperti tabel diatas, maka data tersebut akan **/ 00159 /** diolah untuk input ke aktuator **/ 00160 /** **/ 00161 /*********************************************************************************************/ 00162 00163 void baca_data() 00164 { 00165 // Interrupt Serial 00166 if(_serial.readable()&&(_serial.getc()==0x88)) { 00167 // Pembacaan data dilakukan jika data awal yang diterima adalah 0x88 kemudian 0x08 00168 if(_serial.getc()==0x08){ 00169 // Proses Pembacaan Data 00170 button = _serial.getc(); 00171 RL = _serial.getc(); 00172 button_click = _serial.getc(); 00173 RL_click = _serial.getc(); 00174 R2 = _serial.getc(); 00175 L2 = _serial.getc(); 00176 RX = _serial.getc(); 00177 RY = _serial.getc(); 00178 LX = _serial.getc(); 00179 LY = _serial.getc(); 00180 } else if(_serial.getc()==0x09) { 00181 // PS3 Disconnected 00182 idle(); 00183 } else { 00184 idle(); } 00185 // Indikator - Print data pada monitor PC 00186 // debug.printf("%2x %2x %2x %2x %3d %3d %3d %3d %3d %3d\n\r",button, RL, button_click, RL_click, R2, L2, RX, RY, LX, LY); 00187 } 00188 } 00189 00190 int getData(){ 00191 return _serial.getc(); 00192 } 00193 int readable(){ 00194 return _serial.readable(); 00195 } 00196 00197 public: 00198 // Deklarasi variabel tombol joystik 00199 bool kiri, kanan, atas, bawah; 00200 bool segitiga, lingkaran, kotak, silang; 00201 bool L1, R1, L3, R3, START, SELECT, PS; 00202 00203 bool kiri_click, kanan_click, atas_click, bawah_click; 00204 bool segitiga_click, lingkaran_click, kotak_click, silang_click; 00205 bool L1_click, R1_click, L3_click, R3_click, R2_click, L2_click; 00206 bool R2sebelum,L2sebelum; 00207 bool START_click, SELECT_click, PS_click; 00208 00209 protected: 00210 virtual int _getc(){return _serial.getc();} 00211 Serial _serial; 00212 }; 00213 00214 }; 00215 00216 using namespace JoystickPS3;
Generated on Mon Jul 18 2022 17:00:01 by
1.7.2