Kodingan KRAI 2017

Dependencies:   mbed DigitDisplay PID Motor Ping millis

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 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;