taker KRAI 2018
Dependencies: mbed encoderKRTMI Motornew millis
JoystickPS3.h
- Committer:
- SalbiFaza
- Date:
- 2019-02-24
- Revision:
- 0:dddc43348c25
File content as of revision 0:dddc43348c25:
#ifndef MBED_H #include "mbed.h" #endif #ifndef JoystickPS3__serialDEFAULT_BAUD #define JoystickPS3__serialDEFAULT_BAUD 115200 #endif //Serial debug(USBTX,USBRX); namespace JoystickPS3 { class joysticknucleo { public: joysticknucleo(PinName tx, PinName rx) : _serial(tx, rx) { } // Deklarasi variabel tombol analog unsigned char LX, LY, RX, RY, R2, L2; unsigned char button; unsigned char RL; unsigned char button_click; unsigned char RL_click; void setup(){ _serial.baud(JoystickPS3__serialDEFAULT_BAUD); // debug.baud(9600); } /*********************************************************************************************/ /** **/ /** FUNGSI PEMBACAAN DATA **/ /** - Data yang diterima dari Serial Arduino berbentuk 8-bit **/ /** - Data yang diterima diolah menjadi boolean / 1-bit untuk data tombol button dan RL **/ /** karena data yang digunakan adalah 1-bit (true/false) **/ /** - Untuk analog data yang diterima tidak diolah karena rentang data yang dikirimkan **/ /** memiliki rentang 0-255 / 8-bit, dan data yang akan digunakan adalah data 8-bit **/ /** **/ /** |------|-------|-------|------|-------|--------|-----------|----------| **/ /** Bit Ke | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | **/ /** |------|-------|-------|------|-------|--------|-----------|----------| **/ /** Data | kiri | bawah | kanan | atas | kotak | silang | lingkaran | segitiga | **/ /** |------|-------|-------|------|-------|--------|-----------|----------| **/ /** **/ /** - Penggabungan data R1, R2, L1, L2, R3, L3, START, dan SELECT disimpan dalam **/ /** variabel "RL" **/ /** - Urutan data pada variabel "RL" dan "RL_click" adalah **/ /** sebagai berikut **/ /** **/ /** |----|--------|-------|----|----|----|----| **/ /** Bit Ke | 6 | 5 | 4 | 3 | 2 | 1 | 0 | **/ /** |----|--------|-------|----|----|----|----| **/ /** Data | PS | SELECT | START | L3 | L1 | R3 | R1 | **/ /** |----|--------|-------|----|----|----|----| **/ /** **/ /*********************************************************************************************/ void olah_data() { // Pengolahan data dari data "button" segitiga = (bool)((button >> 0) & 0x1); lingkaran = (bool)((button >> 1) & 0x1); silang = (bool)((button >> 2) & 0x1); kotak = (bool)((button >> 3) & 0x1); atas = (bool)((button >> 4) & 0x1); kanan = (bool)((button >> 5) & 0x1); bawah = (bool)((button >> 6) & 0x1); kiri = (bool)((button >> 7) & 0x1); // Pengolahan data dari data "RL" R1 = (bool)((RL >> 0) & 0x1); R3 = (bool)((RL >> 1) & 0x1); L1 = (bool)((RL >> 2) & 0x1); L3 = (bool)((RL >> 3) & 0x1); START = (bool)((RL >> 4) & 0x1); SELECT = (bool)((RL >> 5) & 0x1); PS = (bool)((RL >> 6) & 0x1); // R2 click dan L2 click if (R2 > 100) { if ( R2sebelum) { R2_click = false; } else { R2_click = true;} R2sebelum = true; }else { R2sebelum = false; R2_click = false; } if (L2 > 100) { if ( L2sebelum) { L2_click = false; } else { L2_click = true;} L2sebelum = true; }else { L2sebelum = false; L2_click = false; } segitiga_click = (bool)((button_click >> 0) & 0x1); lingkaran_click = (bool)((button_click >> 1) & 0x1); silang_click = (bool)((button_click >> 2) & 0x1); kotak_click = (bool)((button_click >> 3) & 0x1); atas_click = (bool)((button_click >> 4) & 0x1); kanan_click = (bool)((button_click >> 5) & 0x1); bawah_click = (bool)((button_click >> 6) & 0x1); kiri_click = (bool)((button_click >> 7) & 0x1); // Pengolahan data dari data "RL" R1_click = (bool)((RL_click >> 0) & 0x1); R3_click = (bool)((RL_click >> 1) & 0x1); L1_click = (bool)((RL_click >> 2) & 0x1); L3_click = (bool)((RL_click >> 3) & 0x1); START_click = (bool)((RL_click >> 4) & 0x1); SELECT_click = (bool)((RL_click >> 5) & 0x1); PS_click = (bool)((RL_click >> 6) & 0x1); } /*********************************************************************************************/ /** **/ /** FUNGSI IDLE **/ /** - Fungsi dijalankan saat Arduino mengirimkan data yang merupakan **/ /** kondisi PS3 Disconnected **/ /** - Fungsi membuat semua data joystik bernilai 0 **/ /** **/ /*********************************************************************************************/ void idle(){ // Set 0 button = 0; RL = 0; button_click = 0; RL_click = 0; R2_click =0; L2_click =0; R2 = 0; L2 = 0; RX = 0; RY = 0; LX = 0; LY = 0; } /*********************************************************************************************/ /** **/ /** FUNGSI PEMBACAAN DATA **/ /** - Fungsi pembacaan data yang dikirim dari arduino **/ /** - Data yang dikirim dari arduino merupakan paket data dengan format pengiriman **/ /** **/ /** |------|------|--------|----|--------------|----------|----|----|----|----|----|----| **/ /** | 0x88 | 0x08 | button | RL | button_click | RL_click | R2 | L2 | RX | RY | LX | LY | **/ /** |------|------|--------|----|--------------|----------|----|----|----|----|----|----| **/ /** **/ /** |------|------| **/ /** | 0x88 | 0x09 | **/ /** |------|------| **/ /** **/ /** - Jika urutan data yang diterima seperti tabel diatas, maka data tersebut akan **/ /** diolah untuk input ke aktuator **/ /** **/ /*********************************************************************************************/ void baca_data() { // Interrupt Serial if(_serial.readable()&&(_serial.getc()==0x88)) { // Pembacaan data dilakukan jika data awal yang diterima adalah 0x88 kemudian 0x08 if(_serial.getc()==0x08){ // Proses Pembacaan Data button = _serial.getc(); RL = _serial.getc(); button_click = _serial.getc(); RL_click = _serial.getc(); R2 = _serial.getc(); L2 = _serial.getc(); RX = _serial.getc(); RY = _serial.getc(); LX = _serial.getc(); LY = _serial.getc(); } else if(_serial.getc()==0x09) { // PS3 Disconnected idle(); } else { idle(); } // Indikator - Print data pada monitor PC // 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); } } int readable(){ return _serial.readable(); } public: // Deklarasi variabel tombol joystik bool kiri, kanan, atas, bawah; bool segitiga, lingkaran, kotak, silang; bool L1, R1, L3, R3, START, SELECT, PS; bool kiri_click, kanan_click, atas_click, bawah_click; bool segitiga_click, lingkaran_click, kotak_click, silang_click; bool L1_click, R1_click, L3_click, R3_click, R2_click, L2_click; bool R2sebelum,L2sebelum; bool START_click, SELECT_click, PS_click; protected: virtual int _getc(){return _serial.getc();} Serial _serial; }; }; using namespace JoystickPS3;