KRAI 2017 / Mbed 2 deprecated Joystick_OrdoV4

Dependencies:   Motor PID Joystic_OrdoV3 mbed

Fork of Joystick_OrdoV4 by Joshua Gunawan

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers JoystickPS3.h Source File

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 
00012  
00013 namespace JoystickPS3 {
00014 
00015 class joysticknucleo {
00016 public:
00017     joysticknucleo(PinName tx, PinName rx) : _serial(tx, rx)
00018     {
00019         
00020     }
00021     
00022 // Deklarasi variabel tombol analog
00023     unsigned char LX, LY, RX, RY, R2, L2;
00024     
00025     unsigned char button;
00026     unsigned char RL;
00027     unsigned char button_click;
00028     unsigned char RL_click;
00029     
00030     void setup(){
00031         _serial.baud(JoystickPS3__serialDEFAULT_BAUD);
00032         debug.baud(9600);
00033         }
00034 
00035     /*********************************************************************************************/
00036     /**                                                                                         **/
00037     /** FUNGSI PEMBACAAN DATA                                                                   **/
00038     /** -   Data yang diterima dari Serial Arduino berbentuk 8-bit                              **/
00039     /** -   Data yang diterima diolah menjadi boolean / 1-bit untuk data tombol button dan RL   **/
00040     /**     karena data yang digunakan adalah 1-bit (true/false)                                **/
00041     /** -   Untuk analog data yang diterima tidak diolah karena rentang data yang dikirimkan    **/
00042     /**     memiliki rentang 0-255 / 8-bit, dan data yang akan digunakan adalah data 8-bit      **/
00043     /**                                                                                         **/
00044     /**         |------|-------|-------|------|-------|--------|-----------|----------|         **/
00045     /** Bit Ke  |   7  |   6   |   5   |   4  |   3   |    2   |      1    |     0    |         **/
00046     /**         |------|-------|-------|------|-------|--------|-----------|----------|         **/
00047     /** Data    | kiri | bawah | kanan | atas | kotak | silang | lingkaran | segitiga |         **/
00048     /**         |------|-------|-------|------|-------|--------|-----------|----------|         **/
00049     /**                                                                                         **/
00050     /** -   Penggabungan data R1, R2, L1, L2, R3, L3, START, dan SELECT disimpan dalam          **/
00051     /**     variabel "RL"                                                                       **/
00052     /** -   Urutan data pada variabel "RL" dan "RL_click" adalah                                **/
00053     /**     sebagai berikut                                                                     **/
00054     /**                                                                                         **/
00055     /**         |----|--------|-------|----|----|----|----|                                     **/
00056     /** Bit Ke  |  6 |    5   |   4   |  3 |  2 |  1 |  0 |                                     **/
00057     /**         |----|--------|-------|----|----|----|----|                                     **/
00058     /** Data    | PS | SELECT | START | L3 | L1 | R3 | R1 |                                     **/
00059     /**         |----|--------|-------|----|----|----|----|                                     **/
00060     /**                                                                                         **/
00061     /*********************************************************************************************/
00062     
00063     void olah_data()
00064     {
00065         // Pengolahan data dari data "button" 
00066         segitiga = (bool)((button >> 0) & 0x1);
00067         lingkaran = (bool)((button >> 1) & 0x1);
00068         silang = (bool)((button >> 2) & 0x1);
00069         kotak = (bool)((button >> 3) & 0x1);
00070         atas = (bool)((button >> 4) & 0x1);
00071         kanan = (bool)((button >> 5) & 0x1);
00072         bawah = (bool)((button >> 6) & 0x1);
00073         kiri = (bool)((button >> 7) & 0x1);
00074         
00075         // Pengolahan data dari data "RL" 
00076         R1 = (bool)((RL >> 0) & 0x1);
00077         R3 = (bool)((RL >> 1) & 0x1);
00078         L1 = (bool)((RL >> 2) & 0x1);
00079         L3 = (bool)((RL >> 3) & 0x1);
00080         START = (bool)((RL >> 4) & 0x1);
00081         SELECT = (bool)((RL >> 5) & 0x1);
00082         PS = (bool)((RL >> 6) & 0x1);
00083     
00084         segitiga_click = (bool)((button_click >> 0) & 0x1);
00085         lingkaran_click = (bool)((button_click >> 1) & 0x1);
00086         silang_click = (bool)((button_click >> 2) & 0x1);
00087         kotak_click = (bool)((button_click >> 3) & 0x1);
00088         atas_click = (bool)((button_click >> 4) & 0x1);
00089         kanan_click = (bool)((button_click >> 5) & 0x1);
00090         bawah_click = (bool)((button_click >> 6) & 0x1);
00091         kiri_click = (bool)((button_click >> 7) & 0x1);
00092         
00093         // Pengolahan data dari data "RL" 
00094         R1_click = (bool)((RL_click >> 0) & 0x1);
00095         R3_click = (bool)((RL_click >> 1) & 0x1);
00096         L1_click = (bool)((RL_click >> 2) & 0x1);
00097         L3_click = (bool)((RL_click >> 3) & 0x1);
00098         START_click = (bool)((RL_click >> 4) & 0x1);
00099         SELECT_click = (bool)((RL_click >> 5) & 0x1);
00100         PS_click = (bool)((RL_click >> 6) & 0x1);
00101     }
00102     
00103     /*********************************************************************************************/
00104     /**                                                                                         **/
00105     /** FUNGSI IDLE                                                                             **/
00106     /** -   Fungsi dijalankan saat Arduino mengirimkan data yang merupakan                      **/
00107     /**     kondisi PS3 Disconnected                                                            **/
00108     /** -   Fungsi membuat semua data joystik bernilai 0                                        **/
00109     /**                                                                                         **/
00110     /*********************************************************************************************/
00111     
00112     void idle(){
00113         // Set 0    
00114         button = 0;
00115         RL = 0;
00116         button_click = 0;
00117         RL_click = 0;
00118         R2 = 0;
00119         L2 = 0;
00120         RX = 0;
00121         RY = 0;
00122         LX = 0;
00123         LY = 0;
00124     
00125     }
00126     
00127     
00128     /*********************************************************************************************/
00129     /**                                                                                         **/
00130     /** FUNGSI PEMBACAAN DATA                                                                   **/
00131     /** -   Fungsi pembacaan data yang dikirim dari arduino                                     **/
00132     /** -   Data yang dikirim dari arduino merupakan paket data dengan format pengiriman        **/
00133     /**                                                                                         **/
00134     /** |------|------|--------|----|--------------|----------|----|----|----|----|----|----|   **/
00135     /** | 0x88 | 0x08 | button | RL | button_click | RL_click | R2 | L2 | RX | RY | LX | LY |   **/
00136     /** |------|------|--------|----|--------------|----------|----|----|----|----|----|----|   **/
00137     /**                                                                                         **/
00138     /** |------|------|                                                                         **/
00139     /** | 0x88 | 0x09 |                                                                         **/
00140     /** |------|------|                                                                         **/
00141     /**                                                                                         **/
00142     /** -   Jika urutan data yang diterima seperti tabel diatas, maka data tersebut akan        **/
00143     /**     diolah untuk input ke aktuator                                                      **/
00144     /**                                                                                         **/
00145     /*********************************************************************************************/
00146     
00147     void baca_data()
00148     {
00149         // Interrupt Serial
00150         if(_serial.readable()&&(_serial.getc()==0x88)) {
00151             // Pembacaan data dilakukan jika data awal yang diterima adalah 0x88 kemudian 0x08
00152             if(_serial.getc()==0x08){
00153                 // Proses Pembacaan Data
00154                 button = _serial.getc();
00155                 RL = _serial.getc();
00156                 button_click = _serial.getc();
00157                 RL_click = _serial.getc();
00158                 R2 = _serial.getc();
00159                 L2 = _serial.getc();
00160                 RX = _serial.getc();
00161                 RY = _serial.getc();
00162                 LX = _serial.getc();
00163                 LY = _serial.getc();
00164             } else if(_serial.getc()==0x09) {
00165                 // PS3 Disconnected
00166                 idle();
00167             } else {
00168                 idle(); }
00169             // Indikator - Print data pada monitor PC
00170   //          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);
00171         }   
00172     }
00173 
00174 
00175     
00176     int readable(){
00177         return _serial.readable();
00178     }
00179     
00180 public:
00181     // Deklarasi variabel tombol joystik
00182     bool kiri, kanan, atas, bawah;
00183     bool segitiga, lingkaran, kotak, silang;
00184     bool L1, R1, L3, R3, START, SELECT, PS;
00185     
00186     bool kiri_click, kanan_click, atas_click, bawah_click;
00187     bool segitiga_click, lingkaran_click, kotak_click, silang_click;
00188     bool L1_click, R1_click, L3_click, R3_click;
00189     bool START_click, SELECT_click, PS_click;
00190   
00191 protected:  
00192     virtual int _getc(){return _serial.getc();}
00193     Serial _serial;
00194 };
00195 
00196 };
00197 
00198 using namespace JoystickPS3;