Update 12 Maret 2017. Tambahan kombinasi tombol
Dependencies: DigitDisplay Motor PID Ping mbed millis
Fork of MainProgram_BaseBaru_20Feb_malam by
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 00191 int readable(){ 00192 return _serial.readable(); 00193 } 00194 00195 public: 00196 // Deklarasi variabel tombol joystik 00197 bool kiri, kanan, atas, bawah; 00198 bool segitiga, lingkaran, kotak, silang; 00199 bool L1, R1, L3, R3, START, SELECT, PS; 00200 00201 bool kiri_click, kanan_click, atas_click, bawah_click; 00202 bool segitiga_click, lingkaran_click, kotak_click, silang_click; 00203 bool L1_click, R1_click, L3_click, R3_click, R2_click, L2_click; 00204 bool R2sebelum,L2sebelum; 00205 bool START_click, SELECT_click, PS_click; 00206 00207 protected: 00208 virtual int _getc(){return _serial.getc();} 00209 Serial _serial; 00210 }; 00211 00212 }; 00213 00214 using namespace JoystickPS3;
Generated on Fri Jul 22 2022 22:58:39 by 1.7.2